静态代码块
static {
System.out.println("静态代码块");
}
静态代码块只在第一次创建该对象时调用一次,以后再创建该对象不在调用
一个类中有多个静态代码块时,会按照书写顺序依次执行
普通代码块
{
System.out.println("匿名代码块");
}
普通代码块每次创建对象时都会调用一次
执行顺序:静态代码块>普通代码块>构造方法
public class test {
//普通代码块
{
System.out.println("普通代码块");
}
//静态代码块
static {
System.out.println("静态代码块");
}
public test(){
System.out.println("构造方法");
}
public static void main(String[] args) {
test t1 = new test();
System.out.println("-----------");
test t2 = new test();
}
}
执行结果:
父类子类中的执行顺序:
首先执行父类静态代码块的内容,再去执行子类的静态代码块的内容,
执行完父类和子类的静态代码块后,先执行父类中的普通代码块、构造方法,
最后去执行子类中的普通代码块、构造方法。
总之一句话,静态代码块内容先执行,接着执行父类普通代码块和构造方法,然后执行子类普通代码块和构造方法。
public class Person {
//普通代码块
{
System.out.println("父类的普通代码块");
}
//静态代码块
static {
System.out.println("父类的静态代码块");
}
public Person() {
System.out.println("Person的构造方法");
}
}
public class Student extends Person{
//普通代码块
{
System.out.println("子类的普通代码块");
}
//静态代码块
static {
System.out.println("子类的静态代码块");
}
public Student() {
System.out.println("Student的构造方法");
}
}
public class test {
public static void main(String[] args) {
Student s1 = new Student();
System.out.println("-----------");
Student s2 = new Student();
}
}