『壹』 java程序不能執行
Java程序的運行過程(執行流程)分析
1、編寫:是指在 Java 開發環境中進行程序代碼的輸入,最終形成後綴名為 .java 的 Java 源文件。
2、編譯:是指使用 Java 編譯器對源文件進行錯誤排査的過程,編譯後將生成後綴名為 .class 的位元組碼文件,不像C語言那樣生成可執行文件。
3、運行:是指使用 Java 解釋器將位元組碼文件翻譯成機器代碼,執行並顯示結果。
位元組碼文件是一種和任何具體機器環境及操作系統環境無關的中間代碼。它是一種二進制文件,是 Java 源文件由 Java 編譯器編譯後生成的目標代碼文件。編程人員和計算機都無法直接讀懂位元組碼文件,它必須由專用的 Java 解釋器來解釋執行,因此 Java 是一種在編譯基礎上進行解釋運行的語言。
Java 解釋器負責將位元組碼文件翻譯成具體硬體環境和操作系統平台下的機器代碼,以便執行。因此 Java 程序不能直接運行在現有的操作系統平台上,它必須運行在被稱為 Java 虛擬機的軟體平台之上。
Java 虛擬機(JVM)是運行 Java 程序的軟體環境,Java 解釋器是 Java 虛擬機的一部分。在運行 Java 程序時,首先會啟動 JVM,然後由它來負責解釋執行 Java 的位元組碼程序,並且 Java 位元組碼程序只能運行於 JVM 之上。這樣利用 JVM 就可以把 Java 位元組碼程序和具體的硬體平台以及操作系統環境分隔開來,只要在不同的計算機上安裝了針對特定平台的 JVM,Java 程序就可以運行,而不用考慮當前具體的硬體平台及操作系統環境,也不用考慮位元組碼文件是在何種平台上生成的。
JVM 把這種不同軟、硬體平台的具體差別隱藏起來,從而實現了真正的二進制代碼級的跨平台移植。JVM 是 Java 平台架構的基礎,Java 的跨平台特性正是通過在 JVM 中運行 Java 程序實現的。Java 的這種運行機制可以通過下圖來說明。
Java 語言這種「一次編寫,到處運行」的方式,有效地解決了目前大多數高級程序設計語言需要針對不同系統來編譯產生不同機器代碼的問題,即硬體環境和操作平台的異構問題,大大降低了程序開發、維護和管理的開銷。
提示:Java 程序通過 JVM 可以實現跨平台特性,但 JVM 是不跨平台的。也就是說,不同操作系統之上的 JVM 是不同的,Windows 平台之上的 JVM 不能用在 Linux 平台,反之亦然。
『貳』 在Java中,負責對位元組代碼解釋執行的是什麼
在Java中,負責對位元組代碼解釋執行的是虛擬機,虛擬機將得到的位元組代碼進行編碼運行
『叄』 JAVA到底是什麼 怎麼用 用最通俗的話解釋
Java是一種高級編程語言。用高級語言編寫的程序不能直接在任何計算機上運行。首先,需要將其翻譯成特定的機器語言。javac編譯器做這件事情,把Java程序(含有的.java文件源代碼)轉換成機器代碼(稱為位元組碼或.class文件)。
Java虛擬機(JVM)是運行在計算機中的虛擬機,而JVM的機器語言是位元組碼。
JVM的主要功能是執行編譯器生成的位元組碼。每個操作系統具有不同的JVM,但是在執行所有位元組代碼後,它們在所有操作系統上產生的輸出都是相同的。這意味著Windows上生成的位元組碼可以在Mac OS上運行,反之亦然。這就是為什麼我們將Java稱為平台獨立語言。
有考慮學習Java的同學,這邊我整理了一篇關於Java系統學習的全套資料:
網頁鏈接
希望會給你帶來幫助!
『肆』 JDK下解釋執行JAVA的程序是
首先通過javac Xxx.java來編譯;
然後使用java Xxx來運行.
注意,編譯的時候是有後綴名".java"的,而運行的時候是不包括後綴名".class".
『伍』 為什麼說java程序是邊解釋邊執行的
java應用程序的開發周期包括編譯、下載、解釋和執行幾個部分。java編譯程序將java源程序翻譯為jvm可執行代碼--位元組碼。這一編譯過程同c/c++的編譯有些不同。當c編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬體平台運行而產生的。因此,在編譯過程中,編譯程序通過查表將所有對符號的引用轉換為特定的內存偏移量,以保證程序運行。java編譯器卻不將對變數和方法的引用編譯為數值引用,也不確定程序執行過程中的內存布局,而是將這些符號引用信息保留在位元組碼中,由解釋器在運行過程中創立內存布局,然後再通過查表來確定一個方法所在的地址。這樣就有效的保證了java的可移植性和安全性。運行jvm位元組碼的工作是由解釋器(java命令)來完成的。解釋執行過程分三部進行:代碼的裝入、代碼的校驗和代碼的執行。裝入代碼的工作由"類裝載器"(classloader)完成。類裝載器負責裝入運行一個程序需要的所有代碼,這也包括程序代碼中的類所繼承的類和被其調用的類。當類裝載器裝入一個類時,該類被放在自己的名字空間中。除了通過符號引用自己名字空間以外的類,類之間沒有其他辦法可以影響其他類。在本台計算機上的所有類都在同一地址空間內,而所有從外部引進的類,都有一個自己獨立的名字空間。這使得本地類通過共享相同的名字空間獲得較高的運行效率,同時又保證它們與從外部引進的類不會相互影響。當裝入了運行程序需要的所有類後,解釋器便可確定整個可執行程序的內存布局。解釋器為符號引用同特定的地址空間建立對應關系及查詢表。通過在這一階段確定代碼的內存布局,java很好地解決了由超類改變而使子類崩潰的問題,同時也防止了代碼對地址的非法訪問。隨後,被裝入的代碼由位元組碼校驗器進行檢查。校驗器可發現操作數棧溢出,非法數據類型轉化等多種錯誤。通過校驗後,代碼便開始執行了。java位元組碼的執行有兩種方式:1.即時編譯方式:解釋器先將位元組碼編譯成機器碼,然後再執行該機器碼。2.解釋執行方式:解釋器通過每次解釋並執行一小段代碼來完成java位元組碼程序的所有操作。通常採用的是第二種方法。由於jvm規格描述具有足夠的靈活性,這使得將位元組碼翻譯為機器代碼的工作具有較高的效率。對於那些對運行速度要求較高的應用程序,解釋器可將java位元組碼即時編譯為機器碼,從而很好地保證了java代碼的可移植性和高性能。java宣稱的一處編寫隨處運行就是由jvm來完成.在sun的網站上你可以下載到基於各種cpu和各種操作系統的jdk和jre的下載版本,只要尋找到合適你使用的版本,以前你所編寫的class文件到其他的機器上可以直接運行JAVA,不需要再編譯.其實j2se是一種規范,這種規范約定了其跨平台執行的所需要關注很多實現,基於該規范開發人員可以任意編寫自己的java代碼而不需要關心這個程序可能在其他的機器和cpu上無法很好運行問題.其實你也可以看到ibm和weblogic都有基於j2se規范的自己實現的java虛擬機.而且sun所宣稱的不需要編譯而可以直接用class文件在各個jvm上直接運行並不精確,博格曾經遇到過用sunjre開發的class文件在ibmjre上有一個自動轉換的過程,然後這個類可以很好的工作了,幸好這種情況是自動完成,否則我們又要陷入類似於各種cc++的版本編譯器兼容性問題中.以下下摘錄了幾個主要的概念:jvmjavavirtualmachine(java虛擬機),它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。java虛擬機有自己完善的硬體架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。jvm屏蔽了與具體操作系統平台相關的信息,使得java程序只需生成在java虛擬機上運行的目標代碼(位元組碼),就可以在多種平台上不加修改地運行。java虛擬機在執行位元組碼時,實際上最終還是把位元組碼解釋成具體平台上的機器指令執行。jrejavaruntimeenvironment(java運行環境),運行java程序所必須的環境的集合,包含jvm標准實現及java核心類庫。,和jdk以及j2se等同。jdkjavadevelopmentkit(java開發工具包):包括運行環境、編譯工具及其它工具、源代碼等,基本上和j2se等同。j2mejava2microedition(java2精簡版)api規格基於j2se,但是被修改為可以適合某種產品的單一要求。j2me使java程序可以很方便的應用於電話卡、尋呼機等小型設備,它包括兩種類型的組件,即配置(configuration)和描述(profile)。j2eejava2enterpriseedition(java2企業版),使用java進行企業開發的一套擴展標准,必須基於j2se,提供一個基於組件設計、開發、集合、展開企業應用的途徑。j2ee平台提供了多層、分布式的應用模型,重新利用組件的能力,統一安全的模式以及靈活的處理控制能力。j2ee包括ejb,jta,jdbc,jca,jmx,jndi,jms,javamail,servlet,jsp等規范。j2sejava2standardedition(java2標准版),用來開發java程序的基礎,包括編譯器、小工具、運行環境,sun發布的標准版本中還包括核心類庫的所有源代碼。
『陸』 對java平台的理解,java是解釋執行嗎
.java不經過編譯就無法執行,可以說Java是編譯型的。但是java代碼編譯後不能直接運行,它是解釋運行在JVM上的,所以也可以說是解釋型的。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程序設計語言是什麼意思
Java是由SunMicrosystems公司於1995年推出的一門面向對象程序設計語言。2010年Oracle公司收購SunMicrosystems,之後由Oracle公司負責Java的維護和版本升級。
其實,Java還是一個平台。Java平台由Java虛擬機(JavaVirtualMachine,JVM)和Java應用編程介面(,API)構成。
Java應用編程介面為此提供了一個獨立於操作系統的標准介面,可分為基本部分和擴展部分。在硬體或操作系統平台上安裝一個Java平台之後,Java應用程序就可運行。
Java平台已經嵌入了幾乎所有的操作系統。這樣Java程序只編譯一次,就可以在各種系統中運行。Java應用編程介面已經從1.1x版本發展到1.2版本。常用的Java平台基於Java1.6,最新版本為Java1.8。
Java發展至今,就力圖使之無所不能。按應用范圍,Java可分為3個體系,即JavaSE、JavaEE和JavaME。
(8)解釋執行java擴展閱讀
Java語言的特點
Java語言的風格很像C語言和C++語言,是一種純粹的面向對象語言,它繼承了C++語言面向對象的技術核心,但是拋棄了C++的一些缺點,比如說容易引起錯誤的指針以及多繼承等,同時也增加了垃圾回收機制,釋放掉不被使用的內存空間,解決了管理內存空間的煩惱。
1、面向對象
Java是一種面向對象的語言,它對對象中的類、對象、繼承、封裝、多態、介面、包等均有很好的支持。為了簡單起見,Java只支持類之間的單繼承,但是可以使用介面來實現多繼承。使用Java語言開發程序,需要採用面向對象的思想設計程序和編寫代碼。
2、平台無關性
平台無關性的具體表現在於,Java是「一次編寫,到處運行(WriteOnce,RunanyWhere)」的語言,因此採用Java語言編寫的程序具有很好的可移植性,而保證這一點的正是Java的虛擬機機制。在引入虛擬機之後,Java語言在不同的平台上運行不需要重新編譯。
Java語言使用Java虛擬機機制屏蔽了具體平台的相關信息,使得Java語言編譯的程序只需生成虛擬機上的目標代碼,就可以在多種平台上不加修改地運行。
3、簡單性
Java語言的語法與C語言和C++語言很相近,使得很多程序員學起來很容易。對Java來說,它舍棄了很多C++中難以理解的特性,如操作符的重載和多繼承等,而且Java語言不使用指針,加入了垃圾回收機制,解決了程序員需要管理內存的問題,使編程變得更加簡單。
4、解釋執行
Java程序在Java平台運行時會被編譯成位元組碼文件,然後可以在有Java環境的操作系統上運行。在運行文件時,Java的解釋器對這些位元組碼進行解釋執行,執行過程中需要加入的類在連接階段被載入到運行環境中。
5、多線程
Java語言是多線程的,這也是Java語言的一大特性,它必須由Thread類和它的子類來創建。Java支持多個線程同時執行,並提供多線程之間的同步機制。任何一個線程都有自己的run()方法,要執行的方法就寫在run()方法體內。
『玖』 java中,負責對位元組代碼解釋執行的是
java中負責對位元組代碼解釋執行的是虛擬機,虛擬機將得到的位元組代碼進行編碼運行。
java程序,是先把java源程序通過javac命令編譯成位元組碼文件,然後再用java命令解釋執行。把位元組碼文件復制到其它計算機上,只要有java虛擬機就可以用java命令來執行。
『拾』 java怎樣解釋執行
java 是 先編譯後運行。
javac 命令可以吧 源代碼(.java文件)編譯生成 位元組碼(.class)文件
java 命令運行 位元組碼文件。