public class StaticVariableTest {
private static StaticVariableTest svt = new StaticVariableTest();//语句(1)
private int count1=5;//语句(2)
private static int count2=6;//语句(3)
private StaticVariableTest(){//语句(4)
count1++;
count2++;
}
public static StaticVariableTest getInstance(){//语句(5)
return svt;
}
public int getCount1() {
return count1;
}
public void setCount1(int count1) {
this.count1 = count1;
}
public static int getCount2() {
return count2;
}
public static void setCount2(int count2) {
StaticVariableTest.count2 = count2;
}
public static void main(String[] args) {
StaticVariableTest svt = StaticVariableTest.getInstance();//语句(6)
System.out.println("count1:" + svt.getCount1());//语句(7)
System.out.println("count1:" + svt.getCount2());//语句(8)
}
}
对比下面一个
public class StaticVariableTest {
private static StaticVariableTest svt = new StaticVariableTest();//语句(1)
private static int count1=5;//语句(2)
private static int count2=6;//语句(3)
private StaticVariableTest(){//语句(4)
count1++;
count2++;
}
public static StaticVariableTest getInstance(){//语句(5)
return svt;
}
public static int getCount1() {
return count1;
}
public static setCount1(int count1) {
StaticVariableTest.count1 = count1;
}
public static int getCount2() {
return count2;
}
public static void setCount2(int count2) {
StaticVariableTest.count2 = count2;
}
public static void main(String[] args) {
StaticVariableTest svt = StaticVariableTest.getInstance();//语句(6)
System.out.println("count1:" + svt.getCount1());//语句(7)
System.out.println("count1:" + svt.getCount2());//语句(8)
}
}
private static StaticVariableTest svt = new StaticVariableTest();//语句(1)
private int count1=5;//语句(2)
private static int count2=6;//语句(3)
private StaticVariableTest(){//语句(4)
count1++;
count2++;
}
public static StaticVariableTest getInstance(){//语句(5)
return svt;
}
public int getCount1() {
return count1;
}
public void setCount1(int count1) {
this.count1 = count1;
}
public static int getCount2() {
return count2;
}
public static void setCount2(int count2) {
StaticVariableTest.count2 = count2;
}
public static void main(String[] args) {
StaticVariableTest svt = StaticVariableTest.getInstance();//语句(6)
System.out.println("count1:" + svt.getCount1());//语句(7)
System.out.println("count1:" + svt.getCount2());//语句(8)
}
}
对比下面一个
public class StaticVariableTest {
private static StaticVariableTest svt = new StaticVariableTest();//语句(1)
private static int count1=5;//语句(2)
private static int count2=6;//语句(3)
private StaticVariableTest(){//语句(4)
count1++;
count2++;
}
public static StaticVariableTest getInstance(){//语句(5)
return svt;
}
public static int getCount1() {
return count1;
}
public static setCount1(int count1) {
StaticVariableTest.count1 = count1;
}
public static int getCount2() {
return count2;
}
public static void setCount2(int count2) {
StaticVariableTest.count2 = count2;
}
public static void main(String[] args) {
StaticVariableTest svt = StaticVariableTest.getInstance();//语句(6)
System.out.println("count1:" + svt.getCount1());//语句(7)
System.out.println("count1:" + svt.getCount2());//语句(8)
}
}
解决方案 »
- 我想有一个正则可以去掉,所有的html标签内容,然后去掉回车,换行这些标签,然后下面的内容希望变成
- java 线程之间的 调度
- java 打印出两个IP之间的所有IP值
- java Calendar类的问题
- 使用openssl的md5标准算法.....对加密出来的128bit原始数据 再进行base64编码
- 哪位大侠能给在下发个jspSmartUploada啊?
- 怎样一次读取不定长度的InputStream? 非要指定一个固定缓冲吗?
- 关于窗口显示,很简单的问题,马上给分!!
- java中int, double 转化成String, String转化成double,怎么做?请给个例子.
- 如何用java来打开一个帮助文件,该文件有DOCCHM来完成,生成win32帮助文件。
- x += x;都发生了什么?
- 既然String s = new String("xyz"); 那么String s="xyz" 创建了几个String Object呢?
main()方法 是静态的 所以先执行 main()
private static Test svt;
private int count1;
private static int count2;
static{
svt = new Test();//调用构造函数,此时,count1=6;count2=1;
count2=6;//
}
private Test(){//
count1=5;
count1++;
count2++;
}
public static int count1=5;
为什么有static没有它执行的结果会不一样?谢谢
你的第一个例子不已经包含了两种情况,一种是有static(count2),一种没有static(count1),
这个清楚,第二题不就明白了
顺序:静态变量-》实例变量-》构造方法第一个例子:
首先试图初始化静态变量svt,结果碰到了=后边的构造方法:new StaticVariableTest();
但是在构造方法执行之前必须先初始化实例变量count1,于是先跑去执行语句(2),于是count1=5;
之后回来继续执行构造方法,于是count1加1变成6,count2由0变成1;
接下来轮到语句(3),于是count2重新被赋值变成6;
在接下来语句(6)(7)(8)取值,打印,
所以结果:6,6第二个例子:
不同的地方是,初始化静态变量svt,结果碰到了=后边的构造方法:new StaticVariableTest();时,不是再跑去先执行语句(2),因为此时的count1已经不是实例变量了,而是直接就去执行构造方法,于是count1,count2都由0变成了1。
接下来顺序执行语句(2)(3),于是count1,count2分别被重新赋值变成5,6
剩下的语句就是取值,打印
所以结果:5,6
你可以使用反编译工具 jad 看看。