當前位置:首頁 » 編程軟體 » javac編譯包含過程

javac編譯包含過程

發布時間: 2022-12-11 19:01:44

1. 如何用javac 編譯java文件

這個下載安裝完jdk後,是需要配置環境變數才可以使用的。
如:jdk安裝在「C:\Program Files\java\jdk1.6.0_10」
第一步:新建「java_home」值,輸入「C:\Program Files\java\jdk1.6.0_10」;
第二步:新建「classpath」值,輸入「.;%java_home%\lib」;
第三步:在path中增加「%java_home%\bin」;
備註:配置環境變數在「計算機」右擊「屬性」,之後選擇「高級環境變數」,在選擇「環境變數」即可。
結構

javac
[ options ] [ sourcefiles ] [ @files ]
參數可按任意次序排列。

options
命令行選項。

sourcefiles
一個或多個要編譯的源文件(例如 MyClass.java)。

2. java運行的五個步驟

Java程序從源文件創建到程序運行要經過兩大步驟:1、源文件由編譯器編譯成位元組碼(ByteCode)
2、位元組碼由java虛擬機解釋運行。因為java程序既要編譯同時也要經過JVM的解釋運行,所以說Java被稱為半解釋語言( "semi-interpreted" language)。
下面通過以下這個java程序,來說明java程序從編譯到最後運行的整個流程。代碼如下:
//MainApp.java
public class MainApp {
public static void main(String[] args) {
Animal animal = new Animal("Puppy");
animal.printName();
}
}
//Animal.java
public class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public void printName() {
System.out.println("Animal ["+name+"]");
}
}
第一步(編譯): 創建完源文件之後,程序會先被編譯為.class文件。Java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器就會先編譯這個被依賴的類,然後引用,否則直接引用,這個有點象make。如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報「cant find symbol」的錯誤。

編譯後的位元組碼文件格式主要分為兩部分:常量池和方法位元組碼。常量池記錄的是代碼出現過的所有token(類名,成員變數名等等)以及符號引用(方法引用,成員變數引用等等);方法位元組碼放的是類中各個方法的位元組碼。下面是MainApp.class通過反匯編的結果,我們可以清楚看到.class文件的結構:
第二步(運行):java類運行的過程大概可分為兩個過程:1、類的載入 2、類的執行。需要說明的是:JVM主要在程序第一次主動使用類的時候,才會去載入該類。也就是說,JVM並不是在一開始就把一個程序就所有的類都載入到內存中,而是到不得不用的時候才把它載入進來,而且只載入一次。
下面是程序運行的詳細步驟:
在編譯好java程序得到MainApp.class文件後,在命令行上敲java AppMain。系統就會啟動一個jvm進程,jvm進程從classpath路徑中找到一個名為AppMain.class的二進制文件,將MainApp的類信息載入到運行時數據區的方法區內,這個過程叫做MainApp類的載入。
然後JVM找到AppMain的主函數入口,開始執行main函數。
main函數的第一條命令是Animal animal = new Animal("Puppy");就是讓JVM創建一個Animal對象,但是這時候方法區中沒有Animal類的信息,所以JVM馬上載入Animal類,把Animal類的類型信息放到方法區中。
載入完Animal類之後,Java虛擬機做的第一件事情就是在堆區中為一個新的Animal實例分配內存, 然後調用構造函數初始化Animal實例,這個Animal實例持有著指向方法區的Animal類的類型信息(其中包含有方法表,java動態綁定的底層實現)的引用。
當使用animal.printName()的時候,JVM根據animal引用找到Animal對象,然後根據Animal對象持有的引用定位到方法區中Animal類的類型信息的方法表,獲得printName()函數的位元組碼的地址。
開始運行printName()函數。
特別說明:java類中所有public和protected的實例方法都採用動態綁定機制,所有私有方法、靜態方法、構造器及初始化方法都是採用靜態綁定機制。而使用動態綁定機制的時候會用到方法表,靜態綁定時並不會用到。

3. java工作原理

Java工作原理
由四方面組成:

(1)Java編程語言
(2)Java類文件格式
(3)Java虛擬機
(4)Java應用程序介面
當編輯並運行一個Java程序時,需要同時涉及到這四種方面。使用文字編輯軟體(例如記事本、寫字板、UltraEdit等)或集成開發環境(Eclipse、MyEclipse等)在Java源文件中定義不同的類 ,通過調用類(這些類實現了Java API)中的方法來訪問資源系統,把源文件編譯生成一種二進制中間碼,存儲在class文件中,然後再通過運行與操作系統平台環境相對應的Java虛擬機來運行class文件,執行編譯產生的位元組碼,調用class文件中實現的方法來滿足程序的Java API調用 。

4. javac的編譯流程

先將你的JAVA原碼編譯成CLASS文件,再執行。因為JAVA是編譯性的語言,而不是解釋性語言。

5. 如何用javac 編譯多個目錄中的java文件

根據我個人的經驗,只要找到包含主函數的那個類進行編譯,如果在主函數內有導入其他用戶編寫的包,會自動進行編譯得到.class文件的。你可以試試看。

6. javac是什麼

javac是Java編譯器,負責將Java源代碼轉換成位元組碼文件。

javac 可以隱式編譯一些沒有在命令行中提及的源文件。用 -verbose 選項可跟蹤自動編譯。當編譯源文件時,編譯器常常需要它還沒有識別出的類型的有關信息。

javac的特點

javac具有簡單性、面向對象、分布性、解釋性、可靠、安全、平台無關、可移植性、高性能、多線程、動態性等特點。提供了異常處理機制,程序員可以把錯誤代碼放在一起,這樣可以簡化錯誤處理任務,便於恢復。不支持指針,杜絕了內存的非法訪問。

7. cmd中使用javac對整個包編譯怎麼辦對包裡面的某幾個java文件編譯怎麼辦

JAVAC 命令詳解

結構
javac [ options ] [ sourcefiles ] [ @files ]
參數可按任意次序排列。
options
命令行選項。
sourcefiles
一個或多個要編譯的源文件(例如 MyClass.java)。
@files
一個或多個對源文件進行列表的文件。
說明
javac
有兩種方法可將源代碼文件名傳遞給 javac:
?如果源文件數量少,在命令行上列出文件名即可。
?如果源文件數量多,則將源文件名列在一個文件中,名稱間用空格或回車行來進行分隔。然後在 javac 命令行中使用該列表文件名,文件名前冠以 @ 字元。
源代碼文件名稱必須含有 .java 後綴,類文件名稱必須含有 .class 後綴,源文件和類文件都必須有識別該類的根名。例如,名為 MyClass 的類將寫在名為 MyClass.java的源文件中,並被編譯為位元組碼類文件 MyClass.class。
內部類定義產生附加的類文件。這些類文件的名稱將內部類和外部類的名稱結合在一起,例如 MyClass$MyInnerClass.class。
應當將源文件安排在反映其包樹結構的目錄樹中。例如,如果將所有的源文件放在 /workspace 中,那麼 com.mysoft.mypack.MyClass 的代碼應該在 \workspace\com\mysoft\mypack\MyClass.java 中。
預設情況下,編譯器將每個類文件與其源文件放在同一目錄中。可用 -d 選項(請參閱後面的選項)指定其它目標目錄。
工具讀取用 Java 編程語言編寫的類和介面定義,並將它們編譯成位元組碼類文件。
查找類型
當編譯源文件時,編譯器常常需要它還沒有識別出的類型的有關信息。對於源文件中使用、擴展或實現的每個類或介面,編譯器都需要其類型信息。這包括在源文件中沒有明確提及、但通過繼承提供信息的類和介面。
例如,當擴展 java.applet.Applet 時還要用到 Applet 的祖先類:java.awt.Panel 、 java.awt.Container、 java.awt.Component 和 java.awt.Object。
當編譯器需要類型信息時,它將查找定義類型的源文件或類文件。編譯器先在自舉類及擴展類中查找,然後在用戶類路徑中查找。用戶類路徑通過兩種途徑來定義:通過設置 CLASSPATH 環境變數或使用 -classpath 命令行選項。(有關詳細資料,請參閱設置類路徑)。如果使用 -sourcepath 選項,則編譯器在 sourcepath 指定的路徑中查找源文件;否則,編譯器將在用戶類路徑中查找類文件和源文件。可用-bootclasspath 和 -extdirs 選項來指定不同的自舉類或擴展類;參閱下面的聯編選項。
成功的類型搜索可能生成類文件、源文件或兩者兼有。以下是 javac 對各種情形所進行的處理:
?搜索結果只生成類文件而沒有源文件: javac 使用類文件。
?搜索結果只生成源文件而沒有類文件: javac 編譯源文件並使用由此生成的類文件。
?搜索結果既生成源文件又生成類文件: 確定類文件是否過時。若類文件已過時,則 javac 重新編譯源文件並使用更新後的類文件。否則, javac 直接使用類文件。
預設情況下,只要類文件比源文件舊, javac 就認為它已過時。( -Xdepend 選項指定相對來說較慢但卻比較可靠的過程。)
javac
注意: javac 可以隱式編譯一些沒有在命令行中提及的源文件。用 -verbose 選項可跟蹤自動編譯。

文件列表
為縮短或簡化 javac 命令,可以指定一個或多個每行含有一個文件名的文件。在命令行中,採用 '@' 字元加上文件名的方法將它指定為文件列表。當 javac 遇到以 `@' 字元開頭的參數時,它對那個文件中所含文件名的操作跟對命令行中文件名的操作是一樣的。這使得 Windows 命令行長度不再受限制。
例如,可以在名為 sourcefiles 的文件中列出所有源文件的名稱。該文件可能形如:
MyClass1.java
MyClass2.java
MyClass3.java
然後可用下列命令運行編譯器:
C:> javac @sourcefiles
選項
編譯器有一批標准選項,目前的開發環境支持這些標准選項,將來的版本也將支持它。還有一批附加的非標准選項是目前的虛擬機實現所特有的,將來可能要有變化。非標准選項以 -X 打頭。
標准選項
-classpath 類路徑
設置用戶類路徑,它將覆蓋 CLASSPATH 環境變數中的用戶類路徑。若既未指定 CLASSPATH 又未指定 -classpath,則用戶類路徑由當前目錄構成。有關詳細信息,請參閱設置類路徑。
若未指定 -sourcepath 選項,則將在用戶類路徑中查找類文件和源文件。
-d 目錄
設置類文件的目標目錄。如果某個類是一個包的組成部分,則 javac 將把該類文件放入反映包名的子目錄中,必要時創建目錄。例如,如果指定 -d c:\myclasses 並且該類名叫 com.mypackage.MyClass,那麼類文件就叫作 c:\myclasses\com\mypackage\MyClass.class。
若未指定 -d 選項,則 javac 將把類文件放到與源文件相同的目錄中。
注意: -d 選項指定的目錄不會被自動添加到用戶類路徑中。
-deprecation
顯示每種不鼓勵使用的成員或類的使用或覆蓋的說明。沒有給出 -deprecation 選項的話, javac 將顯示這類源文件的名稱:這些源文件使用或覆蓋不鼓勵使用的成員或類。
-encoding
設置源文件編碼名稱,例如 EUCJIS/SJIS。若未指定 -encoding 選項,則使用平台預設的轉換器。
-g
生成所有的調試信息,包括局部變數。預設情況下,只生成行號和源文件信息。
-g:none
不生成任何調試信息。
-g:{關鍵字列表}
只生成某些類型的調試信息,這些類型由逗號分隔的關鍵字列表所指定。有效的關鍵字有:
source
源文件調試信息
lines
行號調試信息
vars
局部變數調試信息
-nowarn
禁用警告信息。
-O
優化代碼以縮短執行時間。使用 -O 選項可能使編譯速度下降、生成更大的類文件並使程序難以調試。
在 JDK 1.2 以前的版本中,javac 的 -g 選項和 -O 選項不能一起使用。在 JDK 1.2 中,可以將 -g 和 -O 選項結合起來,但可能會得到意想不到的結果,如丟失變數或重新定位代碼或丟失代碼。-O 選項不再自動打開 -depend 或關閉 -g 選項。同樣, -O 選項也不再允許進行跨類內嵌。
-sourcepath 源路徑
指定用以查找類或介面定義的源代碼路徑。與用戶類路徑一樣,源路徑項用分號 (;) 進行分隔,它們可以是目錄、JAR 歸檔文件或 ZIP 歸檔文件。如果使用包,那麼目錄或歸檔文件中的本地路徑名必須反映包名。
注意:通過類路徑查找的類,如果找到了其源文件,則可能會自動被重新編譯。
-verbose
冗長輸出。它包括了每個所載入的類和每個所編譯的源文件的有關信息。
聯編選項
預設情況下,類是根據與 javac 一起發行的 JDK 自舉類和擴展類來編譯。但 javac 也支持聯編,在聯編中,類是根據其它 Java平台實現的自舉類和擴展類來進行編譯的。聯編時, -bootclasspath 和 -extdirs 的使用很重要;請參閱下面的聯編程序示例。
-target 版本
生成將在指定版本的虛擬機上運行的類文件。預設情況下生成與 1.1 和 1.2 版本的虛擬機都兼容的類文件。JDK 1.2 中的 javac 所支持的版本有:
1.1
保證所產生的類文件與 1.1 和 1.2 版的虛擬機兼容。這是預設狀態。
1.2
生成的類文件可在 1.2 版的虛擬機上運行,但不能在 1.1 版的虛擬機上運行。
-bootclasspath 自舉類路徑
根據指定的自舉類集進行聯編。和用戶類路徑一樣,自舉類路徑項用分號 (;) 進行分隔,它們可以是目錄、JAR 歸檔文件或 ZIP 歸檔文件。
-extdirs 目錄
根據指定的擴展目錄進行聯編。目錄是以分號分隔的目錄列表。在指定目錄的每個 JAR 歸檔文件中查找類文件。
非標准選項
-X
顯示非標准選項的有關信息並退出。
-Xdepend
遞歸地搜索所有可獲得的類,以尋找要重編譯的最新源文件。該選項將更可靠地查找需要編譯的類,但會使編譯進程的速度大為減慢。
-Xstdout
將編譯器信息送到System.out 中。預設情況下,編譯器信息送到 System.err 中。
-Xverbosepath
說明如何搜索路徑和標准擴展以查找源文件和類文件。
-J選項
將選項傳給 javac 調用的 java 啟動器。例如, -J-Xms48m 將啟動內存設為 48 兆位元組。雖然它不以 -X 開頭,但它並不是 javac 的『標准選項』。用 -J 將選項傳給執行用 Java 編寫的應用程序的虛擬機是一種公共約定。
注意: CLASSPATH 、 -classpath 、 -bootclasspath 和 -extdirs 並 不 指定用於運行 javac 的類。如此濫用編譯器的實現通常沒有任何意義而且總是很危險的。如果確實需要這樣做,可用 -J 選項將選項傳給基本的 java 啟動器。
程序示例
編譯簡單程序
一個源文件 Hello.java ,它定義了一個名叫 greetings.Hello 的類。greetings 目錄是源文件和類文件兩者的包目錄,且它不是當前目錄。這讓我們可以使用預設的用戶類路徑。它也使我們沒必要用 -d 選項指定單獨的目標目錄。
C:> dir
greetings/
C:> dir greetings
Hello.java
C:> cat greetings\Hello.java
package greetings;
public class Hello {
public static void main(String[] args) {
for (int i=0; i < args.length; i++) {
System.out.println("Hello " + args[i]);
}
}
}
C:> javac greetings\Hello.java
C:> dir greetings
Hello.class Hello.java
C:> java greetings.Hello World Universe Everyone
Hello World
Hello Universe
Hello Everyone
編譯多個源文件
該示例編譯 greetings 包中的所有源文件。
C:> dir
greetings\
C:> dir greetings
Aloha.java GutenTag.java Hello.java Hi.java
C:> javac greetings\*.java
C:> dir greetings
Aloha.class GutenTag.class Hello.class Hi.class
Aloha.java GutenTag.java Hello.java Hi.java
指定用戶類路徑
對前面示例中的某個源文件進行更改後,重新編譯它:
C:> cd
\examples
C:> javac greetings\Hi.java
由於 greetings.Hi 引用了 greetings 包中其它的類,編譯器需要找到這些其它的類。上面的示例能運行是因為預設的用戶類路徑剛好是含有包目錄的目錄。但是,假設我們想重新編譯該文件並且不關心我們在哪個目錄中的話, 我們需要將 \examples 添加到用戶類路徑中。可以通過設置 CLASSPATH 達到此目的,但這里我們將使用 -classpath 選項來完成。
C:>javac -classpath \examples \examples\greetings\Hi.java
如果再次將 greetings.Hi 改為使用標題實用程序,該實用程序也需要通過用戶類路徑來進行訪問:
C:>javac -classpath \examples:\lib\Banners.jar \
\examples\greetings\Hi.java
要執行 greetings 中的類,需要訪問 greetings 和它所使用的類。
C:>java -classpath \examples:\lib\Banners.jar greetings.Hi
將源文件和類文件分開
將源文件和類文件置於不同的目錄下經常是很有意義的,特別是在大型的項目中。我們用 -d 選項來指明單獨的類文件目標位置。由於源文件不在用戶類路徑中,所以用 -sourcepath 選項來協助編譯器查找它們。
C:> dir
classes\ lib\ src\
C:> dir src
farewells\
C:> dir src\farewells
Base.java GoodBye.java
C:> dir lib
Banners.jar
C:> dir classes
C:> javac -sourcepath src -classpath classes:lib\Banners.jar \
src\farewells\GoodBye.java -d classes
C:> dir classes
farewells\
C:> dir classes\farewells
Base.class GoodBye.class
注意:編譯器也編譯了 src\farewells\Base.java,雖然我們沒有在命令行中指定它。要跟蹤自動編譯,可使用 -verbose 選項。
聯編程序示例
這里我們用 JDK 1.2 的 javac 來編譯將在 1.1 版的虛擬機上運行的代碼。
C:> javac -target 1.1 -bootclasspath jdk1.1.7\lib\classes.zip \
-extdirs "" OldCode.java
-target 1.1
JDK 1.2 javac 在預設狀態下也將根據 1.2 版的自舉類來進行編譯,因此我們需要告訴 javac 讓它根據 JDK 1.1 自舉類來進行編譯。可用 -bootclasspath 和 -extdirs 選項來達到此目的。不這樣做的話,可能會使編譯器根據 1.2 版的 API 來進行編譯。由於 1.1 版的虛擬機上可能沒有該 1.2 版的 API,因此運行時將出錯。
選項可確保生成的類文件與 1.1 版的虛擬機兼容。在 JDK1.2 中, 預設情況下 javac 編譯生成的文件是與 1.1 版的虛擬機兼容的,因此並非嚴格地需要該選項。然而,由於別的編譯器可能採用其它的預設設置,所以提供這一選項將不失為是個好習慣。

8. 如何用javac編譯這樣的程序 急急急急急急!

假如你的兩個文件在c盤src目錄,按以下步驟操作:
1、在c盤建立classes目錄,用於存放將來生成的類文件。
2、啟動命令行,輸入「cd /d c:」,回車進入文件存在的目錄。(cd中加/d是為了能跳到不同分區,如果當前目錄就在c盤則不必輸入/d)。
3、輸入「javac -d .\classes .\src\*.java」,表示將當前目錄下的src目錄中的所有java文件編譯到當前目錄下的classes目錄。編譯器會自動決定編譯的先後順序。如果輸入「javac -d . *.java」,表示將當前目錄中的java文件編譯到當前目錄下,注意「.」左右有空格,「.」表示當前目錄。
4、輸入「java p1.Demo2」即可運行包中的class文件。
一般來說現在開發java程序都需要藉助便捷的開發工具,但命令行更有助於初學者掌握原理,祝順利。

9. 如何用javac 和java 編譯運行整個Java工程

1、將編譯好的比如Demo.java文件放到某個盤下(比如D盤)

2、進入控制台(window+R鍵---->輸入cmd)

以上完成整個在控制台運行java程序的流程。

10. 如何使用命令行編譯運行java程序

要想編譯和運行java文件,很簡單,只需要兩個命令:
(1)javac:作用:編譯java文件;使用方法: javac Hello.java ,如果不出錯的話,在與Hello.java 同一目錄下會生成一個Hello.class文件,這個class文件是操作系統能夠使用和運行的文件。
(2)java: 作用:運行.class文件;使用方法:java Hello,如果不出錯的話,會執行Hello.class文件。注意:這里的Hello後面不需要擴展名。
下面舉例說明:
假設我有一個Hello.java文件放在D:\javatest 文件夾下。
打開cmd命令窗口,會出現C:\user\lenovo 這里出現的是系統用戶名,這里我們需要將路徑轉移到java文件所在目錄。
緊接著輸入 D:回車,會出現一下界面:
這時候我們需要定位到java文件所在目錄(這里是javatest目錄),接著輸入 cd javatest 回車。
此時進入到D:\javatest目錄中,此時的Hello.java文件就在這里
這時候我們就可以用javac命令編譯啦,輸入javac Hello.java回車
這里如果沒有任何提示表示編譯成功,此時打開d:\javatest文件夾你會發現此時多了一個名為Hello.class的文件,這就是操作系統能夠運行的文件。
接著輸入 java Hello回車,你就會看到文件被運行的結果。
這里有幾個要注意的問題

第一:Hello.java中的內容是一個類,這個類的名字與.java文件名字必須完全一致。如果不一致將出錯。這里當你通過eclipse創建一個類文件的時候你就會理解的更清楚了,這里不贅述。
第二:javac 和 java 命令的使用方法要注意,格式。
第三:要使用這兩命令,必須配置好環境變數。

熱點內容
sqlsever外鍵 發布:2025-07-05 01:41:04 瀏覽:737
鳳凰衛士加密軟體 發布:2025-07-05 01:39:36 瀏覽:635
桌面軟體編程 發布:2025-07-05 01:32:17 瀏覽:992
編譯後的程序叫啥擴展名是啥 發布:2025-07-05 01:18:29 瀏覽:164
強轉編程 發布:2025-07-05 01:09:50 瀏覽:886
vsgcc編譯器 發布:2025-07-05 00:48:03 瀏覽:903
長城h6第三代都有哪些配置 發布:2025-07-05 00:39:25 瀏覽:397
unix系統編程手冊 發布:2025-07-05 00:32:17 瀏覽:287
重慶壓縮機廠 發布:2025-07-05 00:14:53 瀏覽:758
php55兼容 發布:2025-07-05 00:14:52 瀏覽:546