Java動態(tài)加載類示例詳解
在講解動態(tài)加載類之前呢,我們先弄清楚為什么要動態(tài)加載類,靜態(tài)加載不行嗎?我們可以看下面的實例:
我在文件夾里寫了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");
}
}
此時我們編譯一下Office.java 文件:

編譯會報錯,這當(dāng)然沒問題,因為確實沒有寫Excel.java類。
但是這個Excel類我們一定會用到嗎?如果這個Excel類需要很久才能寫出來,在此我們也不能使用其他功能嗎?后面如果一個類出問題了,這個系統(tǒng)是不是就癱瘓了?
所以這就體現(xiàn)出動態(tài)加載類的好處了,動態(tài)加載類是按需加載的,你需要什么類,就加載什么類,一個類的狀態(tài),不會影響到另一個類的使用。
所以我們可以將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類,但此時我們再編譯Office.java文件,編譯通過;

運行一下:

成功按照我們預(yù)想的結(jié)果運行,這樣Word類就可以單獨運行。
但是這樣還是不夠規(guī)范,因為現(xiàn)在只能加載Word類類型的類文件,為了使程序有更好的擴(kuò)展性,我們添加一個接口,只有讓所有的功能類實現(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");
}
}
這樣改造之后,我后面要添加一個Excel類,乃至添加其他的類,只需要實現(xiàn)OfficeAble接口就可以了,不需要改動Office這個類和其他的功能類,擴(kuò)展性很強,這就是動態(tài)加載的優(yōu)勢。
總結(jié)
到此這篇關(guān)于Java動態(tài)加載類的文章就介紹到這了,更多相關(guān)Java動態(tài)加載類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java編程中拷貝數(shù)組的方式及相關(guān)問題分析
這篇文章主要介紹了java編程中拷貝數(shù)組的方式及相關(guān)問題分析,分享了Java中數(shù)組復(fù)制的四種方式,其次對二維數(shù)組的簡單使用有一段代碼示例,具有一定參考價值,需要的朋友可以了解下。2017-11-11
Java調(diào)用ChatGPT(基于SpringBoot和Vue)實現(xiàn)可連續(xù)對話和流式輸出的ChatGPT API
這篇文章主要介紹了Java調(diào)用ChatGPT(基于SpringBoot和Vue),實現(xiàn)可連續(xù)對話和流式輸出的ChatGPT API(可自定義實現(xiàn)AI助手),文中代碼示例介紹的非常詳細(xì),感興趣的朋友可以參考下2023-04-04
Java?InheritableThreadLocal使用示例詳解
InheritableThreadLocal繼承了ThreadLocal,此類擴(kuò)展了ThreadLocal以提供從父線程到子線程的值的繼承:當(dāng)創(chuàng)建子線程時,子線程接收父線程具有的所有可繼承線程局部變量的初始值。?通常子線程的值與父線程的值是一致的2022-09-09

