类加载器

类加载器:负责将.class文件加载到内存中,并为之生成对应的Class对象,也就是字节码文件对象。

idea中的Java程序如何运行:
首先将.java源文件编译为class类文件;
编译后的类文件是存在于硬盘的,如果我们运行需要在内存中看到效果,此时jvm通过类加载器ClassLoader把硬盘中的class文件加载到内存中,这样就可以使用这个类中的成员变量和方法,而被加载到内存中的class文件就会变成一个Class类的对象。

常见的类加载器有三种,每个类加载器负责加载不同位置的类:

  • Bootstrap:跟加载器
  • ExtClassLoader:扩展类加载器
  • APPClassLoader:系统/应用类加载器
    类加载器_第1张图片说明:
  1. Bootstrap是最顶级的类加载器。它加载类文件不是我们自己书写的。都是sun公司定义好的类,比如String、Integer、File类等。
  2. ExtClassLoader 扩展类加载器,加载的都是jdk内部自己使用的类。
  3. AppClassLoader 系统/应用类加载器,是用来加载ClassPath 指定的所有jar或目录,ClassPath表示存放类路径的,我们如果不配置ClassPath,那么就表示当前文件夹,在idea环境下的ClassPath是out中的目录。在out目录存放的都是我们书写好的class文件,也就是说 AppClassLoader 类加载器是用来加载我们书写的out目录下的class文件。

如何获取一个类的类加载器
如果想获取当前类的加载器,那么首先必须获取当前类的字节码文件对象,而这个字节码文件对象属于Class类,我们可以使用Class类中的getClassLoader()函数来获取类加载器:

ClassLoader getClassLoader() 返回该类的类加载器

AppClassLoader:加载classPath中的所有的类,也就是我们自己写的那些类。

public class ClassLoaderDemo{
	psvm(){
		//获取当前类的加载器
		ClassLoader loader =ClassLoaderDemo.class.getClassLoader();
		//输出当前类的加载器
		sout(loader);//sun.misc.Launcher$AppClassLoader@b0014f0
	}
}

你可能感兴趣的:(JavaSE)