代码块
Java中{}括起来的代码称为代码块(Code block),根据位置和声明的不同,分为:局部代码块。构造代码块,同步代码块,静态代码块。
局部代码块
在方法中出现,可以限定变量的生命周期,及早释放,提高内存利用率。
public class CodeBlockTest{
public static void main(String [] args){
{
int a= 1;
System.out.println(a);
}
System,.out.println(a)//显示错误,代码块内就已被释放,外面无法调用
}
构造代码块
在类的方法外出现,每次调用构造方法都会执行,并在构造方法前执行。每次调用构造方法,构造代码块都执行一次;构造代码块优先于构造函数执行;同时构造代码块的运行依赖于构造函数。
static class Cat{
{
System.out.println("我是一只猫");
}
public Cat(){
System.out.println("这是一个构造方法");
}
}
public static void main(String[] args) {
Cat cat = new Cat();//我是一只猫
//这是一个构造方法
}
同步代码块
被Java中Synchronized关键词修饰的代码块就被称为同步代码块。在Java中,Synchronized关键词是一种线程同步机制,被Synchronized关键词修饰的代码块会被加上内置锁Synchronized同步代码块是一种高开销的操作,因此我们要尽量减少被同步的内容,在很多场景,我们没有必要去同步整个方法,而只需要同步部分代码即可,也就是使用同步代码块。
public class CodeBlock implements Runnable{
@Override
public void run(){
synchronized(CodeBlock.class){
System.out.println("这是同步代码块");
}
}
public static void main(String [] args){
CodeBloock a=new CodeBlock();
CodeBlock b =new CodeBlock();
new Tread(a).start();
new Tread(b).start();
}
}
注意:静态代码是属于类而不是属于对象的,因此使用Synchronized来修饰静态方法和静态对象的时候,类下的所有对象都会被锁定。
静态代码块
在类加载JVM时初始化,且只被执行一次;常用来执行类属性的初始化;静态块优先于各种代码块以及构造函数;此外静态代码块不能访问普通变量。
class ststisCodeBlock{
statis {
int a = 1;
System.out.println("静态代码块:"+a);
}
{
int b = 2;
System.out.println("构造代码块:"+b);
}
public stasticCodeBlock(){
System.out.println("构造函数");
}
static{
int c =3;
System.out.println("静态代码块"+c);
}
}
public class CodeBlockTest{
public static void main(String[] args){
StaticCodeBlock codeBlock1 = new StaticCodeBlock();
System.out.println("------------")
StaticCodeBlock codeBlock2 = new StaticCodeBlock();
}
}
注意:
继承的时候是父类的静态代码块先执行然后是子类的,然后是父类的构造代码块,子类的构造代码块