public class demo {
public static demo instance = new demo(20);
public static int i = 10;
public static void main(String[] args) {
demo d = demo.instance;
demo d1 = new demo(20);
}
public demo() {
}
public demo(int a) {
System.out.println(a - i);
}
}
1
mjikop1231 2018-04-11 22:38:41 +08:00
代码块小了。。。?
先执行静态成员的定义 第一次调用 demo(20) ,此时 i=0 然后执行 main 第二次调用 demo(20),此时 i=10 所以输出是: ``` 20 10 ``` |
2
shalk 2018-04-11 22:44:28 +08:00 via iPhone
静态初始化是按顺序赋值,instance 在赋值的时候,i 还是 0。这个 0 是准备阶段给出的
|
3
Wisteria 2018-04-11 22:50:43 +08:00 via Android
没格式化的代码看着真像一坨😼💩
|
4
binbinyouliiii 2018-04-11 22:57:06 +08:00
```
public class Demo { private static Demo instance = new Demo(20); private static int i = 10; public static void main(String[] args) { Demo demo1 = Demo.instance; Demo demo2 = new Demo(20); } public Demo(int a) { System.out.println(a - i); } } ``` |
5
cs923 2018-04-11 23:28:44 +08:00
测试了下,输出如下:
20 10 ps:类被加载时从上到下初始化成员,int 属于基本类型未被初始化默认为 0 |
6
WildCat 2018-04-11 23:54:50 +08:00
main method 的第一行:
“ demo d = demo.instance;” 即使删掉(注释掉),也会输出 20。 跟调不调用没关系。 |
7
pwrliang 2018-04-12 00:07:30 +08:00
好题啊,我只知道 Class 在加载的时候会初始化 static 成员,但是不知道会按声明顺序初始化的。调换初始化顺序就变成了 10,10.
public static int i = 10; public static demo instance = new demo(20); |
8
ng14 2018-05-24 17:39:19 +08:00 via Android
20
10 |
9
ng14 2018-05-24 17:40:08 +08:00 via Android
java 类的准备阶段
|