當前位置:首頁 » 編程軟體 » 對類的編譯

對類的編譯

發布時間: 2023-03-13 06:37:15

『壹』 什麼是java代碼的編譯與反編譯

Java代碼的編譯與反編譯

2017-02-21Hollis數盟

一、什麼是編譯

1、利用編譯程序從源語言編寫的源程序產生目標程序的過程。

2、用編譯程序產生目標程序的動作。編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0,編譯程序把人們熟悉的語言換成2進制的。編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼優化;目標代碼生成。主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發現有語法錯誤,給出提示信息。

二、什麼是反編譯

計算機軟體反向工程(Reverseengineering)也稱為計算機軟體還原工程,是指通過對他人軟體的目標程序(可執行程序)進行「逆向分析、研究」工作,以推導出他人的軟體產品所使用的思路、原理、結構、演算法、處理過程、運行方法等設計要素,某些特定情況下可能推導出源代碼。反編譯作為自己開發軟體時的參考,或者直接用於自己的軟體產品中。

三、Java類的編譯與反編譯

我們在最初學習Java的時候,會接觸到兩個命令:javac和java,那個時候我們就知道,javac是用來編譯Java類的,就是將我們寫好的helloworld.java文件編譯成helloworld.class文件。

class文件打破了C或者C++等語言所遵循的傳統,使用這些傳統語言寫的程序通常首先被編譯,然後被連接成單獨的、專門支持特定硬體平台和操作系統的二進制文件。通常情況下,一個平台上的二進制可執行文件不能在其他平台上工作。而Javaclass文件是可以運行在任何支持Java虛擬機的硬體平台和操作系統上的二進制文件。

那麼反編譯呢,就是通過helloworld.class文件得到java文件(或者說是程序員能看懂的Java文件)

四、什麼時候會用到反編譯

1、我們只有一個類的class文件,但是我們又看不懂Java的class文件,那麼我們可以把它反編譯成我們可以看得懂的文件。

2、學習Java過程中,JDK的每個版本都會加入越來越多的語法糖,有些時候我們想知道Java一些實現細節,我們可以藉助反編譯。

五、反編譯工具

1、javap

2、Jad:官網(牆裂推薦)

客戶端:

可以在官網下載可執行文件,找到對應的操作系統的對應版本,然後進行安裝使用。

因為我使用的是linux操作系統,所以我下載的是Linux版本的工具,這個工具下載好之後會有一個執行文件,只要在執行文件所在目錄執行./jadhelloworld.class就會在當前目錄下生成helloworld.jad文件,該文件里就是我們很熟悉的Java代碼

Eclipse插件:

下載地址在官網下載插件的jar包,然後將jar包放到eclipse的plugins目錄下『在打開Eclipse,Eclipse->Window->Preferences->Java,此時你會發現會比原來多了一個JadClipse的選項,單擊,在Pathtodecompiler中輸入你剛才放置jad.exe的位置,也可以制定臨時文件的目錄。當然在JadClipse下還有一些子選項,如Debug,Directives等,按照默認配置即可。基本配置完畢後,我們可以查看一下class文件的默認打開方式,Eclipse->Window->Preferences->General->Editors->FileAssociations我們可以看到class文件的打開方式有兩個,JadClipse和Eclipse自帶的ClassFileViewer,而JadClipse是默認的。全部配置完成,下面我們可以查看源碼了,選擇需要查看的類,按F3即可查看源碼

『貳』 jdk中提供了什麼方法對java類文件進行編譯

importjava.lang.reflect.Method;
importjava.net.URL;
importjava.net.URLClassLoader;

importjavax.tools.JavaCompiler;
importjavax.tools.ToolProvider;

publicclassDemo01{

publicstaticvoidmain(String[]args)throwsException{

JavaCompilercompiler=ToolProvider.getSystemJavaCompiler();

intresult=compiler.run(null,null,null,"C:/source/HelloWorld.java");

System.out.println(result==0?"編譯成功":"編譯失敗");

URL[]urls=newURL[]{newURL("file:/"+"C:/source/")};

URLClassLoaderclassLoader=newURLClassLoader(urls);

Class<?>clazz=classLoader.loadClass("HelloWorld");

//調用main方法
Methodm=clazz.getMethod("main",String[].class);

m.invoke(null,(Object)newString[]{});

}

}

上述代碼會將c盤目錄下的HelloWorld.java文件編譯成HelloWorld.class文件,並將其載入到JVM虛擬機中,調用main方法將其執行

『叄』 使用自己定義的模板類編譯時的問題

根據你的描述,我認為出現問題的原因是把結構體放在類中。
在C++中,結構體類型(struct)的功能被擴展了,結構體中也可以包括成員函數,用以處理其包括的數據,使其具有封裝的特徵,具有類的特點。用struct聲明的結構體類型實際上也就是類,但和類class還是有一點區別:用struct聲明的類,如果對其成員不作private或bublic的聲明,系統將其默認為public ,如果想分別指定私有成員和公有成員,則應用private或public做顯示聲明;而用class定義的類,如果不作private或public聲明,系統將其成員默認為private

所以,在C++中,應將struct和class等同看待。由此,可以看出將結構體定義放在類中是不行的,實際就是將一個類的定義放在另外一個類的定義裡面了。

『肆』 ant怎麼編譯帶有依賴關系的類

1.所有的類一起編譯。
2.你的父添加到classpath中。
3.ant 中添加 classpath 下邊是例 子。
<javac destdir="${classes.dir}" srcdir="${src.dir}" encoding="UTF-8">
<classpath refid="classespath" />
</javac>

『伍』 如何在MyEclipse中對單獨一個類進行編譯

myeclipse中單獨一個類進行編譯,必須使用如下形式來定義類,添加主類main方法,實例如下:

publicclassceshi{
publicstaticvoidmain(String[]args){//必須添加main主方法才能進行單獨編譯
Stringstr;
inti;
}
}

『陸』 jdk中提供了什麼方法對java類文件進行編譯

不要著急
慢慢來
加入你編譯程序的名字是hello.java
1.把它放到d盤根目錄下
2.進去dos
轉到d盤
3.使用javac.hello.java命令
4.這時候你可以看到在hello.java旁邊多了一個hello.class文件
5.使用java.hello
就可以編譯成功了
希望對你有幫助
加油

熱點內容
原神電腦配置怎麼玩不卡 發布:2025-07-20 18:07:06 瀏覽:955
反編譯獲取原代碼 發布:2025-07-20 17:49:43 瀏覽:492
plc編譯怎麼找 發布:2025-07-20 17:48:56 瀏覽:162
無效的宏名稱將編譯啞宏 發布:2025-07-20 17:48:16 瀏覽:155
250萬解壓 發布:2025-07-20 17:44:52 瀏覽:620
騰訊視頻上傳廣告 發布:2025-07-20 17:35:55 瀏覽:406
掘地求升免費腳本 發布:2025-07-20 17:32:06 瀏覽:962
linux設置python環境變數 發布:2025-07-20 17:22:49 瀏覽:242
柱底層加密區 發布:2025-07-20 17:16:20 瀏覽:913
安卓ids是什麼文件 發布:2025-07-20 17:16:14 瀏覽:668