zoukankan      html  css  js  c++  java
  • 类加载过程

    概述

    类里面的信息,是怎么加载的,按什么先后顺序?

    1、类的加载过程
    JVM将类的加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)
    1)、装载:查找并加载类的二进制数据;
    2)、链接:
            验证:确保被加载类的正确性
            准备:为类的静态变量分配内存,并将其初始化为默认值
            解析:把类中的符号引用转换为直接引用
    3)、初始化:为类的静态变量赋予正确的初始值
    
    2、类的初始化,类什么时候才被初始化
    1)、创建类的实例,也就是new一个对象
    2)、访问某个类或接口的静态变量,或者对该静态变量赋值
    3)、调用类的静态方法
    4)、反射(Class.forName("com.vince.Dog"))
    5)、初始化一个类的子类(会首先初始化子类的父类)
    6)、JVM启动时标明的启动类,即文件名和类名相同的那个类
    
    3、类的加载
    值的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个这个类的Java.lang.Class对象,用来封装类在方法区类的对象。
    

    实例

    /**
     * 类的加载过程
     *      1.new子类对象,先加载父类
     *      2.只调用父类静态变量(初始化过程),不加载子类
     *      3.调用常量(链接过程),子类父类都不加载
     */
    public class Demo01 {
        static {
            System.out.println("Main静态方法被加载");
        }
    
        public static void main(String[] args) {
    //        Son son = new Son();
    //        System.out.println(Son.a);
    //        System.out.println(Son.b);
            System.out.println(Son.c);
        }
    }
    class Father{
        static int a = 1;
        static {
            System.out.println("父类静态方法被加载");
        }
    }
    class Son extends Father{
        static int b = 2;
        static final int c = 3; //常量
        static {
            System.out.println("子类静态方法被加载");
        }
    }
    
  • 相关阅读:
    vue简单分屏(1,4,9,16),全屏,还需要调整
    vue 中的Vuex实践
    常用工具类
    java Log日志规范
    spring中对象的注入方式
    不恰当的update语句使用主键和索引导致mysql死锁
    JPA规范及其它持久层框架
    webservice基本功能介绍
    Activiti工作流(二)之常用操作
    Activiti工作流(一)之基本操作介绍
  • 原文地址:https://www.cnblogs.com/gbhh/p/13768145.html
Copyright © 2011-2022 走看看