21-03-19代码块

代码块

  • 代码块的作用

    用来初始化类,对象

  • 代码块如果需要修饰的话,只能用static修饰

  • 代码块的分类

    静态代码块和非静态代码块

  • 静态代码块

    1. 内部可以有输出语句
    2. 随着类的加载而执行,而且只执行一次
    3. 作用:初始化类的信息
    4. 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
    5. 静态代码块的执行要优于非静态代码块的执行
    6. 静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构
  • 非静态代码块

    1. 内部可以有输出语句
    2. 随着类的创建而执行
    3. 每创建一个对象,就执行一次非静态代码块
    4. 作用:可以在创建对象时,对对象的属性等进行初始化
    5. 如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
    6. 非静态代码块内可以调用静态的属性,静态的方法或非静态的属性,方法
  • 执行顺序

    静态代码块随着类的加载而执行,即使还未执行到调用该类的属性或方法,但在main进入之前,已经随着类的加载而执行了。

    由父及子,静态先行。

    //总结:由父及子,静态先行
    class Root{
    	static{
    		System.out.println("Root的静态初始化块");
    	}
    	{
    		System.out.println("Root的普通初始化块");
    	}
    	public Root(){
    		super();
    		System.out.println("Root的无参数的构造器");
    	}
    }
    class Mid extends Root{
    	static{
    		System.out.println("Mid的静态初始化块");
    	}
    	{
    		System.out.println("Mid的普通初始化块");
    	}
    	public Mid(){
    		super();
    		System.out.println("Mid的无参数的构造器");
    	}
    	public Mid(String msg){
    		//通过this调用同一类中重载的构造器
    		this();
    		System.out.println("Mid的带参数构造器,其参数值:"
    			+ msg);
    	}
    }
    class Leaf extends Mid{
    	static{
    		System.out.println("Leaf的静态初始化块");
    	}
    	{
    		System.out.println("Leaf的普通初始化块");
    	}	
    	public Leaf(){
    		//通过super调用父类中有一个字符串参数的构造器
    		super("尚硅谷");
    		System.out.println("Leaf的构造器");
    	}
    }
    public class LeafTest{
    	public static void main(String[] args){
    		new Leaf(); 
    		System.out.println();
    		new Leaf();
    	}
    }
    

    输出结果

    Root的静态初始化块
    Mid的静态初始化块
    Leaf的静态初始化块
    Root的普通初始化块
    Root的无参数的构造器
    Mid的普通初始化块
    Mid的无参数的构造器
    Mid的带参数构造器,其参数值:尚硅谷
    Leaf的普通初始化块
    Leaf的构造器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值