在了解Class.getClassLoader之前先看一下获取类的class的三种方式反射机制获取类有三种方法,我们来获取Person类型
第一种方式:
Class c1 = Class.forName("com.kimit.domain.Person");
第二种方式:
// java中每个类型都有class 属性.
Class c2 = Person.class;
第三种方式:
// java语言中任何一个java对象都有getClass 方法 c3是运行时类 (p的运行时类是Person)
Person p = new Person();
Class c3 = p.getClass();
public class JdbcPool implements IPool {
private static String jdbcDriver;
private static String jdbcUrl;
private static String username;
private static String password;
//初始化连接数
private static Integer initConnectCount;
//最大连接数
private static Integer maxConnects;
//当连接不够时自动增长的数
private static Integer incrementCount;
//因为Vector是线程安全的,所以暂时选择它
private static Vector<PoolConnection> connections = new Vector<>();
InputStream is1 = JdbcPool.class.getClassLoader().getResourceAsStream("jdbc.properties");
}
jdbcDriver = com.mysql.jdbc.Driver
jdbcUrl = jdbc:mysql://localhost:3306/test?userUnicode=true&useSSL=false&charterEncoding=UTF8
username = root
password = 123456
initConnectCount = 20
maxConnectCount = 100
incrementCount = 3
当读取一个jdbc.properties文件时,需要把他加载到对象里,但是此时连接池的实现类的对象还没有创建,这时候就需要通过反射来获取;
首先我使用类名.class的方式获取类的class
InputStream is1 = JdbcPool.class.getClassLoader().getResourceAsStream("jdbc.properties")
但是我们都知道java程序写好以后是以.java
(文本文件)的文件存在磁盘上,然后,我们通过(bin/javac.exe)编译命令把.java
文件编译成.class
文件(字节码文件),并存在磁盘上。但是程序要运行,首先一定要把.class
文件加载到JVM内存中才能使用的,我们所讲的classLoader,就是负责把磁盘上的.class
文件加载到JVM内存中,