• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

浅谈Java变量的初始化顺序详解

java 搞代码 4年前 (2022-01-05) 48次浏览 已收录 0个评论

本篇文章是对Java变量的初始化顺序进行了详细的分析介绍,需要的朋友参考下

规则1(无继承情况下):
对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是
(静态变量、静态初始化块)>(变量、初始化块)>构造器
证明代码:

代码如下:
public class InitialOrderTest {
    // 静态变量
    public static String staticField = “静态变量”;
    // 变量
    public String field = “变量”;
    // 静态初始化块
    static {
        System.out.println(staticField);
        System.out.println(“静态初始化块”);
    }
    // 初始化块
    {
        System.out.println(field);
        System.out.println(“初始化块”);
    }
    // 构造器
    public InitialOrderTest() {
        System.out.println(“构造器”);
    }
    public static void main(String[] args) {
        new InitialOrderTest();
    }
}

结果显示:
静态变量
静态初始化块
变量
初始化块
构造器

规则2(有继承情况下):
子类的静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成

代码如下:
class Parent {
    // 静态变量
    public static String p_StaticField = “父类–静态变量”;
    // 变量
    public String p_Field = “父类–变量”;
    // 静态初始化块
    static {
        System.out.println(p_StaticField);
        System.out.println(“父类–静态初始化块”);
    }
    // 初始化块
    {
        System.out.println(p_Field);
        System.out.println(“父类–初始化块”);
    }
    // 构造器
    public Parent() {
        System.out.println(“父类–构造器”);
    }
}//如果你想把这两个类放在同一个文件且名字起为SubClass, 父类前不能加public
public class SubClass extends Parent { 
    // 静态变量
    public static String s_StaticField = “子类–静态变量”;
    // 变量
    public String s_Field = “子类–变量”;
    // 静态初始化块
    static {
        System.out.println(s_StaticField);
        System.out.println(“子类–静态初始化块”);
    }
    // 初始化块
    {
        System.out.println(s_Field);
        System.out.println(“子类–初始化块”);
    }
    // 构造器
    public SubClass() {
        System.out.println(“子类–构造器”);
    }
    // 程序入口
    public static void main(String[] args) {
        new SubClass();
    }
}

结果显示:
父类–静态变量
父类–静态初始化块
子类–静态变量
子类–静态初始化块
父类–变量
父类–初始化块
父类–构造器
子类–变量
子类–初始化块
子类–构造器

规则2(静态变量和静态初始化块):
静态变量和静态初始化块是依照他们在类中的定义顺序进行初始化的。同样,变量和初
始化块也遵循这个规律。

代码如下:
public class testOrd来源gao@!dai!ma.com搞$$代^@码!网er {
    // 静态变量
    public static TestA a = new TestA();
    public TestC c = new TestC();
    // 静态变量
    public static TestB b = new TestB();
    public testOrder(){
        System.out.println(“in constract”);
    }
    // 静态初始化块
    static {
        System.out.println(“静态初始化块”);
    }
    public static void main(String[] args) {
        new testOrder();
    }
}
class TestA {
    public TestA() {
        System.out.println(“Test–A”);
    }
}
class TestB {
    public TestB() {
        System.out.println(“Test–B”);
    }
}
class TestC {
    public TestC() {
        System.out.println(“Test–C”);
    }
}

结果显示:
Test–A
Test–B
静态初始化块
Test–C
in constract

个人总结:
先静后动,先父后子,从上到下,先变量后构造

以上就是浅谈Java变量的初始化顺序详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:浅谈Java变量的初始化顺序详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址