下面代码的运行结果应该是:
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);
}
你是怎么想出这么bt的demo的?
这个就是一个++i和i++的区别啊
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
这是没有问题的