Java中4种代码块:普通代码块,静态代码块,同步代码块,构造代码块

简介: Java中4种代码块:普通代码块,静态代码块,同步代码块,构造代码块

普通代码块:
定义:在方法、循环、判断等语句中出现的代码块
修饰:只能用标签修饰
位置:普通代码块可以出现在方法体内除"()"外的任何地方,包括 方法体,代码块中(即可以嵌套在代码块中)
执行:普通代码依赖方法的执行而执行,按照正常的先后顺序执行
作用:将多行代码封装在一起,实现特定的功能。(有点废话)
注意:无
静态代码块
定义:在类中定义使用static修饰的代码块
修饰:使用static修饰
位置:它不能出现在方法体或者代码块内
执行:在加载类时会先执行静态代码块,且只执行一次,如果有多个静态代码块则按照先后顺序执行
作用:一般用于静态变量的初始化,创建对象前的环境的加载
注意:静态代码块中不能直接访问非静态变量和方法,需要通过类的实例对象来访问
同步代码块
定义:可以简单地认为同步代码块是使用 synchronized 修饰的普通代码块
位置:同普通代码块
执行:同普通代码块
作用:用于多线程环境的同步保护
注意:注意同步代码块使用不当可能会造成“死锁”
构造代码块
定义:在类中定义且没有加任何修饰的代码块
位置:它不能出现在方法体或者其他代码块内
执行:依赖于构造函数的调用而执行
作用:初始化实例变量和实例环境,一般用于提取类构造函数中的公共代码
注意:构造代码块不是在构造函数之前执行的!!!编译器在编译的时候会把构造代码块插入到每个构造函数的最前面!!
构造代码块随着构造函数的执行而执行!!
如果某个构造函数调用了其他的构造函数,那么构造代码块不会插入到该构造函数中以免构造代码块执行多次!
执行案例:
复制代码
public class CodeAreaExecuteDemo{
static{
System.out.println("static code block!");
}
{
System.out.println("construct code block!");
public CodeAreaExecuteDemo(){
System.out.println("Constructor() ");
public static void main(String[] args) {
new CodeAreaExecuteDemo();
}

//代码效果参考:http://0791zd.com/bx/art_7823.html

执行结果:
static code block!
construct code block!
Constructor()
反编译结果:
CodeExecuteDemo.png
我们发现构造代码块确实被插入到了构造函数最前面中
构造代码块与构造函数关系的案例
public class ConstructorDemo{
public ConstructorDemo(){}
public ConstructorDemo(int num){
this();
}
反编译结果如下:
ConstructorDemo.png

相关文章
|
8天前
|
Java 开发者 C++
Java多线程同步大揭秘:synchronized与Lock的终极对决!
【6月更文挑战第20天】在Java多线程编程中,`synchronized`和`Lock`是两种关键的同步机制。`synchronized`作为内置关键字提供基础同步,简单但可能不够灵活;而`Lock`接口自Java 5引入,提供更复杂的控制和优化性能的选项。在低竞争场景下,`synchronized`性能可能更好,但在高并发或需要精细控制时,`Lock`(如`ReentrantLock`)更具优势。选择哪种取决于具体需求和场景,理解两者机制至关重要。
|
3天前
|
存储 安全 Java
Java中的线程安全与同步技术
Java中的线程安全与同步技术
|
8天前
|
Java 测试技术
Java多线程同步实战:从synchronized到Lock的进化之路!
【6月更文挑战第20天】Java多线程同步始于`synchronized`关键字,保证单线程访问共享资源,但为应对复杂场景,`Lock`接口(如`ReentrantLock`)提供了更细粒度控制,包括可重入、公平性及中断等待。通过实战比较两者在高并发下的性能,了解其应用场景。不断学习如`Semaphore`等工具并实践,能提升多线程编程能力。从同步起点到专家之路,每次实战都是进步的阶梯。
|
8天前
|
Java 程序员
从0到1,手把手教你玩转Java多线程同步!
【6月更文挑战第20天】从0到1学Java多线程同步:理解线程同步关键,掌握`synchronized`用法,探索`Lock`接口,实战演练并进阶学习锁升级、`Condition`及死锁预防,成为多线程大师!
|
1天前
|
存储 安全 搜索推荐
深入剖析Java中的CountDownLatch:同步协作的利器
深入剖析Java中的CountDownLatch:同步协作的利器
|
1天前
|
Java
Java中代码块区别及代码示例
Java中代码块区别及代码示例
|
3天前
|
Java 机器人 程序员
如何在Java中进行并发编程:锁与同步机制
如何在Java中进行并发编程:锁与同步机制
|
3天前
|
Java
java线程之信号同步
java线程之信号同步
10 0
|
4天前
|
Java C++
Java 基础内容(代码块)
Java 基础内容(代码块)
|
4天前
|
Java
java代码块和具体的代码应用
java代码块和具体的代码应用