zoukankan      html  css  js  c++  java
  • 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();
        }
    }
    

    结果显示:

    父类--静态变量
    父类--静态初始化块
    子类--静态变量
    子类--静态初始化块
    父类--变量
    父类--初始化块
    父类--构造器
    子类--变量
    子类--初始化块
    子类--构造器

    规则3(静态变量和静态初始化块):

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

    public class testOrder {
        // 静态变量
        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

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

  • 相关阅读:
    CSS中position小解
    position
    mac默认安装postgresql, 如何让postgresql可以远程访问
    The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this version 10.0.
    active admin gem error
    psql 无法添加超级用户
    ubuntu 15.04 安装Balsamiq Mockups 3
    Rails html 写public里图片的路径
    rails c 历史命令
    undefined local variable or method `per' for []:ActiveRecord::Relation
  • 原文地址:https://www.cnblogs.com/huangj/p/14306034.html
Copyright © 2011-2022 走看看