类的加载器ClassLoader及其示例
1.概述
类加载器是用来把类(class)装载进内存的。JVM规范定义了两种类型的类加载器:启动类加载器(bootstrap)和用户自定义加载器(user-defined class loader)。JVM运行时会产生三个类加载器组成的初始化加载器层次结构,如下图所示。
- 系统类加载器:负责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);
}
运行结果:
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);
}
运行结果:
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);
jdbc.properties的内容
user=root
password=0025
输出结果
第100篇啦