类的加载器ClassLoader及其示例

1.概述

类加载器是用来把类(class)装载进内存的。JVM规范定义了两种类型的类加载器:启动类加载器(bootstrap)和用户自定义加载器(user-defined class loader)。JVM运行时会产生三个类加载器组成的初始化加载器层次结构,如下图所示。
类的加载器ClassLoader及其示例

  • 系统类加载器:负责java -classpath或java.class.path所致目录下的类与jar包的装入工作,是最常用的加载器。
  • 扩展类加载器:负责jre/lib/ext目录下的jar包或-D java.ext.dirs指定目录下的jar包装入工作库。
  • 引导类加载器:用C++编写的,是JVM自带的类加载器,负责java平台核心库,无法直接获取

2.举例

public void test4() throws Exception {
		ClassLoader loader1=ClassLoader.getSystemClassLoader();
		System.out.println(loader1);
		ClassLoader loader2=loader1.getParent();
		System.out.println(loader2);
		ClassLoader loader3=loader2.getParent();
		System.out.println(loader3);
	}

运行结果:
类的加载器ClassLoader及其示例

public void test4() throws Exception {
		ClassLoader loader1=ClassLoader.getSystemClassLoader();
		System.out.println(loader1);
		ClassLoader loader2=loader1.getParent();
		System.out.println(loader2);
		ClassLoader loader3=loader2.getParent();
		System.out.println(loader3);
		
		Class clazz1=Person.class;
		ClassLoader loader4=clazz1.getClassLoader();
		System.out.println(loader4);
		
		String className="java.lang.Object";
		Class clazz2=Class.forName(className);
		ClassLoader loader5=clazz2.getClassLoader();
		System.out.println(loader5);
	}

运行结果:
类的加载器ClassLoader及其示例

3.要点

  • getResourceAsStream()
    获取文件内容
ClassLoader loader=this.getClass().getClassLoader();
		InputStream is=loader.getResourceAsStream("test\\jdbc.properties");
		Properties pros=new Properties();
		pros.load(is);
		String name=pros.getProperty("user");
		System.out.println(name);
		String password=pros.getProperty("password");
		System.out.println(password);

类的加载器ClassLoader及其示例
jdbc.properties的内容

user=root
password=0025

输出结果
类的加载器ClassLoader及其示例
类的加载器ClassLoader及其示例
第100篇啦