Class类是什么? Class.forName()是干什么的?
?
Class類概念
Class類用來描述一個類的結構,比如描述一個類有哪些成員,有哪些方法等。有多種方法可以獲取一個類對應的Class類實例,比如:
?
[java]?view plaincopy?
加載
類加載的過程如下:
1. 將類對應.class文件中的二進制數據讀到內存中,把它存放在運行時數據區的方法區內;
2. 在堆取創建一個Class實例,此實例
a) 描述了方法區內的數據結構
b) 提供了訪問類在方法區內數據結構的接口,如下圖所示:
?
可以簡單的理解為:類加載的產品是一個Class類的實例。
?
?----------------------------------------------------------------------
?
對于大部分人來說,第一次見到class.forName(String className)這句代碼應該是在使用jdbc方式連接數據庫的時候。但這句代碼本質上是什么含義,做了什么工作呢?本文將回答此問題。
理解Class.forName方法需要一些知識鋪墊,也就是Class類的概念和類加載的概念,強烈建議參考下《類的生命周期》(http://www.yanwushu.com/post/54.html)。
Class類概念
Class類用來描述一個類的結構,比如描述一個類有哪些成員,有哪些方法等。有多種方法可以獲取一個類對應的Class類實例,比如:
?
[java]?view plaincopy?
類加載概念
當使用一個類的時候(比如new一個類的實例),jvm會檢查此類是否被加載到內存,如果沒有,則會執行加載操作,加載操作的內容是,讀取類對應的class文件數據,解析此數據,構造一個此類對應的Class類的實例,此Class類的實例描述了類的結構,并且提供了調用此類成員的接口。此時jvm就可以使用該類了,比如實例化此類,或者調用此類的靜態方法。
Java也提供了手動加載類的接口,class.forName()方法就是其中之一。
初始化參數指定的類,并且返回此類對應的Class實例。
類初始化概念
類被加載之后,jvm已經獲得了一個描述類結構的Class實例。但是還需要進行類初始化操作之后才能正常使用此類,類初始化操作就是執行一遍類的靜態語句,包括靜態變量的聲明還有靜態代碼塊。
Class.forName方法
此方法含義是:加載參數指定的類,并且初始化它。
在jdbc連接數據庫中的應用
到這里,不用解釋,讀者也會明白,在使用jdbc方式連接數據庫時,為什么要執行Class.forName('驅動類名')方法了:將驅動類的class文件裝載到內存中,并且形成一個描述此驅動類結構的Class類實例,并且初始化此驅動類,這樣jvm就可以使用它了,這就是Class.forName()方法的含義。
轉載于:https://www.cnblogs.com/zedosu/p/6516103.html
總結
以上是生活随笔為你收集整理的Class类是什么? Class.forName()是干什么的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机电传动控制第三次作业
- 下一篇: FreePascal - 如何在各个平台