静态变量和非静态变量区别解决方法
静态变量和非静态变量区别
这是第一段:
这是第二段:
按照JVM的加载 连接 初始化 可以知道第一段输出的是0 0
那么第二段的不是静态的 他是在什么完成i j的赋值的? 是在编译期还是什么时候? 打印出来5 4
------解决方案--------------------
在你new他的时候 我感觉。。
------解决方案--------------------
编译期可new不出来对象。当然是执行的时候,如1楼所说,new Test()的时候。
早期研究此类问题,可以增加大量的System.out.println();就比较容易了解情况了。
另外,你还可以试试在main里面只留下:
Class.forName("org.cc.demo.JVMTest.Test");
------解决方案--------------------
new Test()时赋值滴
------解决方案--------------------
new Test()时,调用构造器之前
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
第一段:new在前,ij还没有进行初始化所以为0
第二段:ij为成员变量,所以在new时要进行初始化
不知道对不对,你可以把ij放到new前面试试看
------解决方案--------------------
第二个:
2.2初始化的时候 从上向下执行 先private static Test test=new Test();
当然是这个时候,会初始化成员变量,再调用构造器。
这是第一段:
- Java code
package org.cc.demo.JVMTest; class Test{ private static Test test=new Test(); private static int i=5; private static int j=4; public Test(){ System.out.println(i); System.out.println(j); } public static Test getInstance(){ return test; } } public class JVMDemo01 { public static void main(String[] args) { Test t=Test.getInstance(); } }
这是第二段:
- Java code
package org.cc.demo.JVMTest; class Test{ private static Test test=new Test(); private int i=5; private int j=4; public Test(){ System.out.println(i); System.out.println(j); } public static Test getInstance(){ return test; } } public class JVMDemo01 { public static void main(String[] args) { Test t=Test.getInstance(); } }
按照JVM的加载 连接 初始化 可以知道第一段输出的是0 0
那么第二段的不是静态的 他是在什么完成i j的赋值的? 是在编译期还是什么时候? 打印出来5 4
------解决方案--------------------
在你new他的时候 我感觉。。
------解决方案--------------------
编译期可new不出来对象。当然是执行的时候,如1楼所说,new Test()的时候。
早期研究此类问题,可以增加大量的System.out.println();就比较容易了解情况了。
另外,你还可以试试在main里面只留下:
Class.forName("org.cc.demo.JVMTest.Test");
------解决方案--------------------
new Test()时赋值滴
------解决方案--------------------
new Test()时,调用构造器之前
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
第一段:new在前,ij还没有进行初始化所以为0
第二段:ij为成员变量,所以在new时要进行初始化
不知道对不对,你可以把ij放到new前面试试看
------解决方案--------------------
第二个:
2.2初始化的时候 从上向下执行 先private static Test test=new Test();
当然是这个时候,会初始化成员变量,再调用构造器。