代码块

代码块是一个不重要的概念,但是作为结构清楚一下就可以了。所以的代码块指的是使用了“{}”定义的一段程序代码,代码块根据其定义的位置以及声明的关键字的不同一共可以分为四类:普通代码块、构造块、静态块、同步代码块。

普通代码块

普通代码块指的是定义在方法中的代码块。

范例: 观察一个简单程序

public class TestDemo {
	public static void main(String[] args) {
		if(true) { //表示该判断一定成立
			int x = 10;  //局部
			System.out.println("x = " + x);
		}
		int x = 100;  //全局
		System.out.println("x = " + x);
	}
}

如果说现在将if语句拿掉,就成为普通代码块了。

public class TestDemo {
	public static void main(String[] args) {
		{ //直接使用大括号进行了定义,普通代码块
			int x = 10;  //局部
			System.out.println("x = " + x);
		}
		int x = 100;  //全局
		System.out.println("x = " + x);
	}
}

如果现在的方法中代码写的过长,但是又需要避免变量重名问题,往往会使用普通代码块,其实也没人用。

构造块

构造块指的是定义在类中的代码块。

范例: 定义构造块

class Person {
	{
		System.out.println("1、Person类的构造块");
	}
	public Person() {
		System.out.println("2、Person类的构造方法");
	}
}
public class TestDemo {
	public static void main(String[] args) {
		new Person();
		new Person();
	}
}

每一次使用关键字new实例化对象的时候一定会调用构造方法。但是有了构造块之后发现构造块会优先于构造方法执行。

这个构造块唯一的好处是可以进行一些简单的逻辑操作,但是也没什么用。

构造块的使用只是一种补充手段,这种手段有恰恰没有意义。

静态块

静态块指的是使用static关键字定义的代码块。但是如果要想考虑静态块必须分为两种情况

  • 在非主类中定义的静态块;
  • 在主类中定义的静态块。

范例: 观察静态块定义

class Person {
	{
		System.out.println("1、Person类的构造块");
	}
	public Person() {
		System.out.println("2、Person类的构造方法");
	}
	static {
		System.out.println("3、Person类的静态块");
	}
}
public class TestDemo {
	public static void main(String[] args) {
		new Person();
		new Person();
	}
}

可以发现静态块优先于构造块执行,而且不管产生多少个实例化对象,静态块也只使用一次。静态块最为主要的作用就是为static属性初始化。

class Person {
	private static String info = "hello";
	{
		System.out.println("1、Person类的构造块");
	}
	public Person() {
		System.out.println("2、Person类的构造方法");
	}
	static { //静态块
		info += "world!"; //对static进行初始化配置
		System.out.println("3、Person类的静态块" + info);
	}
}
public class TestDemo {
	public static void main(String[] args) {
		new Person();
		new Person();
	}
}

静态块也可以定义在主类里面,那么此时的静态块将优先于主方法执行。

public class TestDemo {
	static {
		System.out.println("****************");
	}
	public static void main(String[] args) {
		System.out.println("Hello World!");
	}
}

一般而言也没有什么意义了。

总结

如果需要在一些属性使用前做处理就使用构造块或静态块完成。同步代码块与多线程有关。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值