Class.forName()和ClassLoader.getSystemClassLoader().loadClass()区别
生活随笔
收集整理的這篇文章主要介紹了
Class.forName()和ClassLoader.getSystemClassLoader().loadClass()区别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)載自?Class.forName()和ClassLoader.getSystemClassLoader().loadClass()區(qū)別
?
class A {static {System.out.println("Class A is Loading now");}public A(){System.out.println("A new Class A instance is creating now ...");} };class B {public static void main(String[] argv){try{//Class.forName("A");ClassLoader.getSystemClassLoader().loadClass("A");}catch(Exception e){System.out.println(e);}} };使用Class.forName()的靜態(tài)方法jvm會裝載類?并且執(zhí)行?static {?}中的代碼,而Class.Loader.loadClass()不會執(zhí)行static()的代碼。
在常用的JDBC驅(qū)動中,就是使用了這個方法。
public class Driver extends NonRegisteringDriver implements java.sql.Driver {// ~ Static fields/initializers// ---------------------------------------------//// Register ourselves with the DriverManager//static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}}// ~ Constructors// -----------------------------------------------------------/*** Construct a new driver and register it with DriverManager* * @throws SQLException* if a database error occurs.*/public Driver() throws SQLException {// Required for Class.forName().newInstance()} }以上代碼摘錄自mysql的jdbc驅(qū)動。
?
Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection(url,user,pwd);寫程序時候的調(diào)用,這也是我當(dāng)初剛看這段代碼的時候,始終想不明白的地方。
現(xiàn)在總算知道了來龍去脈。
?
總結(jié)
以上是生活随笔為你收集整理的Class.forName()和ClassLoader.getSystemClassLoader().loadClass()区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3块多的PSP卡套能不能用?实测很好用,
- 下一篇: ClassLoader 详解及用途