可以的,我說說大概思路,很簡單,你自己具體實(shí)現(xiàn)吧,把代碼寫給你沒意義的: 1.將你這段字符串輸出到一個文件里,用Java類文件的方式命名。 2.調(diào)用外部javac命令將該文件編譯。 3.用類加載器(ClassLoad)動態(tài)加載新的class文件并用Class.forName()注冊該類,然后就可以正常使用了。 上面的每一步都能在baidu中找到實(shí)現(xiàn)方法,自己發(fā)揮吧。
10年積累的做網(wǎng)站、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有建鄴免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
求采納
可以的,我說說大概思路,很簡單,你自己具體實(shí)現(xiàn)吧,把代碼寫給你沒意義的:
1.將你這段字符串輸出到一個文件里,用Java類文件的方式命名。
2.調(diào)用外部javac命令將該文件編譯。
3.用類加載器(ClassLoad)動態(tài)加載新的class文件并用Class.forName()注冊該類,然后就可以正常使用了。
上面的每一步都能在baidu中找到實(shí)現(xiàn)方法,自己發(fā)揮吧。
Java代碼正常是靜態(tài)編譯成字節(jié)碼,由對應(yīng)平臺的JVM加載執(zhí)行,靜態(tài)編譯無法動態(tài)擴(kuò)展功能。動態(tài)編譯有兩種方式實(shí)現(xiàn):
從源碼編譯,需要調(diào)用Java Compiler,程序需要運(yùn)行于JDK(而不是JRE)之上。
動態(tài)字節(jié)碼生成技術(shù)(如CGLib、ASM)創(chuàng)建類。
動態(tài)編譯可以簡化代碼,增強(qiáng)類功能,但也帶來了代碼復(fù)雜度,線上不易維護(hù)。
(Write once, run anywhere) 目標(biāo)Java類文件包含字節(jié)代碼同平臺JVM所使用Java字節(jié)代碼僅文件形式存于磁盤通網(wǎng)絡(luò)式載存于內(nèi)存JVM類加載器負(fù)責(zé)包含字節(jié)代碼字節(jié)數(shù)組(byte[])定義Java類某些情況能需要態(tài) Java字節(jié)代碼或已Java字節(jié)代碼進(jìn)行修改候需要用本文要介紹相關(guān)技術(shù)首先介紹何態(tài)編譯Java源文件
態(tài)編譯Java源文件
般情況發(fā)員都程序運(yùn)行前編寫完全部Java源代碼并且功編譯些應(yīng)用說Java源代碼內(nèi)容運(yùn)行刻才能確定候需要態(tài)編譯源代碼Java字節(jié)代碼再由JVM加載執(zhí)行典型場景算競賽線評測系統(tǒng)(PKU JudgeOnline)允許用戶傳Java代碼由系統(tǒng)臺編譯、運(yùn)行并進(jìn)行判定態(tài)編譯Java源文件使用做直接程序調(diào)用Java編譯器
JSR 199引入Java編譯器API使用JDK 6通API態(tài)編譯Java代碼比面代碼用態(tài)編譯簡單Hello World類該Java類代碼保存字符串
public class CompilerTest {
public static void main(String[] args) throws Exception {
String source = "public class Main { public static void main(String[] args) {System.out.println(\"Hello World!\");} }";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
StringSourceJavaObject sourceObject = new CompilerTest.StringSourceJavaObject("Main", source);
Iterable fileObjects = Arrays.asList(sourceObject);
CompilationTask task = compiler.getTask(null, fileManager, null, null, null, fileObjects);
boolean result = task.call();
if (result) {
String[] str={"名字1","名字2","名字3"};
for(int i=0;iv.length;i++){
JLabel lbl = new JLabel(str[i]);
int x=i%4*80+40; //4個一排 間隔80 第一個x從40開始
int y=i/4*40+40;
lbl[i].setBounds(x, y, 80, 20);
panel.add(chb[i]);
}
這個也能實(shí)現(xiàn)的,這就得利用java的動態(tài)編譯,java中可以利用代碼臨時(shí)生成java文件,并且執(zhí)行編譯,運(yùn)行,但這個有一點(diǎn)麻煩,還要用到j(luò)ava中的反映機(jī)制.
apache的commons-beanutils包中就有這樣的方法,hibernate中映射類中的get與set方法是存在的.最好不要用臨時(shí)生成java文件,動態(tài)編譯.