首页 新闻 会员 周边 捐助

实例通过方法可以改变并保存非静态变量吗?

0
悬赏园豆:10 [已解决问题] 解决于 2017-12-26 20:31

下面代码的运行结果应该是:

101

112

213

我不太明白,为什么第三行会是213? 第一次创建一个对象(t=new TwoB())后,通过构造函数alpha由0变成了1可以理解(因为它是静态变量),beta仍然是0。第二次创建一个对象(t=new TwoB(1))后,通过构造函数beta由0变成了1,alpha仍然是1。第三次创建一个对象(t=new TwoB())时,由于这是一个新的对象,beta应该还是创建对象时的初始默认值0吧?不应该是创建前一个对象时已经修改成1的beta值啊!而且此时由构造函数alpha变成2(因为它是静态变量,可以通过之前的对象对方法的调用而修改并保存)。对象实例可以通过方法改变并保存静态变量alpha,难道也可以改变并保存非静态实例变量beta吗?哪位大神帮忙分析一下,十分感谢!

 

public class TwoB {

    private static int alpha;

    private int beta;

    

    public TwoB() {

        this(alpha++);

    }

 

    public TwoB(int x) {

        beta = x;

    }

 

    public int asInt() {

        return alpha + beta;

    }

 

    public String asString() {

        return "" + alpha + beta;

    }

 

    public String toString() {

        return asString() + asInt();

    }

}

 

 

public static void main(String[] args) {

    TwoB t;

    t=new TwoB();

    System.out.println(t);

    t=new TwoB(1);

    System.out.println(t);

    t=new TwoB();

    System.out.println(t);

}

jinleiDev的主页 jinleiDev | 初学一级 | 园豆:142
提问于:2017-12-26 19:47
< >
分享
最佳答案
0

你是怎么想出这么bt的demo的?

这个就是一个++i和i++的区别啊

收获园豆:10
Daniel Cai | 专家六级 |园豆:10424 | 2017-12-26 20:17
其他回答(1)
0

static的静态变量存放于方法区,你可以理解为是公共的,原则上来说不属于对象的实例变量,而实例变量随着实例对象的初始化而进行初始化,例如beta,初始化的时候就是0,而alpha在初始化的是0,第一次实例化的时候是1,第二次没有调用,第三次又增加了1,

我们看下过程

alpha 1 beta 0 toString 101

alpha 1 beta 1 toString 112

alpha 2 beta 1 toString 213

这是没有问题的

愤怒小书生 | 园豆:246 (菜鸟二级) | 2018-01-22 17:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册