Java動(dòng)態(tài)加載類示例詳解
在講解動(dòng)態(tài)加載類之前呢,我們先弄清楚為什么要?jiǎng)討B(tài)加載類,靜態(tài)加載不行嗎?我們可以看下面的實(shí)例:
我在文件夾里寫了Office.java 類和 Word.java類,如下:
Office.java
class Office{ public static void main(String[] args){ if(args[0].equals("Word")){ Word w = new Word(); w.start(); } if(args[0].equals("Excel")){ Excel e = new Excel(); e.start(); } } }
Word.java
class Word{ public void start(){ System.out.println("Word Start"); } }
此時(shí)我們編譯一下Office.java 文件:
編譯會(huì)報(bào)錯(cuò),這當(dāng)然沒問題,因?yàn)榇_實(shí)沒有寫Excel.java類。
但是這個(gè)Excel類我們一定會(huì)用到嗎?如果這個(gè)Excel類需要很久才能寫出來,在此我們也不能使用其他功能嗎?后面如果一個(gè)類出問題了,這個(gè)系統(tǒng)是不是就癱瘓了?
所以這就體現(xiàn)出動(dòng)態(tài)加載類的好處了,動(dòng)態(tài)加載類是按需加載的,你需要什么類,就加載什么類,一個(gè)類的狀態(tài),不會(huì)影響到另一個(gè)類的使用。
所以我們可以將Office類改造如下:
class Office{ public static void main(String[] args){ try{ Class c = Class.forName(args[0]); Word w = (Word)c.newInstance(); w.start(); } catch(Exception e){ e.printStackTrace(); } } }
雖然我們還是沒有寫Excel類,但此時(shí)我們?cè)倬幾gOffice.java文件,編譯通過;
運(yùn)行一下:
成功按照我們預(yù)想的結(jié)果運(yùn)行,這樣Word類就可以單獨(dú)運(yùn)行。
但是這樣還是不夠規(guī)范,因?yàn)楝F(xiàn)在只能加載Word類類型的類文件,為了使程序有更好的擴(kuò)展性,我們添加一個(gè)接口,只有讓所有的功能類實(shí)現(xiàn)該接口即可。完善如下:
OfficeAble.java
interface OfficeAble{ public void start(); }
Office.java
class Office{ public static void main(String[] args){ try{ Class c = Class.forName(args[0]); OfficeAble oa = (OfficeAble)c.newInstance(); oa.start(); } catch(Exception e){ e.printStackTrace(); } } }
Word.java
class Word implements OfficeAble{ public void start(){ System.out.println("Word Start"); } }
這樣改造之后,我后面要添加一個(gè)Excel類,乃至添加其他的類,只需要實(shí)現(xiàn)OfficeAble接口就可以了,不需要改動(dòng)Office這個(gè)類和其他的功能類,擴(kuò)展性很強(qiáng),這就是動(dòng)態(tài)加載的優(yōu)勢(shì)。
總結(jié)
到此這篇關(guān)于Java動(dòng)態(tài)加載類的文章就介紹到這了,更多相關(guān)Java動(dòng)態(tài)加載類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java 利用java反射機(jī)制動(dòng)態(tài)加載類的簡(jiǎn)單實(shí)現(xiàn)
- java實(shí)現(xiàn)動(dòng)態(tài)編譯并動(dòng)態(tài)加載
- java動(dòng)態(tài)加載插件化編程詳解
- Java 動(dòng)態(tài)加載jar和class文件實(shí)例解析
- java 動(dòng)態(tài)加載的實(shí)現(xiàn)代碼
- 詳解Java動(dòng)態(tài)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)
- Java反射之靜態(tài)加載和動(dòng)態(tài)加載的簡(jiǎn)單實(shí)例
- Java窗體動(dòng)態(tài)加載磁盤文件的實(shí)現(xiàn)方法
- 詳解Java類動(dòng)態(tài)加載和熱替換
相關(guān)文章
Java反射與Fastjson的危險(xiǎn)反序列化詳解
在?Java?中,Computer.class是一個(gè)引用,它表示了?Computer?的字節(jié)碼對(duì)象(Class對(duì)象),這個(gè)對(duì)象被廣泛應(yīng)用于反射、序列化等操作中,那么為什么?parseObject?需要這個(gè)引用呢,帶著這個(gè)問題我們一起通過本文學(xué)習(xí)下吧2024-07-07一篇文章帶你搞懂Java線程池實(shí)現(xiàn)原理
線程池?zé)o論是工作還是面試都是必備的技能,但是很多人對(duì)于線程池的實(shí)現(xiàn)原理卻一知半解,并不了解線程池內(nèi)部的工作原理,今天就帶大家一塊剖析線程池底層實(shí)現(xiàn)原理2022-11-11java編程中拷貝數(shù)組的方式及相關(guān)問題分析
這篇文章主要介紹了java編程中拷貝數(shù)組的方式及相關(guān)問題分析,分享了Java中數(shù)組復(fù)制的四種方式,其次對(duì)二維數(shù)組的簡(jiǎn)單使用有一段代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11Java調(diào)用ChatGPT(基于SpringBoot和Vue)實(shí)現(xiàn)可連續(xù)對(duì)話和流式輸出的ChatGPT API
這篇文章主要介紹了Java調(diào)用ChatGPT(基于SpringBoot和Vue),實(shí)現(xiàn)可連續(xù)對(duì)話和流式輸出的ChatGPT API(可自定義實(shí)現(xiàn)AI助手),文中代碼示例介紹的非常詳細(xì),感興趣的朋友可以參考下2023-04-04Java?InheritableThreadLocal使用示例詳解
InheritableThreadLocal繼承了ThreadLocal,此類擴(kuò)展了ThreadLocal以提供從父線程到子線程的值的繼承:當(dāng)創(chuàng)建子線程時(shí),子線程接收父線程具有的所有可繼承線程局部變量的初始值。?通常子線程的值與父線程的值是一致的2022-09-09