java类中成员之间的初始化顺序

1. 类的初始化为:类加载-对象创建

  1. 静态块总是在对象创建之前执行
  2. 当创建子类时隐式的调用父类的构造函数 super()

2.静态类的初始化条件

  1. 类实例被创建时
  2. 静态方法被调用时
  3. 一个类的static字段被赋值时
  4. 一个非static字段被使用时

3.java常量表达式

常量表达式是一个代表基本数据类型或者String数据类型的表达式,是在编译期间能计算出来的值.由以下几点组成。

  1. 基本数据类型或者String数据类型的字面值
  2. 转换成基本数据类型或者String
  3. 一元操作符:+,-,~,and,!(但不包括++or--)
  4. 乘法操作符: *,/
  5. 移位运算符: <<,>>和>>>
  6. 关系操作符: <,<=,>,>=
  7. 比较操作符: ==,!=
  8. 位运算符和逻辑操作符 : &,^.|
  9. 条件与和条件或操作符: &&,||
  10. 三元运算符 :  ? :
  11. 带括号的表达式, 这个括号里面的内容是一个常量表达式
  12. 类型名.变量名, 引用的是一个常量表达式 Math.PI

4.static final字段

     static final字段后面的类型如果是一个字符串或者基本数据类型。则类使用Java常量表达式,在编译时执行。

例子如下:

1. public class Test {

    static {
        System.out.println(Test.myStr + Test.hi);
    }
    
    private static String myStr = "static";
    private static final Integer hi=1;

    
    public static void main(String[] args) {
        new Test();
    }
}

执行结果为:null null

2.public class Test {

    static {
        System.out.println(Test.myStr + Test.hi);
    }
    
    private static final String myStr = "static ";
    private static final Integer hi=1;

    
    public static void main(String[] args) {
        new Test();
    }
}

执行结果为:static null

3.public class Test {

    static {
        System.out.println(Test.myStr + Test.hi);
    }
    
    private static final String myStr = "static ";
    private static final int hi=1;

    
    public static void main(String[] args) {
        new Test();
    }
}

执行结果为:static 1

 

 

 

 

 

 

转载于:https://my.oschina.net/u/2846485/blog/709240

你可能感兴趣的:(java类中成员之间的初始化顺序)