代码块

代码块:就是用{}扩起来的代码。
根据位置和关键字的不同分为普通代码块、构造块、静态代码块、同步代码块(与线程有关,在线程里面分析)。

1、普通代码块:就是直接在方法或语句中定义的代码块。

public class CodeDemo01 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		{
			int num=1;
			System.out.println("这是普通代码块,里面的局部变量为:"+num);
		}
		int x=100;
		System.out.println("这是普通代码之外,之外的局部变量为:"+x);
	}
}

//结果:
//这是普通代码块,里面的局部变量为:1
//这是普通代码之外,之外的局部变量为:100

2、构造块:直接写在类中的代码块。

public class CodeDemo02 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Code02();
		new Code02();
	}
}
class Code02{
	{
		System.out.println("这是构造代码块——写在类中的代码块");
	}
	public Code02() {
		System.out.println("实例化时调用");
	}
}
//结果:
/*这是构造代码块——写在类中的代码块
实例化时调用
这是构造代码块——写在类中的代码块
实例化时调用*/

构造代码块优于构造方法执行
在此代码里面实例化对象时就会执行构造代码块,可以被执行多次。

3、静态代码块:用static关键字声明的代码块。

public class CodeDemo03 {
	static {	
		System.out.println("在Main()所在类定义静态代码块");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		{
			System.out.println("这是普通代码块");
		}
		new Code03();
		new Code03();
	}
}
class Code03{
	static {
		System.out.println("用static修饰的静态代码块");
	}
	{
		System.out.println("这是构造块");
	}
	public Code03() {
		System.out.println("调用无参构造方法时被执行");
	}
}
/*在Main()所在类定义静态代码块
这是普通代码块
用static修饰的静态代码块
这是构造块
调用无参构造方法时被执行
这是构造块
调用无参构造方法时被执行*/

静态代码块随着字节码加载也加载进了JVM,此时main方法还没有执行,因为方法需要JVM调用。即静态代码块优于Main()执行。

Main()所在类的静态代码块优于Main()执行,在类中定义的静态代码块优于构造块执行,构造块优于构造方法执行。

即,从快到慢为:
Main()所在类的静态代码块(且只执行一次)<——Main()
静态代码块(只执行一次)<——Main()
类中的静态代码块<——构造块<——构造方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值