美文网首页
类的初始化时机

类的初始化时机

作者: 李霖神谷 | 来源:发表于2017-03-15 21:48 被阅读7次

    从语法角度来讲程序可以在两个地方对类进行初始化
    ---定义类变量时指定初始值。
    ---静态初始化块中对类进行初始化。

    class Person{
        final static Person I=new Person(2.8);
        static double initPrice=20;
        double currentPrice;
        public Person(double discount){
            currentPrice=initPrice-discount;
        }
    }
    class BianDemo{
        public static void main(String[] args) {
            System.out.println(Person.I.currentPrice);
            Person p=new Person(2.8);
            System.out.println(p.currentPrice);
        }
    }
    

    如果仅仅停留在代码表面看这个问题,很难得到正确结果,从内存角度来分析程序初始化分为两个阶段。
    1.系统为Person的两个类变量分配内存空间。
    2.按初始化代码的排列顺序对类执行初始化。
    根据上面的描述,初始化第一阶段,系统先为I,initPrice进行分配内存,此时这两个类变量默认值为null,0.0.之后进行按初始化代码的排列顺序对类执行初始化,先为I进行初始化,赋值时需要调用Person(2.8),创建Person实例此时立即执行构造器对currentPrice进行赋值,此时initPrice的值为0,所以System.out.println(Person.I.currentPrice);的输出结果为-2.8.

    相关文章

      网友评论

          本文标题:类的初始化时机

          本文链接:https://www.haomeiwen.com/subject/dturnttx.html