JavaSE:代码块

1、什么是代码块

首先,什么是代码块?

其实 ,代码块是指使用{}即花括号定义的一段代码。

代码块共分为四种,分别为:普通代码块、静态代码块、实例代码块(非静态代码块)以及同步代码块,在这里,我们只讨论前三种。

2、普通代码块

普通代码块就是定义在方法中的代码块,用处较少:

public class Test {
    public static void main(String[] args) {
        {     
            //普通代码块
            int a = 1;
            System.out.println(a);
        }
    }
}

普通代码块的执行没有条件限制,一定会执行

但是我们需要注意的是,如果在普通代码块中定义了变量,那这个变量的作用域就是这个代码块,不能在代码块之外再使用:

3、静态代码块

用static修饰的代码块称为静态代码块。

3.1 静态代码块知识点汇总

我们先上相关结论,然后再作解释:

1.静态代码块定义在类的里面,方法的外面

2.静态代码块一般用来初始化静态成员变量(静态代码块中不能初始化普通成员变量)

3.静态代码块在类加载的时候就被执行,且只会执行一次(因为类只会被加载一次)

4.如果出现多个静态代码块,执行顺序和定义顺序有关

3.2 知识点逐个解释

1.静态代码块定义在类的里面,方法的外面

2.静态代码块一般用来初始化静态成员变量(静态代码块中不能初始化普通成员变量)

而不能初始化普通成员变量,因为普通成员是依赖于对象的

3.静态代码块在类加载的时候就被执行,且只会执行一次

我们可以看到,我们没有实例化任何对象,但静态代码块依旧被执行,可以得出结论:静态代码块在类加载的时候就被执行,且只会执行一次(因为类只会被加载一次)

4.如果出现多个静态的或多个静态代码块,执行顺序和定义顺序有关

由于就地初始化要比静态代码块中的初始化顺序要早,故age中最终存储的值为静态代码块中的初始化值。

当我们将两者顺序交换:

我们发现,打印的值又为就地初始化的值,故我们可以得出结论:如果出现多个静态代码块,执行顺序和定义顺序有关

4、实例代码块(非静态代码块)

4.1 实例代码块知识点汇总

我们也先说结论

1.实例代码块定义在类的里面,方法的外面

2.实例代码块一般用来初始化普通成员变量

3.只有在实例化对象的时候才会被执行,且每实例化一次对象就会被执行一次

4.如果出现多个实例代码块,执行顺序和定义顺序有关

4.2  知识点逐个解释

1.实例代码块定义在类的里面,方法的外面

2.实例代码块一般用来初始化普通成员变量

3.只有在实例化对象的时候才会被执行,且每实例化一次对象就会被执行一次

如下图所示,我们可以看到,当我们不实例化任何对象,实例代码块不会被执行,只有静态代码块被执行:

而当我们实例化对象:

可以发现,只有实例化对象的时候实例代码块才会被执行,且每实例化一次,实例代码块就会被执行一次。

4.如果出现多个实例代码块,执行顺序和定义顺序有关

我们可以发现,无论如何,最后定义的实例代码块完成了最终的赋值

故:如果出现多个实例代码块,执行顺序和定义顺序有关。

5、静态代码块、实例代码块、构造方法的执行顺序

根据所学知识,我们知道,我们通过静态代码块、实例代码块、构造方法都可以完成对成员变量的初始化,但这三种方式的执行的先后顺序如何呢?

我们先给出结论:

1.一定是先执行静态代码块、再执行实例代码块、最后执行构造方法。

2.若出现同级的,则执行顺序和定义顺序有关,但一定是先执行静态代码块、再执行实例代码块、最后执行构造方法。

我们用代码来完成佐证:

同理,若我们在同时在静态代码块、实例代码块、构造方法中对同一个成员变量进行初始化时,最终值应为构造方法中的值。

OK~本次博客到这里就结束了,

感谢大家的阅读~欢迎大家在评论区交流问题~

如果博客出现错误可以提在评论区~

创作不易,请大家多多支持~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值