可能重复:
静态初始化块
请考虑以下代码:
public class Test {
{
System.out.println("Empty block");
}
static {
System.out.println("Static block");
}
public static void main(String[] args) {
Test t = new Test();
}
}
Run Code Online (Sandbox Code Playgroud)
我们知道首先执行静态块,然后执行空块.但问题是我从来没有能够理解空块的实际效用.任何人都可以展示一个真实的例子 -
我正在学习核心java中的静态块功能.
public class ClassResolution {
static class Parent {
public static String name = "Sparsh";
static {
System.out.println("this is Parent");
name = "Parent";
}
}
static class Child extends Parent {
static {
System.out.println("this is Child");
name = "Child";
}
}
public static void main(String[] args) throws ClassNotFoundException {
System.out.println(Child.name);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为输出将是:
this is Parent
this is Child
Child
Run Code Online (Sandbox Code Playgroud)
但实际输出是:
this is Parent
Parent
Run Code Online (Sandbox Code Playgroud)
而且我不知道为什么.
我知道当我创建一个实例静态块时首先初始化然后代码块然后构造函数在这里我的代码
public class Main{
public Main() {
out.println("constructor initialised");
}
static {
out.println("static block initialised");
}
{
out.println("Code block initialised");
}
public static void main(String... args) {
new Main();
}
}
Run Code Online (Sandbox Code Playgroud)
像这样输出
静态块初始化
代码块初始化
构造函数初始化
上面的输出清除了我的概念,但是当我扩展这样的类时
public class Main extends Bear{
public Main() {
out.println("constructor initialised");
}
static {
out.println("static block initialised");
}
{
out.println("Code block initialised");
}
public static void main(String... args) {
new Main();
}
}
Run Code Online (Sandbox Code Playgroud)
熊类
class Bear{
static {
out.println("static block initialised of bear class");
} …Run Code Online (Sandbox Code Playgroud)