类的加载

Posted hapyygril

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的加载相关的知识,希望对你有一定的参考价值。

1.加载
2.连接
(1)校验:
查看字节码的数据是否以“cafe”开头
jdk版本是否可以运行字节码的数据
(2)准备
成员变量赋默认值
常量(final)
(3)解析
String -->String类型对应的class地址
3.初始化<clinit>类初始化
(1)静态变量的显式初始化代码,赋值代码
(2)静态代码块

当一个类初始化时,如果父类没有初始化,则先初始化父类
每一个类只会初始化一次

类的初始化:
(1)main方法所在的类在加载时,直接先初始化
(2)new一个类的新对象
(3)调用该类的静态变量(final除外)和静态方法
(4)使用java.lang.reflect包的方法对类进行反射调用
(5)初始化一个类时,父类初始化
不会导致类的初始化
(1)静态变量(final)
(2)子类访问父类的静态域,Son.name
(3)通过数组定义类引用

package project05;
/*类加载:
1.加载
2.连接
(1)校验:
             查看字节码的数据是否以“cafe”开头
     jdk版本是否可以运行字节码的数据
 (2)准备
              成员变量赋默认值
              常量(final)
 (3)解析
     String   -->String类型对应的class地址
 3.初始化<clinit>类初始化
 (1)静态变量的显式初始化代码,赋值代码
 (2)静态代码块
 
 当一个类初始化时,如果父类没有初始化,则先初始化父类
 每一个类只会初始化一次
 
 类的初始化:
 (1)main方法所在的类在加载时,直接先初始化
 (2)new一个类的新对象
 (3)调用该类的静态变量(final除外)和静态方法
 (4)使用java.lang.reflect包的方法对类进行反射调用
 (5)初始化一个类时,父类初始化
 不会导致类的初始化
 (1)静态变量(final)
 (2)子类访问父类的静态域,Son.name
 (3)通过数组定义类引用
 */


public class test03 {
    static {
        //1.main方法所在的类在加载时,直接先初始化
        //System.out.println("main方法的类初始化");//main方法的类初始化
        
    }
    public static void main(String[] args) {
        //2.new一个类的新对象
        //Father my=new Father();//父类静态代码块--> 父类非静态代码块
        
        //3.调用该类的静态变量(final除外)和静态方法
        //System.out.println(Father.name);//父类静态代码块--> null
        
        //5.初始化一个类时,父类初始化
        //Son son =new Son();//父类静态代码块 --> 子类静态代码块-->  父类非静态代码块
        
        
        
        //1.静态变量(final)
        //System.out.println(Son.hobby);//banana
        
        //2.子类访问父类的静态域
        //System.out.println(Son.name);//父类静态代码块-->zhang
        
        //3.
        Father [] arr=new Father[5];
        
    }
}

class Father{
    public static String name="zhang";
    public static final String hobby="banana";
    static {
        System.out.println("父类静态代码块");
    }
    {
        System.out.println("父类非静态代码块");
    }
}

class Son extends Father{
    static {
        System.out.println("子类静态代码块");
    }
}

 

以上是关于类的加载的主要内容,如果未能解决你的问题,请参考以下文章

收藏|分享前端开发常用代码片段

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段

关于js----------------分享前端开发常用代码片段

在导航抽屉关闭之前加载片段

重新加载时刷新片段

用于数据加载的 Android 活动/片段职责