运行源码:
package com.ChenJiangTing.Demo4; public class Demo4 { public static void main(String[] args) { Class clz; ClassLoader cl, cll;//类加载器 clz=String.class; cl=clz.getClassLoader();//得到加载String类对象的类加载器 System.out.println("加载String类对象的加载器:" + cl); //当类加载器为null的时候,表示的是BootStrapLoader System.out.println("******************************"); clz=Demo4.class; cl=clz.getClassLoader(); System.out.println("加载Demo4类对象的类加载器:" + cl); while (cl!=null){ cll=cl; cl=cll.getParent();//得到父加载器 System.out.println(cll+"的父加载器是:" + cl); } } }
运行结果:
加载String类对象的加载器:null ****************************** 加载Demo4类对象的类加载器:sun.misc.Launcher$AppClassLoader@14dad5dc sun.misc.Launcher$AppClassLoader@14dad5dc的父加载器是:sun.misc.Launcher$ExtClassLoader@28d93b30 sun.misc.Launcher$ExtClassLoader@28d93b30的父加载器是:null
技术总结:
1.Class对象由JVM自动产生,每当一个类被加载时,JVM就自动为其生成一个Class对象,通过Class对象可以获得类的相关信息。 将类信息读到内存中过程,称为类加载。
2.获得类的基本信息的常用方法:
1)getName() 获得类名 getPackage()
2)获得包名 isInterface()
3)是否为接口 isPrimitive()
4)是否为基本类型 isArray()
5) 是否为数组 getSuperclass()
6)获得父类的Class对象
3.这6种情况下JVM会加载Class对象
一、使用new关键字创建对象时。
二、通过反射创建对象时。
三、调用某个类的static方法时。
四、调用某个类的static属性时。
五、当初始化某个类的子类时。
六、某个类标明为main() 函数类(启动类) 。