首頁  >  文章  >  Java  >  Java反射`Class.forName()`和`Class.forName().newInstance()`有什麼差別?

Java反射`Class.forName()`和`Class.forName().newInstance()`有什麼差別?

Patricia Arquette
Patricia Arquette原創
2024-11-08 11:56:01851瀏覽

What is the difference between `Class.forName()` and `Class.forName().newInstance()` in Java reflection?

Class.forName() 與Class.forName().newInstance()

使用Java 反射時,常常會遇到兩種方法播放:Class.forName() 和Class.forName().newInstance()。為了理解它們的區別,讓我們用一個例子:

演示類別:

Class.forName()

根據其文檔,Class.forName(String) 檢索與類別或介面關聯的Class 物件指定名稱。在我們的範例中,這會轉換為儲存在 clazz 變數中的 test.Demo.class。

Class.forName().newInstance()

clazz.newInstance()實例化 Class 物件表示的類別。如果沒有任何參數,它相當於一個 new Demo() 並傳回一個新的 Demo 實例。

輸出:

執行此Demo 類打印:

動態實例化

至關重要的是,newInstance 可以在運行時動態實例化類,即使它們的名稱事先未知。這增強了程式碼靈活性。

實際應用

JDBC 驅動程式利用此功能在運行時根據目標資料庫載入適當的驅動程式。類似地,EJB 和 Servlet 容器使用動態載入來初始化元件,而無需先驗知識。

JDBC 驅動程式初始化

JDBC 驅動程式通常使用靜態初始化區塊向 DriverManager 註冊自己在類別初始化期間。這意味著 Class.forName(String) 看似可以「建立」 JDBC 驅動程式的實例,但它只是驅動程式實作的副產品。

JDBC 4.0 增強

在JDBC 4.0 和Java 7 中,引入了自動加載,使得在大多數情況下不需要明確使用Class.forName() 。開發者可以參考「Java SE 6 中的 JDBC 4.0 增強」資源以獲取更多詳細資訊。

以上是Java反射`Class.forName()`和`Class.forName().newInstance()`有什麼差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn