新聞中心
java中,負(fù)責(zé)對(duì)字節(jié)代碼解釋執(zhí)行的是?
java中負(fù)責(zé)對(duì)字節(jié)代碼解釋執(zhí)行的是虛擬機(jī),虛擬機(jī)將得到的字節(jié)代碼進(jìn)行編碼運(yùn)行。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺(tái)小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了白山免費(fèi)建站歡迎大家使用!
java程序,是先把java源程序通過(guò)javac命令編譯成字節(jié)碼文件,然后再用java命令解釋執(zhí)行。把字節(jié)碼文件復(fù)制到其它計(jì)算機(jī)上,只要有java虛擬機(jī)就可以用java命令來(lái)執(zhí)行。
簡(jiǎn)述JAVA程序的編輯編譯和運(yùn)行過(guò)程
第一步(編譯): 創(chuàng)建完源文件之后,程序會(huì)先被編譯為.class文件。Java編譯一個(gè)類時(shí),如果這個(gè)類所依賴的類還沒有被編譯,編譯器就會(huì)先編譯這個(gè)被依賴的類,然后引用,否則直接引用,這個(gè)有點(diǎn)象make。
如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報(bào)“cant find symbol”的錯(cuò)誤。
第二步(運(yùn)行):java類運(yùn)行的過(guò)程大概可分為兩個(gè)過(guò)程:1、類的加載 2、類的執(zhí)行。需要說(shuō)明的是:JVM主要在程序第一次主動(dòng)使用類的時(shí)候,才會(huì)去加載該類。也就是說(shuō),JVM并不是在一開始就把一個(gè)程序就所有的類都加載到內(nèi)存中,而是到不得不用的時(shí)候才把它加載進(jìn)來(lái),而且只加載一次。
特別說(shuō)明:java類中所有public和protected的實(shí)例方法都采用動(dòng)態(tài)綁定機(jī)制,所有私有方法、靜態(tài)方法、構(gòu)造器及初始化方法clinit都是采用靜態(tài)綁定機(jī)制。而使用動(dòng)態(tài)綁定機(jī)制的時(shí)候會(huì)用到方法表,靜態(tài)綁定時(shí)并不會(huì)用到。
擴(kuò)展資料:
Java整個(gè)編譯以及運(yùn)行的過(guò)程相當(dāng)繁瑣,本文通過(guò)一個(gè)簡(jiǎn)單的程序來(lái)簡(jiǎn)單的說(shuō)明整個(gè)流程。
Java代碼編譯:是由Java源碼編譯器來(lái)完成;
Java字節(jié)碼的執(zhí)行:是由JVM執(zhí)行引擎來(lái)完成
Java程序從源文件創(chuàng)建到程序運(yùn)行要經(jīng)過(guò)兩大步驟:
1、源文件由編譯器編譯成字節(jié)碼(ByteCode)
2、字節(jié)碼由java虛擬機(jī)解釋運(yùn)行。因?yàn)閖ava程序既要編譯同時(shí)也要經(jīng)過(guò)JVM的解釋運(yùn)行,所以說(shuō)Java被稱為半解釋語(yǔ)言( "semi-interpreted" language)。
java程序設(shè)計(jì)——字節(jié)流操作
代碼如下,運(yùn)行下,是否符合你的要求:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Scanner;
public class Test
{
public static void main(String[] args) throws Exception
{
Scanner scan = new Scanner(System.in);
DataOutputStream dos = new DataOutputStream(new FileOutputStream("1.txt"));
//從鍵盤上輸入10個(gè)整數(shù),判斷哪些是偶數(shù),把所有偶數(shù)寫到一個(gè)文件中去
String content = "";
for(int i=0;i10;i++)
{
System.out.println("請(qǐng)輸入第" + (i+1) + "個(gè)數(shù)");
int num = scan.nextInt();
if(num %2 == 0) content += num + ",";
}
dos.writeUTF(content);
scan.close();
//從文件中讀出這些偶數(shù),顯示在屏幕上
DataInputStream dis = new DataInputStream(new FileInputStream("1.txt"));
try
{
content = dis.readUTF();
System.out.println(content);
} catch (Exception e)
{
e.printStackTrace();
}
dis.close();
}
}
Java字節(jié)碼的執(zhí)行是由什么完成的?
Java字節(jié)碼的執(zhí)行需要經(jīng)過(guò)以下3個(gè)步驟:
(1)由類裝載器(class loader)負(fù)責(zé)把類文件(.class文件)加載到Java虛擬機(jī)中。在此過(guò)程需要檢驗(yàn)該類文件是否符合類文件規(guī)范。
(2)字節(jié)碼校驗(yàn)器(bytecode verifier)檢查該類文件的代碼中是否存在著某些非法操作,例如Applet程序中寫本地計(jì)算機(jī)文件系統(tǒng)的操作。
(3)如果字節(jié)碼校驗(yàn)器檢驗(yàn)通過(guò),由Java解釋器負(fù)責(zé)把該類文件解釋成為機(jī)器碼進(jìn)行執(zhí)行。
北大青鳥java培訓(xùn):字節(jié)碼指令的編譯與執(zhí)行?
java編程開發(fā)是目前市場(chǎng)上使用范圍非常廣泛的一種編程開發(fā)語(yǔ)言。
今天我們就一起來(lái)了解一下,在java編程中關(guān)于字節(jié)碼的一些指令的編譯與執(zhí)行方法。
java文件編譯后的class文件,java跨平臺(tái)的中間層,JVM通過(guò)對(duì)字節(jié)碼的解釋執(zhí)行(執(zhí)行模式,還有JIT編譯執(zhí)行,下面講解),屏蔽對(duì)操作系統(tǒng)的依賴。
一個(gè)字節(jié)(8位)可以儲(chǔ)存256中不同的指令,這樣的指令就是字節(jié)碼,java所有指令有200個(gè)左右,這些指令組成了字節(jié)碼文件(.class)。
一、字節(jié)碼的主要指令:.class文件里面的十六進(jìn)制文件,其中CAFEBABE是標(biāo)志這個(gè)文件為java的編譯后的文件,00000034代表版本號(hào),01670700一個(gè)字節(jié)(8位)就是一個(gè)字節(jié)指令,由于數(shù)值指令太難看懂,我們可以用javap將指令翻譯為助記指令。
1、加載或儲(chǔ)存指令在棧幀中,通過(guò)指令操作數(shù)據(jù)在局部變量表與操作棧間傳遞。
ILOAD、ALOAD:將int、對(duì)象引用類型從局部變量表壓入操作棧頂;ISTORE、ASTORE:將int、對(duì)象引用類型從操作棧頂儲(chǔ)存到局部變量表里;ICONST、BIPUSH、SIPUSH、LDC:將常亮加載到操作棧頂。
2、運(yùn)算指令對(duì)操作棧上的值進(jìn)行運(yùn)算,并把結(jié)果寫入操作棧頂,如IADD、IMUL。
3、類型轉(zhuǎn)換指令I(lǐng)2L、D2F4、對(duì)象創(chuàng)建與訪問指令NEW除了字節(jié)碼指令外,海南電腦培訓(xùn)認(rèn)為還包括像LINENUMBER儲(chǔ)存字節(jié)碼與源碼對(duì)應(yīng),方便調(diào)試定位;LOCALVARIABLE儲(chǔ)存當(dāng)前方法使用到的局部表量表。
二、java源碼文件轉(zhuǎn)化為字節(jié)碼(.class)文件的過(guò)程JAVA源文件----------詞法解析----------語(yǔ)法解析----------語(yǔ)義分析---------生成字節(jié)碼---------字節(jié)碼文件詞法分析:根據(jù)空格分割出單詞、操作符等,形成token信息流;語(yǔ)法分析:根據(jù)token流和java語(yǔ)法規(guī)范生成語(yǔ)法樹;語(yǔ)義分析:檢查關(guān)鍵字、類型匹配是否正確;
當(dāng)前名稱:java字節(jié)代碼操作,深入理解java字節(jié)碼
文章網(wǎng)址:http://fisionsoft.com.cn/article/dsgdhdc.html