Java函数
函数能够将功能相近的代码封装成一个可以复用的模块。
1、定义
一般的函数需要考虑以下内容:返回值类型、函数名称和形参。
如有一个函数,功能为在屏幕上直接输出一个字符串“Hello”,函数的原型为:
void func()
{
System.out.println("Hello");
}
如有一个函数,接受一个字符串变量,将其在屏幕上输出,函数原型为:
void func(String str)
{
System.out.println(str);
}
如有一个函数,接受两个整型变量,返回它们的最大值,函数原型为:
int func(int a,int b)
{
if(a>b)
return a;
else
return b;
}
或者为:
int func(int a,int b)
{
if(a>b)
return a;
return b;
}
或者为:
int func(int a,int b)
{
return (a>b)?a:b;
}
2 使用
函数的使用很简单,只需直接以函数名称调用即可,如函数有形参则可以将实参赋过去,如函数没有参数,括号也不能省略。如:
public class exec
{
public static void main(String[] args)
{
System.out.println(func(1,2));
}
public static int func(int a,int b)
{
return (a>b)?a:b;
}
}
说明:如果一个函数需要被main主函数调用,需要在前面加上public static(个中原因以后再说)。
对于具有引用类型参数的函数而言,调用后将有可能产生实参的改变。
如:
public class exec
{
public static void main(String[] args)
{
int i=0;
func(i);
System.out.println(i);
}
public static void func(int num)
{
num=1;
}
}
输出为0,表明基本类型的参数不会发生形参的改变导致实参的改变
再如:
public class exec
{
public static void main(String[] args)
{
int[] narray=new int[10];
narray[0]=0;
func(narray);
System.out.println(narray[0]);
}
public static void func(int[] num)
{
num[0]=1;
}
}
输出为1,表明引用类型的参数会发生形参的改变导致实参的改变,主要原因在于参数的传递内容其实是对象变量的引用,而非对象本身,所以会导致形参引用变量和实参引用变量指向同一个对象变量。
3、函数重载
下面程序的功能是实现多种函数,分别对不同类型的变量求最大值
public class exec
{
public static void main(String[] args)
{
System.out.println(ifunc(1,2));
System.out.println(dfunc(1.0,2.0));
}
public static int ifunc(int a,int b)
{
return (a>b)?a:b;
}
public static double dfunc(double a,double b)
{
return (a>b)?a:b;
}
}
虽然结构清晰,但是函数调用的时候不太方便,需要指定不同的函数名称。在Java中完全可以将上述的两个自定义函数设计成同一个名称,但是参数不一样,此时称为函数重载,如:
public class exec
{
public static void main(String[] args)
{
System.out.println(func(1,2));
System.out.println(func(1.0,2.0));
}
public static int func(int a,int b)
{
return (a>b)?a:b;
}
public static double func(double a,double b)
{
return (a>b)?a:b;
}
}
注意:
重载的条件只有下面几种:
1)参数个数不一样,或者参数有无
2)参数类型不一样,或者类型顺序不一样
下面不能成为重载的条件:
1)参数的名称不一样
2)函数的返回类型不一样
有时存在隐式类型转换,会导致调用情况复杂,如:
public class exec
{
public static void main(String[] args)
{
System.out.println(func(1,2.0));
}
public static int func(int a,int b)
{
return (a>b)?a:b;
}
public static double func(double a,double b)
{
return (a>b)?a:b;
}
}
输出为:2.0
说明:当有多种重载函数可以匹配时,系统总是采用从低精度类型向高精度类型转换的方式来选择重载函数。
[此贴子已经被作者于2010-12-12 07:34:25编辑过]