【精致Java教程】28:方法的参数

在此之前的所有代码中的方法都是无参方法,除了main方法有个String[]参数。如果要给方法传递一个或多个参数可以写在方法名后的( )里。Java的方法参数可以是基本数据类型也可以是引用数据类型,还可以是一个代码段(这个机制叫lambda)。

这篇文章先讲讲基本数据类型和引用数据类型作为参数。

【精致Java教程】28:方法的参数_第1张图片

一个参数的方法##

示例代码:
我创建一个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。

本文代码下载:百度网盘

你可能感兴趣的:(【精致Java教程】28:方法的参数)