不涉及继承
静态代码块,动态代码块,构造函数
package demo01;
public class Demo02 {
public Demo02(){
System.out.println("构造函数");
}
static{
System.out.println("静态代码块");
}
{
System.out.println("动态代码块");
}
public static void main(String[] args) {
new Demo02();
new Demo02();
}
}
输出结果:
静态代码块
动态代码块
构造函数
动态代码块
构造函数
涉及继承
package demo01;
import org.junit.Test;
public class Demo02 {
public static void main(String[] args) {
Zi z = new Zi();
System.out.println("---------------------");
Zi z1 = new Zi();
}
}
//父类
class Fu{
public Fu(){
System.out.println("父类构造函数");
}
static{
System.out.println("父类静态代码块");
}
{
System.out.println("父类动态代码块");
}
}
//子类
class Zi extends Fu{
public Zi(){
System.out.println("子类构造函数");
}
static{
System.out.println("子类静态代码块");
}
{
System.out.println("子类动态代码块");
}
}
输出结果:
父类静态代码块
子类静态代码块
父类动态代码块
父类构造函数
子类动态代码块
子类构造函数
---------------------
父类动态代码块
父类构造函数
子类动态代码块
子类构造函数
结论:
1.静态代码块只执行一次
2.静态的东西是属于类的,非静态的东西是属于实例的。
3.静态的先执行,然后才是非静态的。