Java语言中的自由块,也称为初始化块或者实例初始化块,它们在程序执行过程中的特定时刻被触发。自由块分为两种类型:静态自由块(static blocks)和非静态自由块(non-static blocks)。理解它们的执行顺序对于编写高效且无误的Java代码至关重要。 让我们详细探讨非静态自由块。非静态自由块不包含static关键字,它们通常用于在创建对象时执行一些初始化操作。当一个类的实例被创建时,非静态自由块的代码会被插入到构造函数之前执行。这意味着,每次创建一个类的新对象,对应的非静态自由块就会被执行一次。例如,在类`Father`的非静态自由块中,`System.out.println("father's free block running");`将在`Father`的构造函数之前打印出来。 静态自由块与非静态自由块不同,它们在类加载时执行,而不是在创建对象时。类加载是Java虚拟机(JVM)将.class文件加载到内存中的过程,这个过程发生在类首次被引用时。静态自由块通常用于初始化类级别的静态变量,确保这些变量在任何类实例创建之前已经设置好。例如,在类`Father`和`Son`的静态自由块中,`System.out.println("father'sSTATIC free block running");`和`System.out.println("son'sSTATIC free block running");`将在类`Father`和`Son`加载时分别打印。 执行顺序遵循以下规则: 1. 当类`Father`首次被引用时,它的静态自由块先执行。 2. 接着,如果类`Son`继承自`Father`,在`Son`类被加载时,`Father`的静态自由块已经执行过,所以`Son`的静态自由块会紧接着执行。 3. 当创建`Father`的实例时,`Father`的非静态自由块先执行,然后是`Father`的构造函数。 4. 如果`Son`继承自`Father`,在创建`Son`的实例时,会先执行`Father`的非静态自由块和构造函数,然后执行`Son`的非静态自由块和构造函数。 需要注意的是,静态自由块仅在类加载时执行一次,即使类的实例被创建多次。而动态自由块则与对象的创建密切相关,每个新创建的对象都会触发一次非静态自由块的执行。 在实际编程中,我们可以通过`Class.forName()`方法来控制类的加载和初始化。`Class.forName()`默认会触发类的初始化,即执行静态自由块。但如果使用`Class.forName(name, initialize, loader)`,并设置`initialize`为`false`,则可以避免初始化,从而不会执行静态自由块。 总结来说,Java中的自由块执行顺序是静态自由块在类加载时执行,非静态自由块在创建对象时执行,并且遵循继承的层次结构。理解这一执行顺序有助于优化代码,避免在类加载和对象创建过程中出现预期之外的行为。
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 2
- 资源: 937
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)