面向对象编程之块的定义

目录

1. 分类

2. 解析

3. 构造块和构造器的区别

4. 加载顺序

 

1. 分类

普通块: 方法内|块内

静态块:类中方法外+static 

构造块:类中方法外

同步块:多线程讲解synchronized

 

2.解析

    1. 静态块:初始化类信息,仅加载一次

    2. 构造块:初始化对象信息,先于构造器执行的,每创建一个对象 初始化一次

 

3.构造块和构造器的区别

     1. 构造块先于构造器执行

 

     2. 构造器能够动态传参。

 

/**
 * 块:{} 作用域问题
 * 
 * @author zhongaidong
 */
public class Block {
	int a = 30;
	// 静态块
	static {
		// 类中方法外 初始化类信息,仅加载一次
		System.out.println("静态块");
	}

	// int a =0; //成员变量

	// 构造块:每创建一个对象 初始化一次
	{
		// 类中方法外 初始化对象信息,先于构造器执行的
		System.out.println("构造块");
		a = 20; // 字面值
	}

	public Block() {
		System.out.println(a);
	}

	public Block(int a) {

		this.a = a;
		System.out.println(a);
	}

	public static void main(String[] args) {

		{
			// 普通块
			int a = 0; // a仅在该块中有效
		}
		System.out.println("......");
		new Block(); // 每创建一个对象 调用构造块 +调用构造器
		new Block(100);
	}
}

 

4. 加载顺序

     1、先父类后子类

     2、先静态后成员

     3、静态一次,成员多次

public class F {
	static {
		System.out.println("F-->static");
	}
	{
		System.out.println("F-->constructor block");
	}

	public static void main(String[] args) {
		new C();
		new C();
	}
}

class C extends F {
	static {
		System.out.println("C-->static");
	}

	{
		System.out.println("C-->constructor block");
	}

}

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值