一道 Java 题。。。。。。

2018-04-11 22:29:01 +08:00
 callmedachang

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);
}

}

3221 次点击
所在节点    Java
9 条回复
mjikop1231
2018-04-11 22:38:41 +08:00
代码块小了。。。?
先执行静态成员的定义 第一次调用 demo(20) ,此时 i=0
然后执行 main 第二次调用 demo(20),此时 i=10
所以输出是:
```
20
10
```
shalk
2018-04-11 22:44:28 +08:00
静态初始化是按顺序赋值,instance 在赋值的时候,i 还是 0。这个 0 是准备阶段给出的
Wisteria
2018-04-11 22:50:43 +08:00
没格式化的代码看着真像一坨😼💩
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);
}
}
```
cs923
2018-04-11 23:28:44 +08:00
测试了下,输出如下:
20
10
ps:类被加载时从上到下初始化成员,int 属于基本类型未被初始化默认为 0
WildCat
2018-04-11 23:54:50 +08:00
main method 的第一行:
“ demo d = demo.instance;”

即使删掉(注释掉),也会输出 20。

跟调不调用没关系。
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);
ng14
2018-05-24 17:39:19 +08:00
20
10
ng14
2018-05-24 17:40:08 +08:00
java 类的准备阶段

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/446067

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX