代码块复习 (java)

前言

代码块的知识感觉没啥,不过在静态和非静态的调用时机上要注意一下


普通代码块

  1. 代码块在实例化对象调用构造函数前执行
public class Main{
	 public static void main(String[] args) {
		Test t1 = new Test(3);
	}
}

class Test {
	private int age;
	
	//普通代码块
	{
		System.out.println("hello world!");	
	}
	public Test(int age) {
		this.age = age;
		System.out.println("调用了构造函数");	
		
	}
}

在这里插入图片描述



静态代码块

  1. 在类加载时候执行
public class Main{
	 public static void main(String[] args) {
		Test t1 = new Test(3);
	}
}

class Test {
	private int age;
	
	//普通代码块
	static {
		System.out.println("类加载了");	
	}
	
	{
		System.out.println("准备调用构造器了");	
	}
	public Test(int age) {
		this.age = age;
		System.out.println("调用构造器了");	
	}
}

在这里插入图片描述



个人感觉要注意的点

  1. 继承的时候

因为静态的东西一定是在类加载的时候执行的,所以静态代码块也是,而普通代码块是在实例化对象时调用构造器前执行。可以推出执行顺序是这样的:父类静态的东西 ----> 子类静态的东西 ----> 父类普通的东西 -----> 父类构造 ---->子类普通的东西 ----> 子类构造 ,优先级就是普通的东西,和静态的东西谁在上面先调用谁,因为优先级一样

:普通的东西指 普通代码块普通属性初始化
静态的东西指 静态代码块静态属性 初始化


  1. 静态和普通代码块调用次数的问题

静态的东西,只是加载的时候调用,而类只会加载一次,所以只会执行一次,而普通代码块,是实例化对象的时候调用的,所以实例化一次对象就调用一次


  1. 静态的代码块里面只能调静态的东西,普通代码块就都可以调

这里的东西和我在final文章里面的个人理解类似:静态的东西在类加载的时候执行,而且只会执行一次,非静态的东西弄进去,他内存都没分配,哪里知道有这个东西



代码块使用场景

观察以下代码可以看到,有两个构造函数,而且每个构造函数里都有一个一样的输出内容。遇到这种类似的情况就可以考虑使用代码块,因为构造器里面那个输出每次都搞一次感觉挺麻烦的,不如弄成代码块,简洁一点。

class Test {
	private int a;
	private int b;
	
/*	代码块
	{
		System.out.println("hello world");
	}
*/	

	public Test(int a)
	{
		System.out.println("hello world!");
		this.a = a;
	}
	pubilc Test(int a, int b)
	{
		System.out.println("hello world!");
		this.a = a;
		this.b = b;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值