【JAVA】Class.forName( )你搞懂了嗎
Class.forName( )你搞懂了嗎
www.diybl.com 時間 : 2011-04-26 作者:佚名 編輯:fnw 點選: 6618 [ 評論 ]
終於明白為什麼載入資料庫驅動只用Class.forName()了!!困擾了我2個小時!!希望我寫的這個東西對各位有所幫助。
在Java開發特別是資料庫開發中,經常會用到Class.forName( )這個方法。通過查詢Java Documentation我們會發現使用Class.forName( )靜態方法的目的是為了動態載入類。在載入完成後,一般還要呼叫Class下的newInstance( )靜態方法來例項化物件以便操作。因此,單單使用Class.forName( )是動態載入類是沒有用的,其最終目的是為了例項化物件。
這裡有必要提一下就是Class下的newInstance()和new有什麼區別?,首先,newInstance( )是一個方法,而new是一個關鍵字,其次,Class下的newInstance()的使用有侷限,因為它生成物件只能呼叫無參的建構函式,而使用new關鍵字生成物件沒有這個限制。
好,到此為止,我們總結如下:
Class.forName("")返回的是類
Class.forName("").newInstance()返回的是object
有資料庫開發經驗朋友會發現,為什麼在我們載入資料庫驅動包的時候有的卻沒有呼叫newInstance( )方法呢?即有的jdbc連線資料庫的寫法裡是Class.forName(xxx.xx.xx);而有一些:Class.forName(xxx.xx.xx).newInstance(),為什麼會有這兩種寫法呢?
剛才提到,Class.forName("");的作用是要求JVM查詢並載入指定的類,如果在類中有靜態初始化器的話,JVM必然會執行該類的靜態程式碼段。而在JDBC規範中明確要求這個Driver類必須向DriverManager註冊自己,即任何一個JDBC Driver的Driver類的程式碼都必須類似如下:
1
public class MyJDBCDriver implements Driver {
2
static {
3
DriverManager.registerDriver(new MyJDBCDriver());
4
}
5
}
既然在靜態初始化器的中已經進行了註冊,所以我們在使用JDBC時只需要Class.forName(XXX.XXX);就可以了。
文章出處:飛諾網(www.diybl.com):http://www.diybl.com/course/3_program/java/javajs/20081013/150473.html
相關文章
- HTML 屬性你都懂了嗎HTML
- 設計模式你真的懂了嗎?設計模式
- vue作用域插槽,你真的懂了嗎?Vue
- rem和em的用法,你弄懂了嗎?REM
- Java Builder 模式,你搞懂了麼?JavaUI模式
- 看了此文,你還敢說你懂了Javascript運算子嗎JavaScript
- JS的資料型別你真的懂了嗎JS資料型別
- 這些併發模型你真的懂了嗎?未必模型
- DIY攢機-你真的搞懂了硬碟分割槽嗎?硬碟
- 前端都該懂的瀏覽器工作原理,你懂了嗎?前端瀏覽器
- 寫PHP程式碼你搞過單元測試嗎PHP
- 迭代與遞迴--你被遞迴搞暈過嗎?遞迴
- Python的 is 和 == 弄懂了嗎?Python
- 新華網:95後的謎之就業觀,你看懂了嗎?就業
- 你瞭解Java反射嗎?Java反射
- 【JAVA】Class.forName用法以及和new的區別Java
- 虛擬偶像的商業邏輯和技術奧祕你看懂了嗎?
- 你知道 Java 有哪些引用嗎?Java
- 【長文】帶你搞明白RedisRedis
- 分散式事務中的一致性和隔離性你真的懂了嗎分散式
- Java內部類你真的會嗎?Java
- 搞懂了這套“遊戲付費體系” 還愁沒有玩家為你的遊戲掏錢嗎?遊戲
- 看懂了責任鏈模式,你就能明白很多模式
- Sql Or NoSql,看完這一篇你就懂了SQL
- 你知道嗎,Java之父也討厭BugJava
- Java SPI機制,你瞭解過嗎?Java
- Java基礎系列-SPI你認識嗎Java
- java中你的單例在裸奔嗎?Java單例
- [軟體人生]非挖坑:35歲時搞技術還搞的動嗎?
- java反射(1) 之class.forName(""), 類名.class, 物件.getClass()區別Java反射物件
- 【GoLang 那點事】gRPC 註冊中心,常用的註冊中心你懂了嗎?AP 還是 CP(七)GolangRPC
- 被面試官溫柔地掛掉面試?決定面試成敗的這些“暗示”你讀懂了嗎?面試
- 經典的 Top K 問題,你真的懂了麼?
- 歸併排序,我舉個例子你就看懂了排序
- 這都是些啥??asp.net!你搞懂了沒!ASP.NET
- Java 泛型,你瞭解型別擦除嗎?Java泛型型別
- 細思極恐 - 你真的會寫 Java 嗎?Java
- 這6個高效的Java庫,你知道嗎?Java