无意间看到两段代码如下: 1. package csdn.qiailin.classloader;
2.
3. /**
4. * JvmExample
5. *
6. *
7. */
8. public class JvmExample {
9. private static JvmExample jvmExample = new JvmExample();
10. private static int count1;
11. private static int count2 = 0;
12.
13. public JvmExample() {
14. count1++;
15. count2++;
16. }
17.
18. public static JvmExample getInstance() {
19. return jvmExample;
20. }
21.
22. public static void main(String[] args) {
23. JvmExample jvmExample = JvmExample.getInstance();
24. System.err.println("count1=" + jvmExample.count1);
25. System.err.println("count2=" + jvmExample.count2);
26. }
27. }
1. package csdn.qiailin.classloader;
2.
3. /**
4. *
5. *
6. *
7. */
8. public class JvmExample {
9. private static int count1;
10. private static int count2 = 0;
11. private static JvmExample jvmExample = new JvmExample();
12.
13. public JvmExample() {
14. count1++;
15. count2++;
16. }
17.
18. public static JvmExample getInstance() {
19. return jvmExample;
20. }
21.
22. public static void main(String[] args) {
23. JvmExample jvmExample = JvmExample.getInstance();
24. System.err.println("count1=" + jvmExample.count1);
25. System.err.println("count2=" + jvmExample.count2);
26. }
27. }
这两段代码结果我算错了。求高手解释一下结果 。有原理最好,,,,
2.
3. /**
4. * JvmExample
5. *
6. *
7. */
8. public class JvmExample {
9. private static JvmExample jvmExample = new JvmExample();
10. private static int count1;
11. private static int count2 = 0;
12.
13. public JvmExample() {
14. count1++;
15. count2++;
16. }
17.
18. public static JvmExample getInstance() {
19. return jvmExample;
20. }
21.
22. public static void main(String[] args) {
23. JvmExample jvmExample = JvmExample.getInstance();
24. System.err.println("count1=" + jvmExample.count1);
25. System.err.println("count2=" + jvmExample.count2);
26. }
27. }
1. package csdn.qiailin.classloader;
2.
3. /**
4. *
5. *
6. *
7. */
8. public class JvmExample {
9. private static int count1;
10. private static int count2 = 0;
11. private static JvmExample jvmExample = new JvmExample();
12.
13. public JvmExample() {
14. count1++;
15. count2++;
16. }
17.
18. public static JvmExample getInstance() {
19. return jvmExample;
20. }
21.
22. public static void main(String[] args) {
23. JvmExample jvmExample = JvmExample.getInstance();
24. System.err.println("count1=" + jvmExample.count1);
25. System.err.println("count2=" + jvmExample.count2);
26. }
27. }
这两段代码结果我算错了。求高手解释一下结果 。有原理最好,,,,
private static JvmExample jvmExample = new JvmExample(); // 经过这里后1 和2 都为1 了
private static int count1;
private static int count2 = 0; // 这里又把2 设为0
先初始化了count1和count2,这时默认都为0
private static int count1;
private static int count2 = 0; // 这里本来默认值就是0,所以这个还是0
private static JvmExample jvmExample = new JvmExample(); // 经过这里后1 和2 都为1 了
关于这个问题,有两个点:
1.初始化顺序,静态域>普通域>构造方法。
2.new一个对象会调用构造方法。