Java 面经——静态代码块

1. 特点

  1. 静态代码块只能定义在类里面,它独立于任何方法,不能定义在方法里面;
  2. 静态代码块内的变量都是局部变量,只在本块内有效;
  3. 静态代码块会在类被加载时自动执行,无论加载者是 JVM 还是其他类;
  4. 一个类中允许定义多个静态代码块,执行的顺序根据定义的顺序进行;
  5. 静态代码块只能访问类的静态成员,不允许访问实例成员。

2. 静态块与构造块

  • 静态块:用 static 申明,JVM 加载类时执行,仅执行一次;
  • 构造块:类中直接用 {} 定义,每次创建对象时执行。

执行顺序:静态块 > main() > 构造块 > 构造方法

3. 类的加载顺序

  1. 父类静态成员变量和静态代码块
  2. 子类静态成员变量和静态代码块
  3. 父类非静态成员变量和非静态代码块
  4. 父类构造函数
  5. 子类非静态成员变量和非静态代码块
  6. 子类构造函数

静态成员变量和静态代码块级别相同,非静态成员变量和非静态代码块级别相同。

class Root {

	static {
		System.out.println("父类静态代码块");
	}

	{
		System.out.println("父类普通代码块");
	}

	public Root() {
		System.out.println("父类无参构造函数");
	}

}

class Middle extends Root {

	static {
		System.out.println("子类静态代码块");
	}

	{
		System.out.println("子类普通代码块");
	}

	public Middle() {
		System.out.println("子类无参构造函数");
	}

	public Middle(String msg) {
		System.out.println("子类带参数构造函数,参数值为:" + msg);
	}

}

class Leaf extends Middle {

	static {
		System.out.println("孙类静态代码块");
	}

	{
		System.out.println("孙类普通代码块");
	}

	public Leaf() {
		super("来自" + Middle.class.getName());
		System.out.println("孙类无参构造函数");
	}

}

修订记录:

日期版本号作者修订内容备注
2019-7-161.0moonspirit创建文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值