代码块详解

代码块分类

普通代码块

普通代码块就是在方法后面使用"{}"括起来的代码片段,不能单独执行,必须调用其方法名才可以执行.

构造代码块

在类中没与任何的前缀或后缀,并使用"{}"括起来的代码片段.

public class Student{
	{
		System.out.println("this is a 构造代码块");
	}
	public Student(){
		System.out.println("this is a 构造无参方法");
	}
	public Student(String stuName){
		System.out.println("this is student name is"+stuName);
		System.out.println("this is a 构造有参方法");
	}
}

处理方式:

编译器在执行时,构造代码块和构造方法是以整体的形式执行的,会在执行每一个构造方法之前先执行构造代码块中的内容。

即:在编译器中执行时是这样的形式:

public class Student{
	public Student(){
		System.out.println("this is a 构造代码块");
		System.out.println("this is a 构造无参方法");
	}
	public Student(String stuName){
		System.out.println("this is a 构造代码块");
		System.out.println("this is student name is"+stuName);
		System.out.println("this is a 构造有参方法");
	}
}

类似于将构造代码块拼接在了构造方法中。

静态代码块

静态代码块是:执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。

如果父类和子类中同时存在静态代码块,编译器会优先执行父类的静态代码块然后再执行子类的静态代码块。

静态代码块是在类加载时就执行加载的,所以如果是main方法所在的类中有静态代码块的话,其执行会在main方法执行前。

同步代码块

同步代码块是什么?

同步代码块就是在多线程程序中被加上synchronized锁的一段程序,也就是为代码块中的代码加上了锁,另其在多线程中排队执行。

synchronized(对象){  
	//可能会发生线程安全问题的代码
}
//这里的对象可以是任意对象,我们可以用 Object obj =  new Object()里面的obj放入括号中

其中,obj 称为同步监视器,也就是锁,原理是:当线程开始执行同步代码块前,必须先获得对同步代码块的锁定。并且任何时刻只能有一个线程可以获得对同步监视器的锁定,当同步代码块执行完成后,该线程会释放对该同步监视器的锁定。

其中的锁,在非静态方法中可为this,在静态方法中为当前类本身(例如单例模式的懒汉式:Singleton.class)

// 单例模式 - 懒汉式
class Singleton {
	private Singleton() {
	}
 
	private static Singleton s = null;
 
	private static Singleton getInstance() {
		if (s == null) {
			synchronized (Singleton.class) {
				if (s == null) {
					s = new Singleton();
				}
			}
		}
		return s;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值