JAVA 继承时候类的执行顺序问题
1、只有一个类,执行顺序
静态代码块 >>> 非静态代码块 >>> 构造函数 >>> 一般方法
2、有继承关系,两个类,执行顺序
情况一:
只new一次父类的情况
父类的静态代码块 >>> 子类的静态代码块 >>> 父类非静态代码块 >>> 父类无参构造方法 >>> 子类非静态代码块 >>> 子类构造方法 >>> 子类一般方法
情况二:
new两次父类的情况
解释:因为今天代码块是属于类class的,在第一次加载类的时候只执行一次,后面再new就不会再执行了。
父类的静态代码块 >>> 子类的静态代码块 >>>
父类非静态代码块 >>> 父类无参构造方法 >>> 子类非静态代码块 >>> 子类构造方法 >>> 子类一般方法
父类非静态代码块 >>> 父类无参构造方法 >>> 子类非静态代码块 >>> 子类构造方法 >>> 子类一般方法
测试一下吧
复制收展Javapackage com.algorithm.demo;
/**
* @Desc 累行客
*
* java 继承时候类的执行顺序问题
*
* 下例结果
* main begin
* static A
* static B
* I'm A class
* HelloA
* I'm B class
* HelloB
* I'm B fun
* I'm B fun
* ===
* I'm A class
* HelloA
* I'm B class
* HelloB
* I'm B fun
* main end
*
* @Author luolei
* @Web http://www.leixingke.com/
* @Date 2020/11/17 15:06
*/
class HelloA {
public HelloA() {
System.out.println("HelloA");
}
{ System.out.println("I'm A class");}
static { System.out.println("static A"); }
}
class HelloB extends HelloA {
public HelloB() {
System.out.println("HelloB");
}
{ System.out.println("I'm B class");}
static { System.out.println("static B"); }
public void fun(){System.out.println("I'm B fun");}
}
public class ConstructTest1 {
public static void main(String[] args) {
System.out.println("main begin");
HelloB helloB = new HelloB();
helloB.fun();
helloB.fun();
System.out.println("===");
new HelloB().fun();
System.out.println("main end");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55