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("子类静态方法被加载");
        }
    }
    
  • 相关阅读:
    Python基础——内置函数
    HHKB Mac快捷键使用
    解决EditText在ListView Item中,第一次点击无法获取焦点问题
    Android 设置Spinner默认显示文字
    IOS-静态Cell
    android-创建流式布局,并修改最后一行的最后一个view
    最简单的设置ExitText只能输入数字和字母的方法
    Android studio私人常用快捷键(持续更新)
    IOS-NSNotification(通知)
    Android书单(持续更新)
  • 原文地址:https://www.cnblogs.com/gbhh/p/13768145.html
Copyright © 2011-2022 走看看