首頁>Club>
2
回覆列表
  • 1 # Javaspring架構師

    Class classObj = Class.forName("類名");..嘗試根據類地址(類名)獲取一個類的型別(Class)物件(這麼說好糾結...)....Class物件可以獲取這個class中的方法以及屬性,也可以用它來建立此類的物件(反射機制)你可能是在寫連線資料庫時載入資料庫驅動的時候(對...你也可以這麼理解..)遇上這段程式碼.....當載入驅動類的時候.會相應的執行該驅動類中 static{}程式碼塊.從而達到不可告人的秘密..(我不知道..但是偶理解是在static程式碼塊裡修改了其他JDBC類中的靜態屬性,如連線方式啥地..,這樣在DriverManager獲取連線時 獲取方式就是驅動類所指定的...當然 你也可以不使用jdbc介面,可以直接呼叫驅動類去獲取連線..不推薦)

  • 2 # 每天一個好影片

    Class.forName

    :返回與給定的字串名稱相關聯類或介面的Class物件。

    Class.forName

    是一個靜態方法,同樣可以用來載入類。該方法有兩種形式:Class.forName(String name, boolean initialize, ClassLoader loader)和 Class.forName(String className)。第一種形式的引數 name表示的是類的全名;initialize表示是否初始化類;loader表示載入時使用的類載入器。第二種形式則相當於設定了引數 initialize的值為 true,loader的值為當前類的類載入器。

    如下圖所示,java型別的屬性名稱叫name,可以透過forName的方法獲取到這個類的例項,從而獲取到類裡面的屬性。

    擴充套件資料:

    注意:

    在指定類給 class.forName() 方法後,如果找不到指定的類,會丟擲ClassNotFoundException 異常。Class 的靜態 forName() 方法有兩個版本,上面的程式碼是隻指定類名稱的版本,而另一個版本可以讓你指定類名稱、載入時是否執行靜態區塊、指定類載入器:

    Static Class forName(String name, boolean initialize, ClassLoader loader)

    預設在載入類的時候,如果類中有定義靜態區塊則會執行它。你可以使用 class.forName() 的第二個版本,將 initialize 設定為 false,這樣在載入類時並不會立即執行靜態區塊,而會在使用類建立物件時才執行靜態區塊。為了印證,可以先設計一個測試類:

    package cn.sunzn.demo;public class TestClass { static {

    System.out.println("[執行靜態區塊]");

    }

    }

  • 中秋節和大豐收的關聯?
  • 小孩7歲讀二年級,從小培養點什麼長大才有出息?