JavaShuo
欄目
標籤
Class.forName和ClassLoader.loadClass的區別
時間 2021-08-14
標籤
html
java
mysql
sql
編程
app
ide
this
spa
htm
欄目
Java
简体版
原文
原文鏈接
Class的裝載分了三個階段,loading,linking和initializing,分別定義在The Java Language Specification的12.2,12.3和12.4。
Class.forName(className) 其實是調用Class.forName(className, true, this.getClass().getClassLoader())。注意第二個參數,是指Class被loading後是否是必須被初始化。
ClassLoader.loadClass(className)實際上調用的是ClassLoader.loadClass(name, false),第二個參數指出Class是否被link。
區別就出來了。Class.forName(className)裝載的class已經被初始化,而ClassLoader.loadClass(className)裝載的class尚未被link。
通常狀況下,這兩個方法效果同樣,都能裝載Class。但若是程序依賴於Class是否被初始化,就必須用Class.forName(name)了。
例如,在JDBC編程中,常看到這樣的用法,Class.forName("com.mysql.jdbc.Driver"),若是換成了 getClass().getClassLoader().loadClass("com.mysql.jdbc.Driver"),就不行。
爲何呢?打開com.mysql.jdbc.Driver的源代碼看看,
//
// Register ourselves with the DriverManager
//
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
原來,Driver在static塊中會註冊本身到java.sql.DriverManager。而static塊就是在Class的初始化中被執行。因此這個地方就只能用Class.forName(className)。
另一篇參考:http://hi.baidu.com/ericwanghx/blog/item/3ed3482f2701b8f68a139998
.html
Java類的static塊何時執行?:http://joes0619.blog.163.com/blog/static/104235032006922103733362
/
相關文章
1.
Class.forName和ClassLoader.loadClass區別
2.
ClassLoader.loadClass和Class.forName的區別
3.
ClassLoader.loadclass和Class.forName的區別
4.
Class.forName()和ClassLoader.loadClass 的區別
5.
Class.forName() 和 ClassLoader.loadClass()的區別?
6.
反射中Class.forName()和ClassLoader.loadClass()的區別
7.
反射 - Class.forName()和ClassLoader.loadClass()的區別
8.
Class.forName和ClassLoader.loadClass兩個方法的區別?
9.
Class.forName(xxx.xx.xx) ClassLoader.loadClass newInstance()區別
10.
Class.forName和classLoader.loadClass的比較
更多相關文章...
•
Git 工作區、暫存區和版本庫
-
Git 教程
•
事務的四大特性和隔離級別
-
Hibernate教程
•
適用於PHP初學者的學習線路和建議
•
TiDB 在摩拜單車在線數據業務的應用和實踐
相關標籤/搜索
class.forname
classloader.loadclass
區別
su和sudo區別
別的
不加區別
區別於
詳細區別
有區別
區別對待
HTML
MySQL
Java
SQL
XLink 和 XPointer 教程
NoSQL教程
MyBatis教程
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
Android Studio3.4中出現某個項目全部亂碼的情況之解決方式
2.
Packet Capture
3.
Android 開發之 仿騰訊視頻全部頻道 RecyclerView 拖拽 + 固定首個
4.
rg.exe佔用cpu導致卡頓解決辦法
5.
X64內核之IA32e模式
6.
DIY(也即Build Your Own) vSAN時,選擇SSD需要注意的事項
7.
選擇深圳網絡推廣外包要注意哪些問題
8.
店鋪運營做好選款、測款的工作需要注意哪些東西?
9.
企業找SEO外包公司需要注意哪幾點
10.
Fluid Mask 摳圖 換背景教程
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
Class.forName和ClassLoader.loadClass區別
2.
ClassLoader.loadClass和Class.forName的區別
3.
ClassLoader.loadclass和Class.forName的區別
4.
Class.forName()和ClassLoader.loadClass 的區別
5.
Class.forName() 和 ClassLoader.loadClass()的區別?
6.
反射中Class.forName()和ClassLoader.loadClass()的區別
7.
反射 - Class.forName()和ClassLoader.loadClass()的區別
8.
Class.forName和ClassLoader.loadClass兩個方法的區別?
9.
Class.forName(xxx.xx.xx) ClassLoader.loadClass newInstance()區別
10.
Class.forName和classLoader.loadClass的比較
>>更多相關文章<<