运行环境: JDK8 + IntelliJ IDEA 2018.3 本文中使用的jar包链接 https://files.cnblogs.com/files/papercy/jsoup_jar%E5%8C%85.rar
重要知识点:
1 类加载器在Java中是以java.lang.ClassLoader类型存在 2 每一个类被加载后,都会有一个Class的实例来代表,而每个Class的实例都会记得自己是由哪个ClassLoader加载的。 3 可以通过Class的getClassLoader()取得加载该类的ClassLoader 4 可以通过ClassLoader的getParent()取得自己的parent 5 注意:返回null并不代表没有parent,因为Bootstrap Loader 是用C语言编写的,所以没有一个实际的类来表示它。 6 可以通过ClassLoader的loadClass()加载类。这时不会立即运行静态块,会等到创建类的实例时才会运行。
练习1:输出系统类加载器及其父加载器 public class Work3 { public static void main(String[] args) { Class clz; ClassLoader cl,cla; //得到系统类加载器 cl= ClassLoader.getSystemClassLoader(); System.out.println(cl); //输出其父类加载器 while (cl!=null){ cla=cl; cl= cla.getParent(); System.out.println(cla+"的父类加载器是:"+cl); } }
1 练习三:输出加载当前类的加载器 2 Class cls=Work3.class; 3 ClassLoader loader = cls.getClassLoader(); 4 System.out.println("当前类的加载器"+loader);
练习3:输出加载Object类的加载器 clz=Class.forName("java.lang.Object"); cl=clz.getClassLoader(); System.out.println("object的加载器是:"+cl);
运行结果:
总结:四个方式得到Class对象
1 Object s = new String(); 2 Class clz1 = s.getClass(); 3 4 Class str=String.class; 5 6 Class clz = Class.forName("java.io.IOException"); 7 8 ClassLoader loader = ClassLoader.getSystemClassLoader(); 9 Class clz3 = loader.getClass();
乾坤未定,你我皆是黑马!!!