java中的所有代码都包含在代码块中,形如大括号{ },就是一个代码块,不同的代码块都是为了满足不同的应用场景,在看代码块之前,先简单了解一下java数据存储区存储的类型
目录
一、前导—简单的存储内容概述
1.栈
栈中存储的是基本数据类型(形如:int a = 10; ),和引用数据类型的引用 (形如Person p,引用p就被存储在了此处)
2.堆
存的是类的对象(形如Person p = new Person( ); 其中new Person( )被存储在了堆中,栈中的p指向的就是此处的new Person( ) ),没有引用指向的对象会被自动回收。还存储了静态变量和字符串常量池
3.方法区
存放类的信息,运行时常量,成员方法等
4.其它
存储区还有PC寄存器和本地方法栈
二、四种代码块
1.普通代码块
我们执行的大部分代码都被包含在普通代码块中,包括但并不仅限于if语句,while语句,方法等后面的大括号所代表的代码块
public class Test3 {
public static void main(String[] args) {
if (true){
}
while(true) {
}
}
public void run(){
}
}
2.同步代码块
形如synchronized(boj){ }的代码块,一般在实现了Runnable的类的run()方法下创建,作为隐式锁来为线程加排队锁,保证线程安全,没学到线程可以不管
public class Test3 {
public static void main(String[] args) {
Runnable run = new MyRun();
new Thread(run).start();
}
}
class MyRun implements Runnable{
Object o = new Object();
@Override
public void run() {
//同步代码块******
synchronized (o){
System.out.println("同步代码块被执行了");
}
//同步代码块******
}
}
3.静态代码块
由static修饰,直接在类下创建,形如static{ }的代码块,此代码块随着类的加载(即第一次使用该类的时候)而执行,因为类执行一次后被放入方法区,信息供随时使用,所以静态代码块也只执行一次,不管创建多少此类的对象,都只执行一次
public class Test3 {
//静态代码块
static {
}
}
4.构造代码块
直接在类下创建,形如 { } 只有一对大括号,没有其它修饰的是构造代码块,构造代码块在每次创建对象时被调用一次,new一个对象就执行一次
public class Test3 {
//构造代码块*****
{
}
//构造代码块*****
}
后记:代码块的执行顺序
静态代码块 —> 构造代码块 —> 构造方法