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("子类静态方法被加载");
        }
    }
    
  • 相关阅读:
    debounce防抖和throttle节流
    vue 全局路由守卫,系统未登录时自动跳转到登录页面
    vue中使用animate动画库
    nodejs搭建本地静态服务器
    echart4.9 实现map地图
    vue中如何使用echarts
    http状态码返回415问题
    lodash 常用方法整理
    氦图面试题目Boolean search
    Mac 去掉文件属性@
  • 原文地址:https://www.cnblogs.com/gbhh/p/13768145.html
Copyright © 2011-2022 走看看