java vm (二) 之 虚拟机启动对类的操作
虚拟机在启动中对类的操作
- 虚拟机加载类(classloader克拉斯楼的),类进行处理以后是字节码,虚拟机认识就可以做下面的事情了。从硬盘到内存的过程
- 链接
- 对类进行验证,类的头部用两个字节保存了,这个信息,详情找个专业的文档链接放到这里。
- 为类分配内存,给对应的变量附言默认值 int 给他 个0 Integer 给他个null……
- 将特殊的字符进行解析,应该是跟Spring 对 @autowrite 的解析类似,有自己的套路,(找个合适的例子放到这里)
- 初始化变量赋予正确的值 比热 private String name="天之云" ,先做2.2,分配空间,赋予默认值null 到这里了给他“天之云”。
类的初始化在何时发生呢?
类(接口)在被java程序“首次主动调用”的时候才会被初始化。
说的多好!
首次~~主动~~调用
那么如何调用称呼其为主动调用
- 类被实例化的时候 Object object=new Object();
- 访问某个类或接口的静态变量,或者对该静态变量赋值 object.name=b;(这里本尊有点疑问必须是静态的吗?)
- 调用类的静态方法 object.exit();
- 反射class.forName("com.william.test")
- 初始化一个类的子类。 Object a=new String();
- java虚拟机启动时被标明为启动类的类(Java Test)
以上可以证明写了一个类但是没有主动调用,那么不必担心里面的逻辑了,因为程序走不到哪里。