java vm (二) 之 虚拟机启动对类的操作

  虚拟机在启动中对类的操作

  1. 虚拟机加载类(classloader克拉斯楼的),类进行处理以后是字节码,虚拟机认识就可以做下面的事情了。从硬盘到内存的过程
  2. 链接
    1. 对类进行验证,类的头部用两个字节保存了,这个信息,详情找个专业的文档链接放到这里。
    2. 为类分配内存,给对应的变量附言默认值 int 给他 个0  Integer 给他个null……
    3. 将特殊的字符进行解析,应该是跟Spring 对 @autowrite 的解析类似,有自己的套路,(找个合适的例子放到这里)
  3. 初始化变量赋予正确的值 比热 private String name="天之云" ,先做2.2,分配空间,赋予默认值null 到这里了给他“天之云”。

 类的初始化在何时发生呢?

  类(接口)在被java程序“首次主动调用”的时候才会被初始化。

   说的多好!

        首次~~主动~~调用

 那么如何调用称呼其为主动调用

  1. 类被实例化的时候 Object object=new Object();
  2. 访问某个类或接口的静态变量,或者对该静态变量赋值 object.name=b;(这里本尊有点疑问必须是静态的吗?)
  3. 调用类的静态方法 object.exit();
  4. 反射class.forName("com.william.test")
  5. 初始化一个类的子类。 Object a=new String();
  6. java虚拟机启动时被标明为启动类的类(Java Test)

  以上可以证明写了一个类但是没有主动调用,那么不必担心里面的逻辑了,因为程序走不到哪里。

原文地址:https://www.cnblogs.com/tianzhiyun/p/6349833.html