Java 中静态代码块初始化问题测试 原创
情况一:变量是 static final 修饰的“编译期常量”,如 public static final String a = "JD";
public class Test {
public static void main(String[] args) {
System.out.println(Test2.a);
}
}
class Test2 {
public static final String a = "JD";
static {
System.out.print("OK");
}
}
参考答案
```
JD
```
情况二:变量是 static final 修饰的“非编译期常量”,如 public static final String a = new String("JD");
public class Test {
public static void main(String[] args) {
System.out.println(Test2.a);
}
}
class Test2 {
public static final String a = new String("JD");
static {
System.out.print("OK");
}
}
参考答案
```
OKJD
```
情况三:static 变量域不是 final,如 public static String a = "JD";
public class Test {
public static void main(String[] args) {
System.out.println(Test2.a);
}
}
class Test2 {
public static String a = "JD";
static {
System.out.print("OK");
}
}
参考答案
```
OKJD
```
情况四:继承是JAVA语言的一个特性,针对类的继承,虚拟机会如何进行父类和子类的初始化加载呢?
public class Test {
public static void main(String[] args) {
System.out.print(B.c);
}
}
class A {
static {
System.out.print("A");
}
}
class B extends A {
static {
System.out.print("B");
}
public static final String c = "C";
}
参考答案
```
C
```
public class Test {
public static void main(String[] args) {
System.out.print(B.c);
}
}
class A {
static {
System.out.print("A");
}
}
class B extends A {
static {
System.out.print("B");
}
public static String c = "C";
}
参考答案
```
ABC
```
public class Test {
public static void main(String[] args) {
System.out.print(B.c);
}
}
class A {
static {
System.out.print("A");
}
}
class B extends A {
static {
System.out.print("B");
}
public static String c = new String("C");
}
参考答案
```
ABC
```
public class Test {
public static void main(String[] args) {
System.out.print(B.c);
}
}
class A {
static {
System.out.print("A");
}
}
class B extends A {
static {
System.out.print("B");
}
public static final String c = new String("C");
}
参考答案
```
ABC
```
public class Test {
public static void main(String[] args) {
System.out.print(B.c);
}
}
class A {
static {
System.out.print("A");
}
// 测试:只能选择其中一种一条语句
// public static final String c = "C";
// public static String c = "C";
// public static final String c = new String("C");
public static String c = new String("C");
}
class B extends A {
static {
System.out.print("B");
}
}
参考答案
```
public class Test {
public static void main(String[] args) {
System.out.print(B.c);
}
}
class A {
static {
System.out.print("A");
}
// 测试:只能选择其中一种一条语句
// public static final String c = "C"; // C
// public static String c = "C"; // AC
// public static final String c = new String("C"); // AC
public static String c = new String("C"); // AC
}
class B extends A {
static {
System.out.print("B");
}
}