java運行過程
程序員所編寫的是以.java為後綴的文件,此文件操作系統不能正確識別,因此,首先要經過編譯,生成所謂的位元組碼文件(.class),而位元組碼文件需要JVM來提供運行環境的支持。
JVM是一個軟體,安裝在操作系統中,是建立在操作系統之上的,為位元組碼文件提供運行環境,效果如圖 – 1 所示。
圖- 1
Java官方提供了針對不同平台的JVM軟體,即:不同平台的JVM是不同的。但這些JVM遵循著相同的標准,即:只要是標準的.class文件,就可以在不同的JVM上運行,而且運行的效果相同。這樣,就實現了所謂的「一次編程到處使用」。效果如圖– 2所示:
圖- 2
Java程序遵循著先編譯、後執行的原則。首先,通過javac命令將JAVA源程序(.java文件)編譯為JAVA位元組碼(.class文件),而後,通過java命令啟動JVM,由JVM來載入.class文件並運行.class文件。效果如圖 – 3所示:
圖- 3
Ⅱ 簡述Java程序從編寫到運行的基本步驟,並說明Java的基本工作原理
Java編譯原理:
Java 虛擬機(JVM)是可運行Java 代碼的假想計算機。只要根據JVM規格描述將解釋器移植到特定的計算機上,就能保證經過編譯的任何Java代碼能夠在該系統上運行。
一.Java源文件的編譯、下載 、解釋和執行
Java應用程序的開發周期包括編譯、下載 、解釋和執行幾個部分。Java編譯程序將Java源程序翻譯為JVM可執行代碼?位元組碼。這一編譯過程同C/C++ 的編譯有些不同。當C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬體平台運行而產生的。因此,在編譯過程中,編譯程序通過查表將所有對符號的引用轉換為特定的內存偏移量,以保證程序運行。Java編譯器卻不將對變數和方法的引用編譯為數值引用,也不確定程序執行過程中的內存布局,而是將這些符號引用信息保留在位元組碼中,由解釋器在運行過程中創立內存布局,然後再通過查表來確定一個方法所在的地址。這樣就有效的保證了Java的可移植性和安全 性。
運行JVM位元組碼的工作是由解釋器來完成的。解釋執行過程分三部進行:代碼的裝入、代碼的校驗和代碼的執行。裝入代碼的工作由"類裝載器"(class loader)完成。類裝載器負責裝入運行一個程序需要的所有代碼,這也包括程序代碼中的類所繼承的類和被其調用的類。當類裝載器裝入一個類時,該類被放在自己的名字空間中。除了通過符號引用自己名字空間以外的類,類之間沒有其他辦法可以影響其他類。在本台計算機上的所有類都在同一地址空間內,而所有從外部引進的類,都有一個自己獨立的名字空間。這使得本地類通過共享相同的名字空間獲得較高的運行效率,同時又保證它們與從外部引進的類不會相互影響。當裝入了運行程序需要的所有類後,解釋器便可確定整個可執行程序的內存布局。解釋器為符號引用同特定的地址空間建立對應關系及查詢表。通過在這一階段確定代碼的內存布局,Java很好地解決了由超類改變而使子類崩潰的問題,同時也防止了代碼對地址的非法訪問。
隨後,被裝入的代碼由位元組碼校驗器進行檢查。校驗器可發現操作數棧溢出,非法數據類型轉化等多種錯誤。通過校驗後,代碼便開始執行了。
Java位元組碼的執行有兩種方式:
1.即時編譯方式:解釋器先將位元組碼編譯成機器碼,然後再執行該機器碼。
2.解釋執行方式:解釋器通過每次解釋並執行一小段代碼來完成Java位元組碼程 序的所有操作。
通常採用的是第二種方法。由於JVM規格描述具有足夠的靈活性,這使得將位元組碼翻譯為機器代碼的工作
具有較高的效率。對於那些對運行速度要求較高的應用程序,解釋器可將Java位元組碼即時編譯為機器碼,從而很好地保證了Java代碼的可移植性和高性能。
Ⅲ 簡述java應用程序的運行過程
java的運行在自身的虛擬機上(jvm),jvm通過loader(類載入器)載入.class文件(java的指令文件),jvm把class文件最終翻譯成系統指令執行.
Ⅳ 簡述java語言的執行過程
先編寫好.java的文件,這個成為源文件,在使用javac編譯源文件,得到.class文件(javac
Test.java),最後執行java命令得到結果(java
Test)。
Ⅳ 簡述JAVA程序運行過程
1,如果java文件沒有package,就默認給文件加上"無名"package;
2,默認導入java.lang包,所以我們的java程序中可以使用Sting,Math,Integer等類,包括一些異常類;
3,如果生成的類沒有父類,則為這個類隱式加上父類:Object;因此,包括Object中的許多方法可以使用;
4,欄位的初始化;
二,我們所看的到的:
既然看的到,就先看程序運行結果:
public class JRun1 {
public JRun1() {
System.out.println(" 構造函數");
}
static
{
System.out.println("static{}");
}
{
System.out.println("{}");
}
public static void main(String[] args) {
System.out.println("main()");
}
}
運行結果:
static{}
main()
顯然,程序運行時,先運行:
static
{
System.out.println("static{}");
}
再調用main();
如果我們在類中建立一個對象:
public class JRun1 {
public JRun1() {
System.out.println(" 構造函數");
}
static
{
System.out.println("static{}");
}
{
System.out.println("{}");
}
public static void main(String[] args) {
System.out.println("main()");
new JRun1();
}
}
運行結果:
static{}
main()
{}
構造函數
從而,我們得出:
建立一個非主類對象,順序為:靜態初始化塊static{}-->初始化塊{}-->構造函數constructor;
那麼,牽涉到繼承,運行流程又如何?
看程序:
class JRun1Father{
JRun1Father(){
System.out.println("父類構造函數");
}
static{
System.out.println("父類靜態初始化塊");
}
{
System.out.println("父類初始化塊");
}
}
public class JRun1 extends JRun1Father{
public JRun1() {
System.out.println("子類構造函數");
}
static
{
System.out.println("子類靜態初始化塊");
}
{
System.out.println("子類初始化塊");
}
public static void main(String[] args) {
//System.out.println("主方法)");
new JRun1();
}
}
運行結果:
父類靜態初始化塊
子類靜態初始化塊
父類初始化塊
父類構造函數
子類初始化塊
子類構造函數
所以,牽涉到父類:父靜態-->子靜態-->父初始化及構造-->子初始化及構造;
注意:初始化塊和構造是接連運行的,不會父類子類交替.
Ⅵ 開發與運行Java程序需要經過的三個主要步驟是
創建Java源程序
Java源程序一般用java作為擴展名,是一個文本文
件,用Java語言寫成,可以用任何文本編輯器創建
與編輯;
編譯源程序
Java編譯器,「javac」,讀取你的Java源程序並翻譯
成Java虛擬機能夠明白的指令集合,且以位元組碼的
形式保存在文件中。通常,位元組碼文件以class作為
擴展名;
運行class(位元組碼)文件
Java解釋器讀取位元組碼,取出指令並且翻譯成計算
機能執行的代碼,完成運行過程;
Ⅶ java工作原理
Java工作原理
由四方面組成:
(1)Java編程語言
(2)Java類文件格式
(3)Java虛擬機
(4)Java應用程序介面
當編輯並運行一個Java程序時,需要同時涉及到這四種方面。使用文字編輯軟體(例如記事本、寫字板、UltraEdit等)或集成開發環境(Eclipse、MyEclipse等)在Java源文件中定義不同的類 ,通過調用類(這些類實現了Java API)中的方法來訪問資源系統,把源文件編譯生成一種二進制中間碼,存儲在class文件中,然後再通過運行與操作系統平台環境相對應的Java虛擬機來運行class文件,執行編譯產生的位元組碼,調用class文件中實現的方法來滿足程序的Java API調用 。
Ⅷ 簡述JAVA程序的編輯編譯和運行過程
第一步(編譯): 創建完源文件之後,程序會先被編譯為.class文件。Java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器就會先編譯這個被依賴的類,然後引用,否則直接引用,這個有點象make。
如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報「cant find symbol」的錯誤。
第二步(運行):java類運行的過程大概可分為兩個過程:1、類的載入 2、類的執行。需要說明的是:JVM主要在程序第一次主動使用類的時候,才會去載入該類。也就是說,JVM並不是在一開始就把一個程序就所有的類都載入到內存中,而是到不得不用的時候才把它載入進來,而且只載入一次。
特別說明:java類中所有public和protected的實例方法都採用動態綁定機制,所有私有方法、靜態方法、構造器及初始化方法<clinit>都是採用靜態綁定機制。而使用動態綁定機制的時候會用到方法表,靜態綁定時並不會用到。
(8)java運行過程擴展閱讀:
Java整個編譯以及運行的過程相當繁瑣,本文通過一個簡單的程序來簡單的說明整個流程。
Java代碼編譯:是由Java源碼編譯器來完成;
Java位元組碼的執行:是由JVM執行引擎來完成
Java程序從源文件創建到程序運行要經過兩大步驟:
1、源文件由編譯器編譯成位元組碼(ByteCode)
2、位元組碼由java虛擬機解釋運行。因為java程序既要編譯同時也要經過JVM的解釋運行,所以說Java被稱為半解釋語言( "semi-interpreted" language)。
Ⅸ 開發和運行java程序需要經過哪些主要步驟和過程
首先,你的電腦上要裝運行環境,也就是所謂得JKD,安裝後,配置好環境變數,然後進行下面步驟。 1.來個最簡單的,打開記事本,編寫Java程序,編寫好後,保存,文件名後綴必須為:.java.比如:Hello.java 2.然後點擊開始-----》運行-------》輸入CMD----》到你保存的這個問題的目錄下(也就是進入了DOS環境)。然後輸入:javac Hello.java,開始編譯。 3.等編譯通過後,再輸入java Hello,程序運行。如果有報錯,修改出問題處,再次進行步驟2. Java大小寫敏感,注意大小寫。