读书人

J的结果为啥是0

发布时间: 2011-12-06 23:05:08 作者: rapoo

J的结果为什么是0
public class testString {
private static testString s = new testString();

private static int i;

private static int j=0;

public testString() {
System.out.println( "i= "+i+ " "+ "j= "+j);
i++;
j++;
System.out.println( "i= "+i+ " "+ "j= "+j);
}

public static testString getInstance() {
return s;
}

public static void main(String[] args) {
testString s = testString.getInstance();
System.out.println( "==s=== " + s.s);
System.out.println( "=====i====== " + i);
System.out.println( "=====j====== " + j);
}
}

[解决办法]
因为j是static变量,不属于对象,而属于整个类
[解决办法]
private static testString s = new testString();

private static int i;

private static int j=0;
------------------------------------------------------
关键是这三行的顺序,这里也是顺序执行的,
构造函数执行完后,private static int j=0,又一次把j的值置成0了

private static testString s = new testString();
这句应放在最后

[解决办法]
这与程序的执行顺序有关。
载入类的时候,运行时先初使化testString的s instance,在初使化s时调用了testString的构造函数,这个时候i = 1,j = 1.而后执行private static int i及private static int j=0.实际上,i和j在之前已经初使化了。在执行private static int i时没有更改i的值,而执行private static int j=0时相当于执行了一次j=0的操作。所以最终结果为i=1,j=0.
[解决办法]
初始化顺序先对静态成员变量进行声明,同时赋初始值,然后顺序执行静态部分的所有语句,而声明中如果赋值的话到这时才运行。
[解决办法]
public class DateTest {
private static String s = "1 ";

public static void main(String[] args) {
DateTest d1 = new DateTest();
DateTest.s = "aa ";
DateTest d2 = new DateTest();
d2.s = "bb ";
DateTest d3 = new DateTest();
d3.s= "cc ";

System.out.println(d1.s);
System.out.println(d2.s);
System.out.println(d3.s);
}
}

看这个例子,正如1楼说的那样,静态变量是属于类的.所有此类的对象共用

读书人网 >J2SE开发

热点推荐