Java中引入了虛擬機的概念,即在機器和編譯程序之間加入了一層抽象的虛擬的機器。這台虛擬的機器在任何平台上都提供給編譯程序一個的共同的介面。編譯程序只需要面向虛擬機,生成虛擬機能夠理解的代碼,然後由解釋器來將虛擬機代碼轉換為特定系統的機器碼執行。在Java中,這種供虛擬機理解的代碼叫做位元組碼(ByteCode),它不面向任何特定的處理器,只面向虛擬機。每一種平台的解釋器是不同的,但是實現的虛擬機是相同的。Java源程序經過編譯器編譯後變成位元組碼,位元組碼由虛擬機解釋執行,虛擬機將每一條要執行的位元組碼送給解釋器,解釋器將其翻譯成特定機器上的機器碼,然後在特定的機器上運行。
② java程序運行的五個步驟
1、Java程序從源文件創建到程序運行要經過兩大步驟:1、源文件由編譯器編譯成位元組碼(ByteCode) 2、位元組碼由java虛擬機解釋運行。因為java程序既要編譯同時也要經過JVM的解釋運行,所以說Java被稱為半解釋語言("semi-interpreted" language)。
第一步(編譯): 創建完源文件之後,程序會先被編譯為.class文件。Java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器就會先編譯這個被依賴的類,然後引用,否則直接引用,這個有點像make。如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報「cant find symbol」的錯誤。
編譯後的位元組碼文件格式主要分為兩部分:常量池和方法位元組碼。常量池記錄的是代碼出現過的所有token(類名,成員變數名等等)以及符號引用(方法引用,成員變數引用等等);方法位元組碼放的是類中各個方法的位元組碼。
第二步(運行):java類運行的過程大概可分為兩個過程:1、類的載入 2、類的執行。需要說明的是:JVM主要在程序第一次主動使用類的時候,才會去載入該類。也就是說,JVM並不是在一開始就把一個程序就所有的類都載入到內存中,而是到不得不用的時候才把它載入進來,而且只載入一次。
2、下面是程序運行的詳細步驟:
在編譯好java程序得到Main.class文件後,在命令行上敲java Main。系統就會啟動一個jvm進程,jvm進程從classpath路徑中找到一個名為Main.class的二進制文件,將Main的類信息載入到運行時數據區的方法區內,這個過程叫做Main類的載入。
然後JVM找到Main的主函數入口,開始執行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編譯和運行。
首先cd到你java文件存放的目錄,比如你的java文件的名稱為helloworld.java,在cmd中輸入javac
helloworld.java
敲擊回車,這個命令會將你的java文件編譯成class文件,然後在cmd框中輸入java
helloworld敲擊回車就能運行你的java文件輸出結果
④ java語言的編譯過程與一般編程語言的編譯過程有何不同
Java代碼編譯和執行的整個過程包含了以下三個重要的機制:
Java源碼編譯機制
類載入機制
類執行機制
Java源碼編譯機制
Java源碼編譯由以下三個過程組成:
分析和輸入到符號表
註解處理
語義分析和生成class文件
JVM的類載入是通過ClassLoader及其子類來完成的
JVM是基於棧的體系結構來執行class位元組碼的。線程創建後,都會產生程序計數器(PC)和棧(Stack),程序計數器存放下一條要執行的指令在方
法內的偏移量,棧中存放一個個棧幀,每個棧幀對應著每個方法的每次調用,而棧幀又是有局部變數區和操作數棧兩部分組成,局部變數區用於存放方法中的局部變
量和參數,操作數棧中用於存放方法執行過程中產生的中間結果
⑤ 如何在CMD編譯和運行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 命令的使用方法要注意,格式。
第三:要使用這兩命令,必須配置好環境變數。
⑥ 簡述JAVA程序的編輯編譯和運行過程
第一步(編譯): 創建完源文件之後,程序會先被編譯為.class文件。Java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器就會先編譯這個被依賴的類,然後引用,否則直接引用,這個有點象make。
如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報「cant find symbol」的錯誤。
第二步(運行):java類運行的過程大概可分為兩個過程:1、類的載入 2、類的執行。需要說明的是:JVM主要在程序第一次主動使用類的時候,才會去載入該類。也就是說,JVM並不是在一開始就把一個程序就所有的類都載入到內存中,而是到不得不用的時候才把它載入進來,而且只載入一次。
特別說明:java類中所有public和protected的實例方法都採用動態綁定機制,所有私有方法、靜態方法、構造器及初始化方法<clinit>都是採用靜態綁定機制。而使用動態綁定機制的時候會用到方法表,靜態綁定時並不會用到。
(6)java中編譯與載入擴展閱讀:
Java整個編譯以及運行的過程相當繁瑣,本文通過一個簡單的程序來簡單的說明整個流程。
Java代碼編譯:是由Java源碼編譯器來完成;
Java位元組碼的執行:是由JVM執行引擎來完成
Java程序從源文件創建到程序運行要經過兩大步驟:
1、源文件由編譯器編譯成位元組碼(ByteCode)
2、位元組碼由java虛擬機解釋運行。因為java程序既要編譯同時也要經過JVM的解釋運行,所以說Java被稱為半解釋語言( "semi-interpreted" language)。
⑦ java中的全局變數和靜態變數是在編譯時分配內存還是在載入時分配內存
全局扮閉戚變數是在創建對象的時候分配內存的 創建對象過程為
分配空間。
遞歸的創建父類對象。
初始化成員變數。
調用構造方法創建一個對象。
靜態變數是在類載入的時候分配空間的,靜態變數和對象沒有關系 是在JVM第一次讀到一個類的時候載入信息的過程中分配空間的 載入過程為
1 .載入父類(如果父類已經載入過,則不在載入)。
2.初始化靜態屬性 。
3 .按順序的初始化靜態代碼塊 初始化的前提就是分配空間 。
而且靜態變數在以後的創建對象的時候不在初始化 所以一般用靜態來保存共享信息
⑧ 編譯java程序的命令是什麼,運行java應用程序的命令是什麼
當前默認目錄為C盤Users文件夾下的Administrator文件夾。一般而言,我們習慣改變當前目錄。由於windows有磁碟分區,若要跳到其他磁碟,例如E盤,有幾種方法:
1、輸入命令: pushd 路徑(此命令可將當前目錄設為所希望的任一個已存在的路徑)
2、輸入命令: e: 轉移到e盤,然後再輸入 cd 轉移到所希望的已知路徑。
希望在windows命令行下使用javac、java、javap等命令,那麼當前電腦必須安裝了jdk,並且將jdk的bin目錄添加到環境變數path下了。
拓展資料:
Java是一種編程語言,被特意設計用於互聯網的分布式環境。Java具有類似於C++語言的「形式和感覺」,但它要比C++語言更易於使用,而且在編程時徹底採用了一種「以對象為導向」的方式。
使用Java編寫的應用程序,既可以在一台單獨的電腦上運行,也可以被分布在一個網路的伺服器端和客戶端運行。另外,Java還可以被用來編寫容量很小的應用程序模塊或者applet,做為網頁的一部分使用。applet可使網頁使用者和網頁之間進行互動式操作。
⑨ 如何編譯java程序
三種方法:
1.在IDE中,如eclipse中寫的Java程序,在點擊保存後eclipse就會調用javac編譯程序編譯,編譯文件在當前項目的bin目錄下。
2.作為一個獨立的文件且沒有定義Java環境變數,需要在cmd窗口中切換到java bin目錄下執行Javac程序,執行格式為javac 空格 Java源文件;如 javac C://hello.java;
3.作為一個獨立的文件且定義了Java環境變數,打開cmd窗口,可以在任意目錄輸入javac java源文件,如javac D://hi.java。
Java也是一種高級語言,要讓計算機執行你撰寫的Java程序,也得通過編譯程序的編譯。但是Java編譯程序並不直接將Java源代碼編譯為相依於計算機平台的0、1序列,而是將其編譯為位元組碼。
Java源代碼的擴展名為.java,經過編譯程序編譯之後生成擴展名為.class的位元組碼。