在学习java代码块的这块,感觉挺复杂,想整理整理,写个文档
里面涉及到的知识还是很多的
话不多说,先上代码
package practice2;
public class Test {
public static void main(String[] args) {
Person person = new Person();
}
}
class Person extends Animal{
{
System.out.println("Person 的代码块被调用");
}
public Person(){
//super();
//调用普通代码块
System.out.println("Person 的构造器被调用");
}
static {
System.out.println("Person 的静态代码块");
}
}
class Animal{
static {
System.out.println("Animal 的静态代码块被调用");
}
{
System.out.println("Animal 的代码块被调用");
}
public Animal(){
System.out.println("Animal 的构造器被调用");
}
}
输出的结果
Animal 的静态代码块被调用
Person 的静态代码块
Animal 的代码块被调用
Animal 的构造器被调用
Person 的代码块被调用
Person 的构造器被调用
总结一下
一共有三个东西
1)静态代码块
2)代码块
3)构造器
如果是在同一个类中,没有继承关系,那么执行的顺序就是1 -> 2 -> 3,
如果有继承关系
1)父类静态的方法和变量(执行顺序看代码写的顺序,优先级一样)
2)子类静态的方法和变量(执行顺序看代码写的顺序,优先级一样)
3)父类的代码块和变量(执行顺序看代码写的顺序,优先级一样)
4)父类的构造器
5)子类的代码块和变量(执行顺序看代码写的顺序,优先级一样)
6)子类的构造器
总结就是静态的全部优先,然后在是构造器那一级,构造器的具体调用看下面的就行
public Person(){
//super()
//代码块
//构造器
}