欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 編程如何使用 Class.forName() 加載類

 更新時間:2024年04月30日 09:56:46   作者:sunzn  
在一些應用中,無法事先知道使用者將加載什么類,而必須讓使用者指定類名稱以加載類,可以使用 Class的靜態(tài)forName()方法實現(xiàn)動態(tài)加載類,這篇文章主要介紹了Java編程如何使用Class.forName()加載類,需要的朋友可以參考下

Java 編程下使用 Class.forName() 加載類

在一些應用中,無法事先知道使用者將加載什么類,而必須讓使用者指定類名稱以加載類,可以使用 Class 的靜態(tài) forName() 方法實現(xiàn)動態(tài)加載類。下面的范例讓你可以指定類名稱來獲得類的相關信息。

package cn.sunzn.demo;
public class ClassDemo {
    public static void main(String[] args) {
        try {
            Class c = Class.forName(args[0]);
            System.out.println("類名稱:" + c.getName());
            System.out.println("是否為接口:" + c.isInterface());
            System.out.println("是否為基本類型:" + c.isPrimitive());
            System.out.println("是否為數(shù)組:" + c.isArray());
            System.out.println("父類:" + c.getSuperclass().getName());
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("沒有指定類名稱");
        } catch (ClassNotFoundException e) {
            System.out.println("找不到指定的類");
        }
    }
}

在指定類給 forName() 方法后,如果找不到指定的類,會拋出 ClassNotFoundException 異常。Class 的靜態(tài) forName() 方法有兩個版本,上面的代碼是只指定類名稱的版本,而另一個版本可以讓你指定類名稱、加載時是否運行靜態(tài)區(qū)塊、指定類加載器:

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

默認在加載類的時候,如果類中有定義靜態(tài)區(qū)塊則會運行它。你可以使用 forName() 的第二個版本,將 initialize 設定為 false,這樣在加載類時并不會立即運行靜態(tài)區(qū)塊,而會在使用類建立對象時才運行靜態(tài)區(qū)塊。為了印證,可以先設計一個測試類。

測試類:TestClass 
package cn.sunzn.demo;
public class TestClass {
    static {
        System.out.println("[運行靜態(tài)區(qū)塊]");
    }
}

在測試類 TestClass 中只定義了靜態(tài)區(qū)塊顯示一段信息,以觀察靜態(tài)區(qū)塊何時被運行??梢栽O計范例 ForNameDemo1 使用第一個版本的 forName() 方法。

測試類:ForNameDemo1
package cn.sunzn.demo;
public class ForNameDemo1 {
    public static void main(String[] args) {
        try {
            System.out.println("載入 TestClass ");
            Class c = Class.forName("cn.sunzn.demo.TestClass");
            System.out.println("使用 TestClass 聲明參考名稱");
            TestClass test = null;
            System.out.println("使用 TestClass 建立對象");
            test = new TestClass();
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("沒有指定類名稱");
        } catch (ClassNotFoundException e) {
            System.out.println("找不到指定的類");
        }
    }
}

運行結果如下:

載入 TestClass 
[運行靜態(tài)區(qū)塊]
使用 TestClass 聲明參考名稱
使用 TestClass 建立對象

從運行結果中可以看到,第一版本的 forName() 方法在類加載之后,默認會立即運行靜態(tài)代碼塊。下面來看范例 ForNameDemo2 中使用第二個版本的 forName() 方法會是如何。

測試類:ForNameDemo2
package cn.sunzn.demo;
public class ForNameDemo2 {
    public static void main(String[] args) {
        try {
            System.out.println("載入 TestClass ");
            Class c = Class.forName("cn.sunzn.demo.TestClass", false, Thread.currentThread().getContextClassLoader());
            System.out.println("使用 TestClass 聲明參考名稱");
            TestClass test = null;
            System.out.println("使用 TestClass 建立對象");
            test = new TestClass();
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("沒有指定類名稱");
        } catch (ClassNotFoundException e) {
            System.out.println("找不到指定的類");
        }
    }
}

運行結果如下:

載入 TestClass 
使用 TestClass 聲明參考名稱
使用 TestClass 建立對象
[運行靜態(tài)區(qū)塊]

由于使用第二個版本的 forName() 方法時,設定 initialize 為 false,所以加載類時并不會立即運行靜態(tài)區(qū)塊,而會在使用類建立對象時才運行靜態(tài)區(qū)塊,第二個版本的 forName() 方法會需要一個類加載器,范例中所使用的是主線程的類加載器。

到此這篇關于Java 編程如何使用 Class.forName() 加載類的文章就介紹到這了,更多相關Java Class.forName() 加載類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java中this的用法示例(關鍵字this)

    java中this的用法示例(關鍵字this)

    這篇文章主要介紹了java中this的用法示例(關鍵字this),需要的朋友可以參考下
    2014-03-03
  • SpringCloud Netfilx Ribbon負載均衡工具使用方法介紹

    SpringCloud Netfilx Ribbon負載均衡工具使用方法介紹

    Ribbon是Netflix的組件之一,負責注冊中心的負載均衡,有助于控制HTTP和TCP客戶端行為。Spring Cloud Netflix Ribbon一般配合Ribbon進行使用,利用在Eureka中讀取的服務信息,在調用服務節(jié)點時合理進行負載
    2022-12-12
  • Java實現(xiàn)聊天機器人完善版

    Java實現(xiàn)聊天機器人完善版

    這篇文章主要為大家詳細介紹了Java實現(xiàn)聊天機器人完善版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java中Object類的理解和使用

    Java中Object類的理解和使用

    Object類是java.lang包下的核心類,Object類是所有類的父類,何一個類時候如果沒有明確的繼承一個父類的話,那么它就是Object的子類,本文將通過代碼示例詳細介紹一下Java中Object類的理解和使用,需要的朋友可以參考下
    2023-06-06
  • Zookeeper實現(xiàn)分布式鎖代碼實例

    Zookeeper實現(xiàn)分布式鎖代碼實例

    這篇文章主要介紹了Zookeeper實現(xiàn)分布式鎖代碼實例,Zookeeper?分布式鎖應用了其?臨時順序節(jié)點?的特性,在Zookeeper中創(chuàng)建一個持久節(jié)點ParentLock,當?shù)谝粋€客戶端要獲取鎖時,在ParentLock節(jié)點下創(chuàng)建一個臨時順序節(jié)點,需要的朋友可以參考下
    2023-12-12
  • Component和Configuration注解區(qū)別實例詳解

    Component和Configuration注解區(qū)別實例詳解

    這篇文章主要為大家介紹了Component和Configuration注解區(qū)別實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Java算法中的歸并排序算法代碼實現(xiàn)

    Java算法中的歸并排序算法代碼實現(xiàn)

    這篇文章主要介紹了Java算法中的歸并排序算法代碼實現(xiàn),歸并排序使用的是分治思想(Divide and Conquer),分治,顧名思義,就是分而治之,是將一個大問題分解成小的子問題來解決,需要的朋友可以參考下
    2023-12-12
  • 基于JavaSwing+mysql開發(fā)一個學生社團管理系統(tǒng)設計和實現(xiàn)

    基于JavaSwing+mysql開發(fā)一個學生社團管理系統(tǒng)設計和實現(xiàn)

    項目使用Java swing+mysql開發(fā),可實現(xiàn)基礎數(shù)據(jù)維護、用戶登錄注冊、社團信息列表查看、社團信息添加、社團信息修改、社團信息刪除以及退出注銷等功能、界面設計比較簡單易學、適合作為Java課設設計以及學習技術使用,需要的朋友參考下吧
    2021-08-08
  • Spring Security 安全認證的示例代碼

    Spring Security 安全認證的示例代碼

    這篇文章主要介紹了Spring Security 安全認證的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Spring?Boot在Web應用中基于JdbcRealm安全驗證過程

    Spring?Boot在Web應用中基于JdbcRealm安全驗證過程

    這篇文章主要為大家介紹了Spring?Boot在Web應用中基于JdbcRealm安全驗證過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2023-02-02

最新評論