Java中代码块、静态代码块和构造方法

在学习完继承后,我产生了一系列的思考关于在Java中继承中代码块、静态代码块、构造方法的执行顺序以及继承的问题

于是编写了一下代码进行分析

规则: 
1、静态代码块随着类的加载而加载 (堆内存中)
2、代码块在每次创建对象前加载执行 
3、子类在其构造函数中实现对父类(构造函数)的初始化 

4、先有父后有子(在运行时,父类先加载进内存,子类才能加载)

 

public class Test {
	  public static void main(String[] args) {  
		  Child child = new Child();  
	    }  
	}  
	  
	class Parents {  
	    /* 
	    *父类的静态代码块 
	    */  
	    static {  
	        System.out.println("Parents静态代码块");  
	    }  
	  
	    /* 
	    *父类的构造代码块 
	    */  
	    {  
	        System.out.println("Parents代码块");  
	    }  
	  
	    /* 
	    *父类的构造函数 
	    */  
	    public Parents(){  
	        System.out.println("Parents构造函数");  
	    }  
	}  
	  
	class Child extends Parents {  
	    /* 
	    *子类的静态代码块 
	    */  
	    static {  
	        System.out.println("Child静态代码块");  
	    }  
	  
	    /* 
	    *子类的构造代码块 
	    */  
	    {  
	        System.out.println("Child代码块");  
	    }  
	  
	    /* 
	    *子类的构造函数 
	    */  
	    public Child(){  
	        //super();//其实这里隐藏着super(),目的是初始化父类的构造函数  
	        System.out.println("Child构造函数");  
	    } 
}

最后的执行结果为:

Parents静态代码块
Child静态代码块
Parents构造代码块
Parents构造函数
Child构造代码块

Child构造函数

显然结果得出子类中并没有继承父类的代码块,并且静态代码块在类加载的时候都进行运行,然后在执行父类中的代码块,然后是父类的构造函数,(先有父后有子)。然后依次是子类的构造代码块、子类构造函数。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java,抽象类代码块静态代码块执行顺序如下: 1. 父类静态代码块:在类加载时执行,且只执行一次。 2. 子类静态代码块:在类加载时执行,且只执行一次。 3. 父类代码块:在创建父类实例时执行,每次创建实例都会执行一次。 4. 父类构造方法:在父类代码块执行完后执行。 5. 子类代码块:在创建子类实例时执行,每次创建实例都会执行一次。 6. 子类构造方法:在子类代码块执行完后执行。 静态代码块是在类加载时执行的,用于初始化静态变量或执行一些只需要执行一次的操作。抽象类静态代码块和普通类静态代码块执行顺序相同,即在父类静态代码块之后、子类静态代码块之前执行。 代码块是在创建对象时执行的,用于初始化实例变量或执行一些需要在对象创建时执行的操作。抽象类代码块和普通类代码块执行顺序相同,即在父类代码块之后、子类代码块之前执行。 下面是一个抽象类静态代码块代码块的示例: ```java abstract class Animal { static { System.out.println("Animal static block"); } { System.out.println("Animal block"); } public Animal() { System.out.println("Animal constructor"); } } class Dog extends Animal { static { System.out.println("Dog static block"); } { System.out.println("Dog block"); } public Dog() { System.out.println("Dog constructor"); } } public class Main { public static void main(String[] args) { new Dog(); } } ``` 输出结果为: ``` Animal static block Dog static block Animal block Animal constructor Dog block Dog constructor ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值