public{
//下面两者一个意思
static { int x =5;}
static int x = 5;
static int x; //最后x的值变成零,因为第三次定义的时候没给初值,默认值就是0
}
正常状态
父类静态代码块,父类静态变量(同优先级按顺序)
子类静态代码块,子类静态成员变量(同级)
父类普通代码块,父类普通成员变量(同级)
父类构造函数
子类普通代码块,子类普通成员变量
子类构造函数
先父子静态,在父类(普通,构造),在子类(普通,构造)
普通代码块就是{ },里面随便写啥
下题;创建一个对象t2,然后后面第一步又是创建静态对象t1,t1要先把普通代码块都执行完才走静态
public class text {
public static text t1 = new text();
{
System.out.println("blockA");
}
static {
System.out.println("blockB");
}
text() {
System.out.println("BlockC");
}
public static void main(String[] args) {
text t2 = new text();
System.out.println();
text t3 = new text();
}
}
输出
blockA
BlockC
blockB
blockA
BlockC
blockA
BlockC
class B {
public B() {
super();
System.out.println("构造器B");
}
{
System.out.println("普通的代码块B");
}
static {
System.out.println("静态代码块B");
}
}
public class ClassA extends B {
public ClassA() {
super();
System.out.println("构造器A");
}
{
System.out.println("普通的代码块A");
}
static {
System.out.println("静态代码块A");
}
public static void main(String[] args) {
ClassA a = new ClassA();
}
}
静态代码块B
静态代码块A
普通的代码块B
构造器B
普通的代码块A
构造器A