静态代码块只在第一次创建对象时执行,非静态代码块在每次创建对象时都会执行
创建指的是new和反射
package day10_7;
public class Main {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
A a = new A();
Class<?> classa = Class.forName("day10_7.A");
A b = (A)classa.newInstance();
}
}
class A{
static{
System.out.println("static代码块");
}
{
System.out.println("非静态代码块");
}
}
static代码块
非静态代码块
非静态代码块
new子类对象时:父类+子类+构造方法+静态代码块+费静态代码块执行情况
package day10_7;
public class Main {
public static void main(String[] args) throws Exception{
A a = new A();
}
}
class A extends B{
static{
System.out.println("子类static代码块");
}
{
System.out.println("子类非静态代码块");
}
public A(){
System.out.println("子类构造方法");
}
}
class B {
static{
System.out.println("父类static代码块");
}
{
System.out.println("父类非静态代码块");
}
public B(){
System.out.println("父类构造方法");
}
}
父类static代码块
子类static代码块
父类非静态代码块
父类构造方法
子类非静态代码块
子类构造方法