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

类的初始化时机

作者: 李霖神谷 | 来源:发表于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.

相关文章

  • Java虚拟机(三)—类加载

    类加载时机 生命周期 加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载 类初始化的四...

  • 类初始化时机

    虚拟机规范中严格规定有且只有5种情况下,当类没有初始化时必须立即对类进行初始化: 遇到new、getstatic、...

  • 类的初始化时机

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

  • 我的秋招之路-面经篇

    Java基础 类加载的时机和类初始化的时机(引出tomcat类加载器)JVM和绝大多数用户自定义的类在JVM启动的...

  • Java类加载时机和初始化顺序

    类加载的时机和初始化的时机 摘自:https://www.cnblogs.com/javaee6/p/371471...

  • 类加载的时机

    目录 1、类加载的生命周期2、类初始化阶段进行的时机(主动引用)3、被动引用(不会触发类初始化)4、接口的加载过程...

  • 类加载机制

    目录 概念 加载过程 初始化时机 类初始化顺序注意点 双亲委派模型 自定义类加载器 类加载 概念 Java虚拟机把...

  • Java类的初始化时机

    一个Java对象的创建过程往往包括 类初始化 和 类实例化 两个阶段。本文讨论的是『类初始化』的时机,以及利用这一...

  • 深入理解JAVA虚拟机6-虚拟机类加载机制

    类加载时机 类的生命周期:加载,验证,准备、解析、初始化、使用、卸载 遇到new getstatic putsta...

  • JVM学习笔记之类加载机制【八】

    一、类加载时机 1.1 触发类初始化的六个场景: 加载? 1、遇到new、getstatic、putstatic...

网友评论

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

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