Java基础之代码块的区别
java中用{}括起来的称为代码块,java中有常见的几种代码块,比如普通代码块、构造代码块、静态代码块、同步代码块,那么如何区分他们呢?
1.局部代码代码块
局部代码块又称为普通代码块,类中方法的方法体。
public static void main(String[] args) {
// 局部代码块
{
int a = 100;
System.out.println(“我是局部代码块”);
}
}
它的作用:是控制变量的生命周期。
在程序中当我们定义完成一个局部变量a之后,并且在接下来的代码中,不想再用到它时,那么就没必要让a在内存中继续占用空间,因此就称为局部代码块。
2.构造代码块
构造代码块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行。
public class Test {
private String name;
//构造代码块
{
name = "构造";
System.out.println("我是构造代码块");
}
}
构造代码块与构造函数的区别是:构造代码块是给所有对象进行初始化,构造函数是给对应的对象进行初始化,因为构造函数是可以有多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象,都会先执行相同的构造代码块。也就是说,构造代码块中定义的是不同对象共性的初始化内容。
3.静态代码块
用static{}包裹起来的代码片段,只会执行一次。静态代码块优先于构造块执行。
静态代码块的作用:是对类进行初始化,若一个类包含多个静态代码块,那则是按照代码执行顺序执行(从上往下)。
static {
System.out.println("我是静态代码块");
}
当类进入内存时,首先进行静态代码加载,例如静态代码块,用static 修饰的变量,函数等。静态代码块用于初始化类。构造函数是对对象进行初始化,而静态代码块可以对类进行初始化,就如在静态代码块中把静态变量 num 修改他的值。而且在一些不需要对类实例化的场合,静态代码块也可以非常有用。
4.同步代码块
使用synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性。同步代码块需要写在方法中。
synchronized(this){
//同步代码块
System.out.println("我是同步代码块");
}
|
|