最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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() 方法有兩個版本,上面的代碼是只指定類名稱的版本,而另一個版本可以讓你指定類名稱、加載時是否運(yùn)行靜態(tài)區(qū)塊、指定類加載器:

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

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

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

在測試類 TestClass 中只定義了靜態(tài)區(qū)塊顯示一段信息,以觀察靜態(tài)區(qū)塊何時被運(yùn)行??梢栽O(shè)計范例 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("找不到指定的類");
        }
    }
}

運(yùn)行結(jié)果如下:

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

從運(yùn)行結(jié)果中可以看到,第一版本的 forName() 方法在類加載之后,默認(rèn)會立即運(yùn)行靜態(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("找不到指定的類");
        }
    }
}

運(yùn)行結(jié)果如下:

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

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

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

相關(guān)文章

  • servlet異步請求的實(shí)現(xiàn)

    servlet異步請求的實(shí)現(xiàn)

    本文主要介紹了servlet異步請求的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 一文總結(jié)Java獲取文件后綴名的所有方法

    一文總結(jié)Java獲取文件后綴名的所有方法

    Java是一種應(yīng)用廣泛的編程語言,可以通過多種方式來實(shí)現(xiàn)對文件的操作,如文件名后綴、文件擴(kuò)展名等,下面這篇文章主要給大家介紹了關(guān)于Java獲取文件后綴名的所有方法,需要的朋友可以參考下
    2023-05-05
  • Mybatis調(diào)用SQL?Server存儲過程的實(shí)現(xiàn)示例

    Mybatis調(diào)用SQL?Server存儲過程的實(shí)現(xiàn)示例

    在軟件開發(fā)過程中,經(jīng)常會使用到存儲過程,本文就來介紹一下Mybatis調(diào)用SQL?Server存儲過程的實(shí)現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Java中使用標(biāo)簽(label)來控制循環(huán)的執(zhí)行流程

    Java中使用標(biāo)簽(label)來控制循環(huán)的執(zhí)行流程

    java 和 label 兩個完全不相干的詞,今天我把他們連接在一起了,試想一個問題,雙循環(huán)在不使用 return 的情況下,如何停止外循環(huán)?所以本文給大家介紹了Java中使用標(biāo)簽(label)來控制循環(huán)的執(zhí)行流程,需要的朋友可以參考下
    2024-06-06
  • SpringBoot整合Minio實(shí)現(xiàn)文件上傳和讀取功能

    SpringBoot整合Minio實(shí)現(xiàn)文件上傳和讀取功能

    最近有一個需求是關(guān)于視頻上傳播放的,需要設(shè)計一個方案,中間談到了Minio這個技術(shù),于是來學(xué)習(xí)一下,所以本文給大家介紹了SpringBoot整合Minio實(shí)現(xiàn)文件上傳和讀取功能,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-07-07
  • Spring和Spring?Boot的區(qū)別及說明

    Spring和Spring?Boot的區(qū)別及說明

    這篇文章主要介紹了Spring和Spring?Boot的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • java通過注解翻譯字典的實(shí)現(xiàn)示例

    java通過注解翻譯字典的實(shí)現(xiàn)示例

    本文主要介紹了java通過注解翻譯字典的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Springboot打包部署代碼實(shí)例

    Springboot打包部署代碼實(shí)例

    這篇文章主要介紹了Springboot打包部署代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • java如何實(shí)現(xiàn)字符串中的字母排序

    java如何實(shí)現(xiàn)字符串中的字母排序

    這篇文章主要介紹了java如何實(shí)現(xiàn)字符串中的字母排序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 基于Column注解的columnDefinition用法

    基于Column注解的columnDefinition用法

    這篇文章主要介紹了Column注解的columnDefinition用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論

和林格尔县| 云龙县| 客服| 盐城市| 韶山市| 梧州市| 大邑县| 册亨县| 枣阳市| 石城县| 汪清县| 英吉沙县| 芷江| 米脂县| 礼泉县| 金乡县| 化州市| 呼玛县| 岐山县| 翁源县| 望江县| 永宁县| 濮阳县| 芮城县| 盐亭县| 宣化县| 苍溪县| 晋中市| 儋州市| 交城县| 兴仁县| 遂昌县| 彭州市| 临漳县| 荥阳市| 博湖县| 美姑县| 南和县| 萍乡市| 天等县| 山阳县|