public class B
{
public static int variable=A.flag;
};
public class A
{
public static int flag=22;
public A()
{
flag++;
System.out.println(" in Constructor method variable="+Integer.toString(B.variable));//B.variable=10;
flag=40;
System.out.println(" in Constructor method variable="+Integer.toString(B.variable));//B.variable=10;
}
public static void changeValue()
{
flag=30;
System.out.println(" in changeValue method variable="+Integer.toString(B.variable));
}
public static void main(String[] args)
{
A a = new A(); System.out.println(" in static method variable="+Integer.toString(B.variable));
A.flag=20;
System.out.println("in static method variable="+Integer.toString(B.variable));
A.changeValue();
A b = new A();
}
};
输入结果:
in Constructor method variable=23
in Constructor method variable=23
in static method variable=23
n static method variable=23
in changeValue method variable=23
in Constructor method variable=23
in Constructor method variable=23
请高手解释一下原因。thanks。分数不够,可以再给。
{
public static int variable=A.flag;
};
public class A
{
public static int flag=22;
public A()
{
flag++;
System.out.println(" in Constructor method variable="+Integer.toString(B.variable));//B.variable=10;
flag=40;
System.out.println(" in Constructor method variable="+Integer.toString(B.variable));//B.variable=10;
}
public static void changeValue()
{
flag=30;
System.out.println(" in changeValue method variable="+Integer.toString(B.variable));
}
public static void main(String[] args)
{
A a = new A(); System.out.println(" in static method variable="+Integer.toString(B.variable));
A.flag=20;
System.out.println("in static method variable="+Integer.toString(B.variable));
A.changeValue();
A b = new A();
}
};
输入结果:
in Constructor method variable=23
in Constructor method variable=23
in static method variable=23
n static method variable=23
in changeValue method variable=23
in Constructor method variable=23
in Constructor method variable=23
请高手解释一下原因。thanks。分数不够,可以再给。
public static int variable=A.flag;
variable的赋值只在
flag++;
System.out.println(" in Constructor method variable="+Integer.toString(B.variable));//B.variable=10;
只在此调用时初始化赋值了
而对于后面的对flag的改变,都没有影响到B.variable,因为static变量只初始化一次,后面就不再对其初始化,也就不再调用public static int variable=A.flag;
所以B.variable的值一直都是23
当内存加载类B的时候,B.variable就是23了,而且就初始化一次,
所以始终就是23,
同意1,2楼
建议认真学习基础。