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("子类静态方法被加载");
        }
    }
    
  • 相关阅读:
    获取网站注册中发送验证信息的链接
    SSH hibernate 使用时最好添加访问数据库的编码
    hibernate 数据行数统计 count(*)
    【转】Java自动装箱、拆箱、缓冲池
    struts2文件下载 火狐浏览器的文件名乱码问题
    struts2 action中传递两个参数到url
    IText 生成简单表格(报表)doc文档 单元居中
    IText 生成横向的doc文档
    IText PdfPTable表格 单元的居中显示
    IText 中文字体解决方案 生成doc文档
  • 原文地址:https://www.cnblogs.com/gbhh/p/13768145.html
Copyright © 2011-2022 走看看