在此之前的所有代码中的方法都是无参方法,除了main方法有个String[]参数。如果要给方法传递一个或多个参数可以写在方法名后的( )里。Java的方法参数可以是基本数据类型也可以是引用数据类型,还可以是一个代码段(这个机制叫lambda)。
这篇文章先讲讲基本数据类型和引用数据类型作为参数。
一个参数的方法##
示例代码:
我创建一个Param类,里面有个square接收一个int参数做平方运算。
public void square(int i) {
i *= i;
}
多个参数的方法##
上面是一个参数,下面的power有两个参数,接受两个参数i和th,对i进行th次方运算。以此类推,如果方法需要更多参数只需要用,号隔开即可。
public void power(int i, int th) {
for (int j = 0; j < th; j++) {
i *= i;
}
}
Java的参数都是值传递##
所谓值传递就是把一个变量作为参数传进方法时,是拷贝一个变量进去而不是真的把变量传进去。
示例代码:
创建Param的对象并创建变量作为square方法的参数。
public static void main(String[] args) {
int i = 10;
Param p = new Param();
p.square(i);
System.out.println(i);
}
运行结果:
10
从运行结果可以看出,i的值并没有被square方法改变。原因是方法的参数只是值传递。在定义方法是square时,( )里的int i叫做形式参数,然后在调用square时传进去的i叫做实际参数。在调用square时会创建一个新的int变量,变量名为i(变量名可以相同是因为两个i的作用域不同互不干扰)。然后把作为参数的i的值也就是10传递给方法里创建的i,然后执行i *= i;语句,把方法里的i进行平方运算。但是参数i作为参数传个值进去之后就没它什么事了,并没有改变它的值。
以上是基础数据类型,再来一个引用数据类型作为参数的例子吧。
实例代码:
创建一个Person类,里面就name一个属性。
public class Person {
public String name;
}
定义一个swap方法,交换两个Person对象的引用。
public static void swap(Person p1, Person p2) {
Person temp = p1;
p1 = p2;
p2 = p1;
}
在main方法里做测试:
Person p1 = new Person();
p1.name = "张三";
Person p2 = new Person();
p2.name = "李四";
swap(p1, p2);
System.out.println(p1.name);
System.out.println(p2.name);
运行结果:
张三
李四
运行结果显示即使是引用数据类型还是没有改变参数的值。再解释一遍原因就是方法里创建了两个新的Person对象p1和p2,然后他们分别指向作为参数传进来的p1和p2指向的对象。swap方法交换了方法里的p1和p2的引用,但是并没有改变作为参数的p1和p2。
本文代码下载:百度网盘