Java中class是如何加载到JVM中的(Class.forName("name")和ClassLoader.loadClass("name")的区别)
public class Driver extends NonRegisteringDriver implements java.sql.Driver{ //注意,这里有一个static的代码块,这个代码块将会在class初始化的时候执行 static { try { //将这个驱动Driver注册到驱动管理器上 DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } }}
??? Class.forName("com.mysql.jdbc.Driver")方法以后,他会进行class的初始化,执行static代码块。
??? 也就是说class初始化以后,就会将驱注册到DriverManageer上,之后才能通过DriverManager去获取相应的连接。
??? 但是要是我们使用ClassLoader.loadClass(com.mysql.jdbc.Driver)的话,不会link,更也不会初始化class。
??? 相应的就不会回将Driver注册到DriverManager上面,所以肯定不能通过DriverManager获取相应的连接。
??? ???