美文网首页Java技术文章技术文代码改变世界
【精致Java教程】28:方法的参数

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

作者: 许宏川 | 来源:发表于2015-06-10 22:57 被阅读597次

    在此之前的所有代码中的方法都是无参方法,除了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);
    }
    

    运行结果:

    <pre>
    10
    </pre>

    从运行结果可以看出,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);
    

    运行结果:

    <pre>
    张三
    李四
    </pre>

    运行结果显示即使是引用数据类型还是没有改变参数的值。再解释一遍原因就是方法里创建了两个新的Person对象p1和p2,然后他们分别指向作为参数传进来的p1和p2指向的对象。swap方法交换了方法里的p1和p2的引用,但是并没有改变作为参数的p1和p2。

    本文代码下载:百度网盘

    相关文章

      网友评论

        本文标题:【精致Java教程】28:方法的参数

        本文链接:https://www.haomeiwen.com/subject/zojjqttx.html