Java程序方法设计

1.有时一个对象提供的服务太过复杂,就可以将一个方法分解为多个方法来进行设计,以建立一个理解性好的类结构设计。
2.另一个问题就是方法参数的传递方式。
参数传递实质上类似一条赋值语句,将实参保存值得副本赋给形参。在方法内部修改形参时,形参知识实参的一个副本,对形参的任何修改都不会影响实参。然而,如果将一个对象传给一个方法,实际上传递的是这个对象的引用。复制给形参的值是对象的地址。
下面可以看这个例子。

public class ParameterTester {

    public static void main(String[] args) {
        ParameterModifier modifier=new ParameterModifier();
        int a1=111;
        Num a2=new Num(222);
        Num a3=new Num(333);
        System.out.println("Before calling changevalues");
        System.out.println("a1\ta2\ta3");
        System.out.println(a1+"\t"+a2+"\t"+a3+"\n");
        modifier.changeValues(a1, a2, a3);
        System .out.println("After calling changevalues");
        System.out.println("a1\ta2\ta3");
        System.out.println(a1+"\t"+a2+"\t"+a3+"\n");
    }
}

输出结果

Before calling changevalues
a1  a2  a3
111 222 333

Before change the values
f1  f2  f3
111 222 333

After change the Values:
f1  f2  f3
999 888 777

After calling changevalues
a1  a2  a3
111 888 333

调用的两个类如下


public class ParameterModifier {

    public void changeValues(int f1,Num f2,Num f3) {
        System.out.println("Before change the values");
        System.out.println("f1\tf2\tf3");
        System.out.println(f1+"\t"+f2+"\t"+f3+"\n");

        f1=999;          //只是将a1=111的副本赋给了f1.现在f1重新=999;对a1无影响。
       f2.setValue(888); //形参名和实参名互为对方的别名。这句等于a2.setValue(888);
        f3=new Num(777); /*改变了形参引用本身,使形参指向一个新对象。不会影响实参。
        一开始复制给f3的是a3的地址,现在他指向了新的地址,对a3无影响*/

        System.out.println("After change the Values:");
        System.out.println("f1\tf2\tf3");
        System.out.println(f1+"\t"+f2+"\t"+f3+"\n");
    }
}
public class Num {

    private int value;
    public Num (int update) {
        value=update;
    }
    public void setValue(int update) {
        value=update;
    }
    public String toString () {
        return value +"";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值