Java查看当前类执行过程中加载的所有类

有时候需要查看在当前类执行的过程中,都载入了哪些类。

一、自定义的需要载入的类

public class Persion implements Serializable{
    String name;
    int age;

    public Persion(String name, int age){
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

三、完整测试代码

public class ClassLoadTest {
    public static void main(String[] args) throws Exception {
        Persion p = new Persion("zhansan", 20);

        Field f=ClassLoader.class.getDeclaredField("classes");
        f.setAccessible(true);
        Vector classes=(Vector)f.get(ClassLoader.getSystemClassLoader());
        System.out.println(classes);
    }
}

四、测试结果

[class test.ClassLoadTest, class test.Persion]

需要说明的是载入的jdk中的类并不会列出来。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java类的加过程可以分为以下几个步骤: 1. 通过类的全限定名在类路径中查找该类的class文件。 2. 如果class文件存在,Java虚拟机将其读入内存,并对其进行校验。校验的主要目的是验证class文件的内容是否符合Java语言的语法规则。 3. 如果class文件通过了校验,Java虚拟机将其转换为方法区中的数据结构,供程序员在运行时使用。 4. 如果class文件不存在,或者校验失败,Java虚拟机将抛出一个ClassNotFoundException异常。 在Java类加过程中,Java虚拟机默认使用的是双亲委派模型来管理类的加。在这种模型中,父类加器会优先加类,如果父类加器无法加该类,那么子类加器再加。这样的好处是可以防止类的重复加,保证了Java类的单例性。 这个加过程对于程序员透明,所以无需关心具体的加过程,只需要关注Java类的使用即可。 ### 回答2: Java的类加过程包括了加、链接和初始化三个阶段。 1. 加(Loading):将字节码文件读取到内存中,并创建一个对应的Class对象。这个过程是通过类加器来实现的。 2. 链接(Linking):链接阶段主要包括了验证、准备和解析三个步骤。 - 验证(Verification):验证阶段会对加的字节码进行一系列验证,包括语法验证、语义验证和字节码验证等,确保字节码的正确性和安全性。 - 准备(Preparation):准备阶段会为类的静态变量分配内存,并设置默认初始值。同时也会在方法区中创建常量池,并进行一些必要的静态符号的引用。 - 解析(Resolution):解析阶段会将符号引用替换为直接引用,即将类、方法、字段的引用都解析为实际内存地址的引用。 3. 初始化(Initialization):在初始化阶段,会执行类的初始化器<clinit>()方法,该方法由编译器自动生成,包含了类中静态变量的赋值和静态代码块的执行等。在这个阶段,会按照父类-子类的顺序来初始化类。 总结来说,Java的类加过程就是通过类加器将字节码文件加到内存中,然后经过验证、准备和解析等链接阶段,最后进行初始化,执行类中的静态代码块和静态变量的赋值等操作。 ### 回答3: Java的类加过程主要分为加(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)和初始化(Initialization)五个步骤。 加阶段是指将类的字节码文件读入内存,并将其转换成相应的数据结构。对于由类加器所加的每个类,Java虚拟机都会生成一个唯一的Class对象,用来表示这个类。 验证阶段是为了确保类的字节码符合Java虚拟机的规范,包括检查文件格式、语义一致性、字节码验证等。 准备阶段是为类的静态字段分配内存,并为它们设置初始值。在这个阶段,Java虚拟机会为每个字段分配内存空间,并根据字段的类型设置默认值。注意,这里只分配了内存空间,并没有实际初始化字段的值。 解析阶段是将常量池中的符号引用转换为直接引用,即找到对应的内存地址。这个阶段通常在初始化之前执行,它的目的是为了准备执行初始化阶段所需要的信息。 初始化阶段是类加的最后一步,主要是对静态变量进行初始化,执行静态代码块中的代码。在这个阶段,Java虚拟机会按照顺序执行静态变量的赋值操作和静态代码块中的代码。 需要注意的是,类的加过程是按需进行的,即在第一次使用这个类之前才会触发其加过程。同时,类加是按照委托机制进行的,即先将请求委派给父类加器,只有在父类加器找不到对应的类时才会由当前类加器进行加。 总的来说,Java的类加过程包括加、验证、准备、解析和初始化五个阶段,它们按需触发,有严格的顺序,是Java虚拟机保证类加的正确性和安全性的重要机制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值