zoukankan      html  css  js  c++  java
  • 虚拟机类加载机制

    本文参考《深入理解java虚拟机》

    虚拟机加载类的过程:

    java源程序被编译器编译成class文件后,会被虚拟机的类加载器加载,加载完成后,会为class文件在内存中开辟一块空间用来存储class文件对象,之后对class文件进行校验,准备,解析和初始化,最终形成能被虚拟机使用的java类型,这叫做类加载过程。

    过程:

    校验:检验class文件的正确性,判断class文件是否对虚拟机的安全造成威胁。

    准备:为类成员分配内存空间,值得注意的是,会给静态属性默认赋值,比如 static int a,a的值在内存中默认是0。

    解析:将符号引用转为直接引用。

    初始化:为准备阶段的类成员赋于我们定义的值。

    类加载过程图:

    什么时候进行初始化?

    1.使用putstatic,new,getstatic,invokestatic这四个字节码命令时进行初始化。

    2.子类初始化时需要先把父类初始化。

    3.对类进行反射调用时

    4.含有主方法的类要被初始化

    初始化要点

    对于静态字段只有直接定义这个静态字段的类会被初始化。

    package com.yqg.test;
    
    public class Cat extends Dog{
           static {
               System.out.println("我是九尾");
           }
    }
    
    package com.yqg.test;
    
    public class Dog {
        
        public static  int value = 2;
        static {
            System.out.println("我是神犬");
        }
        
    }
    
    package com.yqg.test;
    
    public class Test {
           public static void main(String[] args) {
            System.out.println(Cat.value);
        }
    }

    结果:

    我是神犬
    2
  • 相关阅读:
    解决多版本sdk兼容问题
    ios5 UIKit新特性
    iPhone网络编程–一起来做网站客户端(一)
    八数码
    IOS开发中编码转换
    修复ipa图片png方法
    创建易读链接 搭建应用通往App Store的桥梁
    如何让IOS应用从容地崩溃
    详解IOS IAP
    jquery创建并行对象或者叫合并对象
  • 原文地址:https://www.cnblogs.com/yanqingguo/p/9732954.html
Copyright © 2011-2022 走看看