1. java中什麼是能夠在計算機CPU上執行的二進制代碼
java中的JVM是能夠在計算機CPU上執行的二進制代碼。
java的執行過程
Java代碼需要經過編譯和解釋兩個步驟,才在能在平台上運行。首先java語言的編譯器,幫java代碼編譯成class的位元組碼,之後通過java虛擬機(JVM)來解釋執行。
java代碼的編譯
java代碼是如何編譯的?
首先編譯的解釋:把用高級程序設計語言書寫的源程序,翻譯成等價的計算機匯編語言或機器語言書寫的目標程序的翻譯程序。編譯的具體過程,可以看看《編譯原理》相關的書籍。
其實java的編譯過程,和通常c/c++還是不同的。
java編譯後的位元組碼文件格式主要分為兩部分:常量池和方法位元組碼。常量池記錄的是代碼出現過的所有token(類名,成員變數名等等)以及符號引用(方法引用,成員變數引用等等);方法位元組碼放的是類中各個方法的位元組碼。
Java編譯器卻不將對變數和方法的引用編譯為數值引用,也不確定程序執行過程中的內存布局,而是將些符號引用信息保留在位元組碼中,由解釋器在運行過程中創立內存布局,然後再通過查表來確定一個方法所在的地址,這樣就有效地保證了java的可移植性和安全性。
c/c++的編譯,當C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬體平台運行而生成的。因此在編譯過程中,編譯程序通過查表將所有對符號的引用轉換為特定的內存偏移量,以保證程序運行。
java虛擬機(JVM)
簡單的可以這樣理解它的功能:就是將java編譯之後的位元組碼,解釋成cpu能夠執行的二進制代碼。
JVM是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。JVM有自己完善的硬體架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。JVM的主要工作是解釋自己的指令集(即位元組碼)並映射到本地的CPU的指令集或OS的系統調用。Java語言是跨平台運行的,其實就是不同的操作系統,使用不同的JVM映射規則,讓其與操作系統無關,完成了跨平台性。JVM對上層的Java源文件是不關心的,它關注的只是由源文件生成的類文件(class file)。類文件的組成包括JVM指令集,符號表以及一些補助信息。
java虛擬機工作的原理,可以自己找一下網上的資料。大家還需要思考的問題,jvm的內存、jvm的垃圾回收(GC)、Android的朋友還要區分(Dalvik 和標准 Java 虛擬機JVM)的區別。
總結:
java代碼編譯之後,可以直接運行在Windows或者其它裝有JVM虛擬機的系統下。而C或C++直接編譯成與機器和操作系統相關的代碼。所以C語言編譯的程序沒有跨平台性,就算沒有使用到操作系統相關的API,在不同的系統下也必須重新編譯才能運行。
2. 用javac命令編譯成功後生成的文件叫
二進制文件。
Javac命令編譯後生成的文件可以在Java虛擬機中運行
編譯後生成的文件為二進制文件
編譯後生成文件的後綴名為.class。
JVM(java虛擬機)可以將java文件編譯為機器語言,是通過位元組碼的形式進行的存儲,此位元組碼文件的擴展名就是class文件,此擴展類型文件可以被虛擬機所識別和進行執行。
3. java編譯器把java程序編譯成虛擬機可以識別的二進制代碼,稱為什麼
由java編譯器把源文件編譯成虛擬機可以識別的二進制代碼稱為位元組碼。
而位元組碼是由java解釋器去解釋執行的。
4. jdk,jre,jvm三者間有何關系
JVM:Java虛擬機,它是整個java實現跨平台的最核心的部分,所有的java程序會首先被編譯為.class的類文件,這種類文件可以在虛擬機上執行。
JRE:Java運行環境,光有JVM還不能讓class文件執行,因為在解釋class的時候JVM需要調用解釋所需要的類庫lib。
JDK:Java開發工具包
JDK是JAVA程序開發時用的開發工具包,其內部也有Java運行環境JRE。JRE是Java程序運行時需要的運行環境,就是說如果你光是運行Java程序而不是去搞開發的話,只安裝JRE就能運行已經存在的Java程序了。JDk、JRE內部都包含JAVA虛擬機JVM,JAVA虛擬機內部包含許多應用程序的類的解釋器和類載入器等等。
5. Java能不能像C語言不通過JVM虛擬機直接編譯成二進制機器碼,讓計算機直接運行
很少用java,不熟悉,但覺得應該不行吧,java是解釋性語言,即使有一次編譯的機制,但也是即時編譯的。要是像你說的這樣,那也不可能跨平台運行了
6. java為什麼可以跨平台執行
java是跨平台的,就是生成的.class文件拿到任何系統平台都能運行,其實是建立在虛擬機上的,也就是jvm,你裝jkd的時候就帶了。
所有的java程序都是在虛擬機也就是jvm是運行的,而且jvm的版本也不同,有windows版本的還有linux版本的,正是因為有了不同的jvm才使得java可以跨平台。簡單的說就是因為jvm的不跨平台才導致了java的跨平台,其實是一個過度。不象c語言他沒有jvm,通過操作系統內核來編譯,windows的操作系統編寫的c,拿到linxu下就用不了。
打個比方,就象大家所知道的看電影有一種文件叫rmvb格式的,它拿到哪個平台都能運行,那是因為有realplayer,暴風等播放器的原因。不同的播放器有windows版 和linux版一個道理。
7. 1.一個Java源程序編譯後會生成一種擴展名為 的位元組碼文件。
填寫:.class。
解釋:java文件通過jvm虛擬機編譯後會生成二進制碼,顯示的文件格式就是「.class」.
之後通過 「java 文件名」的形式運行即可。
8. Java語言是怎樣跨平台性運行的呢
Java之所以能跨平台,是因為java虛擬機能跨平台。
因為Java程序編譯之後的代碼不是能被硬體系統直接運行的代碼,而是一種「中間碼」——位元組碼。然後不同的硬體平台上安裝有不同的Java虛擬機(JVM),由JVM來把位元組碼再「翻譯」成所對應的硬體平台能夠執行的代碼。因此對於Java編程者來說,不需要考慮硬體平台是什麼。所以Java可以跨平台。
因為它有虛擬機(JVM),JAVA程序不是直接在電腦上運行的,是在虛擬機上進行的,每個系統平台都是有自己的虛擬機(JVM),所以JAVA語言能跨平台。
java代碼不是直接運行在CPU上,而是運行在java虛機(簡稱JVM)上的。
java是先把java文件編譯成二進制位元組碼的class文件,jvm就解釋執行class文件。
就是因為java是運行在jvm上的,所以它的代碼就能不經修改,就能在不同平台的jvm上運行(在UNIX用UNIX的jvm,在linux上用linux的jvm,在windows上用windows的jvm)
假如用windows移植到UNIX,只需把java文件是UNIX的jvm上編譯成class文件,然後用jvm運行就可以了.
9. 在java編程中用什麼命令來編譯java源文件 可以將源文件編譯成位元組碼文件,求答案 。
答案如下:
1 、javac 選 A
2、 int 選 D int 為關鍵字
3、 4 選 B
4、 15 選C
5 、界面類型 選D
6 、age[0] 選B
7、 class 選A
8 、java B
9、 abstract 選B
10 、false 選D
1、 錯,區分大小寫
2、 對
3 、錯,可以有多個
4 、錯 ,private 不可以被繼承 public可以繼承
5、 錯,private 不能繼承
6 、錯,java中可以重載函數