1. 程式人生 > >Java中的類載入和Class.forName()

Java中的類載入和Class.forName()

對於大部分人來說,第一次見到class.forName(String className)這句程式碼應該是在使用jdbc方式連線資料庫的時候。但這句程式碼本質上是什麼含義,做了什麼工作呢?本文將回答此問題。

Class類概念

Class類用來描述一個類的結構,比如描述一個類有哪些成員,有哪些方法等。有多種方法可以獲取一個類對應的Class類例項,比如:

  1. //第一種方式獲取描述Dog類結構的Class類例項
  2. Class<Dog> clazz = Dog.class;  
  3. //第二種方式
  4. Dog d = new Dog();  
  5. Class<Dog> clazz = d.getClass();  

類載入概念

當使用一個類的時候(比如new一個類的例項),jvm會檢查此類是否被載入到記憶體,如果沒有,則會執行載入操作,載入操作的內容是,讀取類對應的class檔案資料,解析此資料,構造一個此類對應的Class類的例項,此Class類的例項描述了類的結構,並且提供了呼叫此類成員的介面。此時jvm就可以使用該類了,比如例項化此類,或者呼叫此類的靜態方法。

Java也提供了手動載入類的介面,class.forName()方法就是其中之一。

初始化引數指定的類,並且返回此類對應的Class例項。

類初始化概念

類被載入之後,jvm已經獲得了一個描述類結構的Class例項。但是還需要進行類初始化操作之後才能正常使用此類,類初始化操作就是執行一遍類的靜態語句,包括靜態變數的宣告還有靜態程式碼塊。

Class.forName方法

此方法含義是:載入引數指定的類,並且初始化它。

在jdbc連線資料庫中的應用

到這裡,不用解釋,讀者也會明白,在使用jdbc方式連線資料庫時,為什麼要執行Class.forName('驅動類名')方法了:將驅動類的class檔案裝載到記憶體中,並且形成一個描述此驅動類結構的Class類例項,並且初始化此驅動類,這樣jvm就可以使用它了,這就是Class.forName()方法的含義。

(參考《jdbc註冊驅動的三種方式》http://blog.csdn.NET/yanwushu/article/details/7574708),

資源

1. http://www.iteye.com/topic/15039

2. Class.forName和ClassLoader.loadClass的比較 http://blog.csdn.net/lu7kang/article/details/5576043