欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java源代碼字節(jié)碼 java源文件編譯為字節(jié)碼

Java里的字節(jié)碼和源代碼分別啥意思,和起到什么左右

/*java是一門高級(jí)編程語言,是用來寫程序代碼的。

站在用戶的角度思考問題,與客戶深入溝通,找到銀州網(wǎng)站設(shè)計(jì)與銀州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋銀州地區(qū)。

用java寫的文本(字符串序列)就是源代碼。

計(jì)算機(jī)不能直接執(zhí)行源代碼,必須用一個(gè)叫編譯器的程序(javac.exe)將源代碼

翻譯成字節(jié)碼,然后讓一個(gè)叫解釋器的程序(java.exe)去執(zhí)行字節(jié)碼,即運(yùn)行程序。

下面的就是一個(gè)小程序的源代碼,功能是輸出九九乘法表。

下圖中的Test.class就是這個(gè)源代碼文件翻譯后的由字節(jié)碼組成的文件。

而最下面的那個(gè)黑框就是程序執(zhí)行后的結(jié)果。

java Test就是在執(zhí)行Test.class字節(jié)碼文件,即運(yùn)行這個(gè)程序。

*/

//這下面的就是源代碼

public class Test {

public static void main(String[] args) {

int i,j;

for(i=1;i=9;i++) {

for(j=1;j=i;j++)

System.out.printf("%dx%d=%-4d",j,i,j*i);

System.out.println();

}

}

}

Java源程序文件,和字節(jié)碼文件的擴(kuò)展名分別?

你好,很高興回答你的問題。

java源程序文件的擴(kuò)展名是.java,字節(jié)碼文件的擴(kuò)展名是.class。

如果有幫助到你,請(qǐng)點(diǎn)擊采納。

java 字節(jié)碼 機(jī)器碼 char

char即字符類型,表示的是基于ASCII碼的字符,

字節(jié)碼,為java源代碼編譯完成后,由JVM轉(zhuǎn)換成的文件,可以在任何裝有JVM的系統(tǒng)上,轉(zhuǎn)化相應(yīng)的機(jī)器語言

機(jī)器碼:即機(jī)器語言,表示的就是運(yùn)行字節(jié)碼文件后的二進(jìn)制序列

字節(jié):即java中的byte類型,用于存放一個(gè)字節(jié)

什么是Java字節(jié)碼?

它是程序的一種低級(jí)表示,可以運(yùn)行于Java虛擬機(jī)上。將程序抽象成字節(jié)碼可以保證Java程序在各種設(shè)備上的運(yùn)行

Java號(hào)稱是一門“一次編譯到處運(yùn)行”的語言,從我們寫的java文件到通過編譯器編譯成java字節(jié)碼文件(.class文件),這個(gè)過程是java編譯過程;而我們的java虛擬機(jī)執(zhí)行的就是字節(jié)碼文件。不論該字節(jié)碼文件來自何方,由哪種編譯器編譯,甚至是手寫字節(jié)碼文件,只要符合java虛擬機(jī)的規(guī)范,那么它就能夠執(zhí)行該字節(jié)碼文件。

JAVA程序的運(yùn)行

因?yàn)镴ava具有跨平臺(tái)特性,為了實(shí)現(xiàn)這個(gè)特性Java執(zhí)行在一臺(tái)虛擬機(jī)上,這臺(tái)虛擬機(jī)也就是JVM,Java通過JVM屏蔽了不同平臺(tái)之間的差異,從而做到一次編譯到處執(zhí)行。JVM位于Java編譯器和OS平臺(tái)之間,Java編譯器只需面向JVM,生成JVM能理解的代碼,這個(gè)代碼即字節(jié)碼,JVM再將字節(jié)碼翻譯成真實(shí)機(jī)器所能理解的二進(jìn)制機(jī)器碼。

字節(jié)碼是怎么產(chǎn)生的?

我們所編寫的程序都是.java格式,通常在執(zhí)行的時(shí)候也許點(diǎn)擊一下eclipse的運(yùn)行鍵就可以在控制臺(tái)看到運(yùn)行結(jié)果,但是也可以更酷一些,如果你裝了JDK,那就可以直接在以命令行的方式編譯運(yùn)行你的.java文件,編譯后會(huì)形成.class文件,這個(gè).class文件即字節(jié)碼。

字節(jié)碼怎么解讀?

上圖是編譯好的字節(jié)碼文件,即一堆16進(jìn)制的字節(jié),如果使用IDE去打開,也許看到的是已經(jīng)被反編譯的我們所熟悉的java代碼,但這才是純正的字節(jié)碼

這里只介紹字節(jié)碼由哪些部分組成, 具體的意思自行百度或者看文尾的連接, 有較為詳細(xì)的講解

上圖即字節(jié)碼文件的組成部分, Class文件的結(jié)構(gòu)不像XML等描述語言那樣松散自由。由于它沒有任何分隔符號(hào),

所以,以上數(shù)據(jù)項(xiàng)無論是順序還是數(shù)量都是被嚴(yán)格限定的。哪個(gè)字節(jié)代表什么含義,長(zhǎng)度是多少,先后順序如何,都不允許改變, 如上圖左側(cè)即每一部分規(guī)定的長(zhǎng)度

魔數(shù)(Magic Number)

魔數(shù)是用來區(qū)分文件類型的一種標(biāo)志,一般都是用文件的前幾個(gè)字節(jié)來表示。

比如0XCAFE BABE表示的是class文件,那么有人會(huì)問,文件類型可以通過文件名后綴來判斷啊?是的,但是文件名是可以修改的(包括后綴),那么為了保證文件的安全性,將文件類型寫在文件內(nèi)部來保證不被篡改。

至于為什么是CAFE BABE估計(jì)大家也能猜到, 程序員與咖啡的不解之緣

版本號(hào)(Version)

版本號(hào)含主版本號(hào)和次版本號(hào),都是各占2個(gè)字節(jié)。在此Demo種為0X0000 0033。其中前面的0000是次版本號(hào),后面的0033是主版本號(hào)。通過進(jìn)制轉(zhuǎn)換得到的是次版本號(hào)為0,主版本號(hào)為51。高版本的JDK能向下兼容以前版本的Class文件,但不能運(yùn)行以后版本的Class文件,即使文件格式未發(fā)生任何變化. 這就是target參數(shù)的用處,可以在使用JDK 1.7編譯時(shí)指定-target 1.5

常量池(Constant Pool)

常量池是Class文件中的資源倉(cāng)庫(kù), 量池中主要存儲(chǔ)2大類常量:字面量和符號(hào)引用。字面量如文本字符串,java中聲明為final的常量值等等,而符號(hào)引用如類和接口的全局限定名,字段的名稱和描述符,方法的名稱和描述符。常量池是一個(gè)表結(jié)構(gòu),在表的內(nèi)容前有一個(gè)類型的計(jì)數(shù)器,表示常量池的長(zhǎng)度

上面的表中描述了11中數(shù)據(jù)類型的結(jié)構(gòu),其實(shí)在jdk1.7之后又增加了3種(CONSTANT_MethodHandle_info,CONSTANT_MethodType_info以及CONSTANT_InvokeDynamic_info)。這樣算起來一共是14種

訪問標(biāo)志(Access_Flag)

訪問標(biāo)志信息包括該Class文件是類還是接口,是否被定義成public,是否是abstract,如果是類,是否被聲明成final。通過上面的源代碼,我們知道該文件是類并且是public。

0x 00 21:是0×0020和0×0001的并集。其中0×0020這個(gè)標(biāo)志值涉及到字節(jié)碼指令

類索引(This Class Name)

類索引用于確定類的全限定名

0×00 03 表示引用第3個(gè)常量,同時(shí)第3個(gè)常量引用第19個(gè)常量,查找得”com/demo/Demo”。#3.#19

父類索引(Super Class Name)

0×00 04 同理:#4.#20(java/lang/Object)

接口索引(Interfaces)

通過上邊字節(jié)碼圖可以看到,這個(gè)接口有2+n個(gè)字節(jié),前兩個(gè)字節(jié)表示的是接口數(shù)量,后面跟著就是接口的表。我們這個(gè)類沒有任何接口,所以應(yīng)該是0000。果不其然,查找字節(jié)碼文件得到的就是0000。

字段表集合(fields)

字段表用于描述類和接口中聲明的變量。這里的字段包含了類級(jí)別變量以及實(shí)例變量,但是不包括方法內(nèi)部聲明的局部變量。接下來就是2+n個(gè)字段屬性。我們只有一個(gè)屬性a,所以應(yīng)該是0001。查找文件果不其然是0001。

該區(qū)域含有字段的訪問標(biāo)志, 訪問權(quán)限, 字段的名稱索引, 字段的描述符索引, 屬性表

描述符的作用就是用來描述字段的數(shù)據(jù)類型、方法的參數(shù)列表和返回值。而屬性表就是為字段表和方法表提供額外信息的表結(jié)構(gòu)。對(duì)于字段來說,此處如果將字段聲明為一個(gè)static final msg = "aaa"的常量,則字段后就會(huì)跟著一個(gè)屬性表,其中存在一項(xiàng)名為ConstantValue,指向常量池中的一個(gè)常量,值為的"aaa"。

方法(methods)

包含訪問標(biāo)志表, 方法名索引 , 方法描述符索引, 屬性表數(shù)量,等

Attribute

0×0001 :同樣的,表示有1個(gè)Attributes了。

0x000f : #15(“SourceFile”)

0×0000 0002 attribute_length=2

0×0010 : sourcefile_index = #16(“Demo.java”)

SourceFile屬性用來記錄生成該Class文件的源碼文件名稱。

java源代碼與字節(jié)碼文件類型有哪些

java源文件的格式是text/html類型的,可以直接用記事本打開。編碼可以是utf-8,也可以是其它類型的。后綴為.java

源文件編譯后的字節(jié)碼是以CAFE BABY開頭的二進(jìn)制文件。需要JVM才能讀懂。后綴為.class

一般來說,一個(gè)類對(duì)應(yīng)一個(gè)字節(jié)碼文件,內(nèi)部類編譯后也會(huì)生成一個(gè)單獨(dú)的字節(jié)碼文件。字節(jié)碼文件是以類名來命名(標(biāo)識(shí))的。

一些相關(guān)的字節(jié)碼文件可以按照包結(jié)構(gòu)打包成jar文件。jar文件和zip文件差不多。

java程序一般都會(huì)依賴很多的jar文件,比如最基本的rt.jar。

網(wǎng)站名稱:java源代碼字節(jié)碼 java源文件編譯為字節(jié)碼
新聞來源:http://www.chinadenli.net/article34/hpihse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站域名注冊(cè)自適應(yīng)網(wǎng)站網(wǎng)站設(shè)計(jì)公司網(wǎng)站維護(hù)網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)