任何人都可以解释以下程序的输出吗?我认为构造函数在实例变量之前被初始化.所以我期待输出为"XZYY".
class X {
Y b = new Y();
X() {
System.out.print("X");
}
}
class Y {
Y() {
System.out.print("Y");
}
}
public class Z extends X {
Y y = new Y();
Z() {
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}
Run Code Online (Sandbox Code Playgroud) 我今天早些时候在代码中结束了以下场景(我承认有点奇怪,我已经重构了).当我运行单元测试时,我发现在超类构造函数运行的时候没有设置字段初始化.我意识到我并不完全理解构造函数/字段初始化的顺序,所以我希望有人向我解释这些发生的顺序.
class Foo extends FooBase {
String foo = "foobar";
@Override
public void setup() {
if (foo == null) {
throw new RuntimeException("foo is null");
}
super.setup();
}
}
class FooBase {
public FooBase() {
setup();
}
public void setup() {
}
}
@Test
public void testFoo() {
new Foo();
}
Run Code Online (Sandbox Code Playgroud)
来自JUnit的缩写回溯如下,我想我期望$ Foo.<init>来设置foo.
$Foo.setup
$FooBase.<init>
$Foo.<init>
.testFoo
Run Code Online (Sandbox Code Playgroud) 声明基元/对象时,它们是否已初始化?
默认值是哪些?
班级成员和当地领域的行为如何?
类成员的对象声明怎么样?
如下回答,这些是默认值:
Run Code Online (Sandbox Code Playgroud)Data Type - Default Value (for fields) byte 0 short 0 int 0 long 0L float 0.0f double 0.0d char '\u0000' String (or any object) null boolean false
请注意,对象被初始化为null