public class ddd {
private int value = 1; public ddd(int value) {
value = value + 3;
} public void method(int val) {
value += val + 2;
} public int getValue() {
return value;
} public static void main(String[] args) {
ddd m = new ddd(2);
System.out.println(m.getValue());
m.method(3);
System.out.println(m.getValue());
}
}
谁能帮我讲解下执行顺序,谢谢。输出结果是1,6。 我最开始以为是5,10.

解决方案 »

  1.   

    ddd m = new ddd(2);
    这句话,我试了下,把 括号里边的2 改成任意数字都不会影响结果。对象引用 m ,在下边都用到了,除了提出对象引用,这个  ddd m = new ddd(2);还有其他作用么? 有没有什么说法在这种用法上?
      

  2.   

    这是不是有关传值的问题 pass by value?
      

  3.   

    首先,你的构造函数,两个value,你知道哪一个是类的私有成员value,哪一个是传递过来的参数value吗,如果你写成
    this.value=value+3就清晰多了,其实你这个构造函数并没有将似有变量value改变值,只是将参数value毫无意义地变了一下,所以你的对象m中,value还是默认的1
      

  4.   

    其实楼主可能对实例变量和局部变量还没有弄得很清楚.其实这样一句:    public ddd(int value) {
            value = value + 3;  //这里两个value只在这个方法里有用,离开这个方法其生存期就消亡了.
        }
    而按楼主意思应该这样做的:
        public ddd(int value) {
            this.value = value + 3;  //这里的this.value是指实例变量,会对这个实例有影响,就是改变了这个变量的值了,所以你用这个实例m的方法getValue()就会得到5.而这里的value只在这个方法里有用,离开这个方法其生存期就消亡了,但此时的实例变量已经被修改了.
        }
      

  5.   

    5楼解释一步到位,this.value也很准确!
    谢谢楼上几位的帮助!