前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中的静态初始化和非静态初始化

Java中的静态初始化和非静态初始化

作者头像
Tyan
发布2019-05-25 23:24:57
2.7K0
发布2019-05-25 23:24:57
举报
文章被收录于专栏:SnailTyanSnailTyan

1. Java中的初始化

Java与C++的一个不同之处在于,Java不仅有构造函数,还有一个“初始化块”(Initialization Block)的概念。Java中的初始化块在创建Java对象时隐式执行,并且是在构造函数之前执行。

2. 静态初始化

代码语言:javascript
复制
// 定义
static {
    ...
}

静态初始化块执行的优先级高于非静态初始化块,在对象装载到JVM中时执行一次,仅能初始化类成员变量,即static修饰的数据成员。

3. 非静态初始化

代码语言:javascript
复制
// 定义
{
    ...
}

非静态初始化块在每个对象生成时都会被执行一次,它可以初始化类的实例变量。非静态初始化块在构造函数之前执行。

4. Demo

  • Example
代码语言:javascript
复制
class Test {

    static {
        System.out.println("Run static initailization block.");
    }

    {
        System.out.println("Run nonstatic initailization block.");
    }

    public Test() {
        System.out.println("Run Test constructor.");
    }

    public static void main(String[] args) {
        Test t = new Test();
    }
}
  • Result
代码语言:javascript
复制
Run static initailization block.
Run nonstatic initailization block.
Run Test constructor.

5. 总结

从某种程度上来看,初始化块是构造器的补充,初始化块总是在构造器之前执行。初始化块是一段固定执行的代码,它不能接受任何参数。因此初始化块对同一个类的所有对象所进行的初始化处理完全相同。如果有一段初始化处理代码对所有的对象完全相同,且无需接受任何参数,就可以把这段初始化处理代码提取到初始化块中。通过把多个构造器中的相同代码提取到初始化块中定义,能更好地提高初始化代码的复用。静态初始化块是类相关的,系统将在类加载时执行静态初始化块,而不是在创建对象时才执行,因此静态初始化块总是比非静态初始化块先执行。用途:例如在JNI调用时,需要加载动态链接库,就可以在静态代码块中加载。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年01月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Java中的初始化
  • 2. 静态初始化
  • 3. 非静态初始化
  • 4. Demo
  • 5. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档