可以的,只是需要new一個自身就可以了..看代碼演示吧!

成都創新互聯-專業網站定制、快速模板網站建設、高性價比額濟納網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式額濟納網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋額濟納地區。費用合理售后完善,十多年實體公司更值得信賴。
public?class??靜態
{
//非靜態變量;
private?int?m=10;
public?static?void?main(String[]?args)?
{
System.out.println("\n\t\t為什么Java里的靜態方法沒辦法調用動態方法和變量\n\n");
init();
}
//這個是靜態方法!
private?static?void?init()
{
//開始調用!
new?靜態().show();
}
//這個是非靜態方法!
private?void?show()
{
System.out.println("\n我是非靜態方法,我調用了非靜態的變量:m="+m+"\n\n");
}
}
class Demo
{
public static void main(String[] args)
{
new Bean().show1();/*在這里動態的調用show1,show2,也就是說更具傳來的參數不同動態的調用不同的方法。if和反射都能實現,但是if重復代碼太多,感覺不舒服(不是指這個Demo)。*/
}
}
class Bean
{
void show1()
{}
void show2()
{}
}
1.Java動態加載類和靜態加載類的區別
new創建對象的方式稱作為靜態加載,而使用Class.forName("XXX")稱作為動態加載,它們倆本質的區別在于靜態加載的類的源程序在編譯時期加載(必須存在),而動態加載的類在編譯時期可以缺席(源程序不必存在)。
2.為什么需要動態加載類
對于我自己的理解,動態加載類增加了程序的靈活性。比如一個程序中有50個功能,但你可能只會使用其中的一個,如果你用的是靜態加載的方式,你必須在編譯前提供100個功能的所有定義,否則無法編譯通過,若你使用的是動態加載機制,則不需要如此大費周章,用哪一個就定義哪一個即可。
靜態加載:
public class Office_Static {
public static void main(String[] args) {
//new 創建對象,是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類
if("Word".equals(args[0])){
Word w = new Word();
w.start();
}
if("Excel".equals(args[0])){
Excel e = new Excel();
e.start();
}
}
}
這個程序編譯時必須有Word和Excel這兩個類存在才行,即使判斷后用不到Excel也要加載
動態加載:
接口OfficeAble :
public interface OfficeAble {
public void start();}
可以的,我說說大概思路,很簡單,你自己具體實現吧,把代碼寫給你沒意義的:
1.將你這段字符串輸出到一個文件里,用Java類文件的方式命名。
2.調用外部javac命令將該文件編譯。
3.用類加載器(ClassLoad)動態加載新的class文件并用Class.forName()注冊該類,然后就可以正常使用了。
上面的每一步都能在baidu中找到實現方法,自己發揮吧。
首先你可以使用輸入輸出流(或者你說的可能是要用反射得到程序結果來解析)解析做出*.Java文件。
然后可以使用runtime調用Dos下的java編譯命令編譯取得class文件。
然后使用classloader,反射等組合執行生成的class文件。
當前標題:java調用動態代碼 動態執行java代碼
文章位置:http://www.yijiale78.com/article48/doddeep.html
成都網站建設公司_創新互聯,為您提供網站維護、網站建設、企業建站、建站公司、標簽優化、
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯