本文目錄一覽:
- 1、java新手必記得一些指令
- 2、java, cmd的使用?
- 3、JAVA指令大全
- 4、編譯java程序需要使用什麼命令
- 5、北大青鳥java培訓:位元組碼指令的編譯與執行?
- 6、javac命令和java命令做什麼事情呢?
java新手必記得一些指令
java哪有什麼指令,你指的應該是寫eclipse開發時的java代碼快捷鍵命令吧:
Ctrl+1 快速修復(最經典的快捷鍵,就不用多說了)
Ctrl+D: 刪除當前行
Ctrl+Alt+↓ 複製當前行到下一行(複製增加)
Ctrl+Alt+↑ 複製當前行到上一行(複製增加)
Alt+↓ 當前行和下面一行交互位置(特別實用,可以省去先剪切,再粘貼了)
Alt+↑ 當前行和上面一行交互位置(同上)
Alt+← 前一個編輯的頁面
Alt+→ 下一個編輯的頁面(當然是針對上面那條來說了)
Alt+Enter 顯示當前選擇資源(工程,or 文件 or文件)的屬性
Shift+Enter 在當前行的下一行插入空行(這時滑鼠可以在當前行的任一位置,不一定是最後)
Shift+Ctrl+Enter 在當前行插入空行(原理同上條)
Ctrl+Q 定位到最後編輯的地方
Ctrl+L 定位在某行 (對於程序超過100的人就有福音了)
Ctrl+M 最大化當前的Edit或View (再按則反之)
Ctrl+/ 注釋當前行,再按則取消注釋
Ctrl+O 快速顯示 OutLine
Ctrl+T 快速顯示當前類的繼承結構
Ctrl+W 關閉當前Editer
Ctrl+K 參照選中的Word快速定位到下一個
Ctrl+E 快速顯示當前Editer的下拉列表(如果當前頁面沒有顯示的用黑體表示)
Ctrl+/(小鍵盤) 摺疊當前類中的所有代碼
Ctrl+×(小鍵盤) 展開當前類中的所有代碼
Ctrl+Space 代碼助手完成一些代碼的插入(但一般和輸入法有衝突,可以修改輸入法的熱鍵,也可以暫用
Alt+/來代替)
Ctrl+Shift+E 顯示管理當前打開的所有的View的管理器(可以選擇關閉,激活等操作)
Ctrl+J 正向增量查找(按下Ctrl+J後,你所輸入的每個字母編輯器都提供快速匹配定位到某個單詞,如果沒
有,則在stutes line中顯示沒有找到了,查一個單詞時,特別實用,這個功能Idea兩年前就有了)
Ctrl+Shift+J 反向增量查找(和上條相同,只不過是從後往前查)
Ctrl+Shift+F4 關閉所有打開的Editer
Ctrl+Shift+X 把當前選中的文本全部變味小寫
Ctrl+Shift+Y 把當前選中的文本全部變為小寫
Ctrl+Shift+F 格式化當前代碼
Ctrl+Shift+P 定位到對於的匹配符(譬如{}) (從前面定位後面時,游標要在匹配符裡面,後面到前面,則反
之)
下面的快捷鍵是重構裡面常用的,本人就自己喜歡且常用的整理一下(注:一般重構的快捷鍵都是Alt+Shift
開頭的了)
Alt+Shift+R 重命名 (是我自己最愛用的一個了,尤其是變數和類的Rename,比手工方法能節省很多勞動力
)
Alt+Shift+M 抽取方法 (這是重構裡面最常用的方法之一了,尤其是對一大堆泥團代碼有用)
Alt+Shift+C 修改函數結構(比較實用,有N個函數調用了這個方法,修改一次搞定)
Alt+Shift+L 抽取本地變數( 可以直接把一些魔法數字和字元串抽取成一個變數,尤其是多處調用的時候)
Alt+Shift+F 把Class中的local變數變為field變數 (比較實用的功能)
Alt+Shift+I 合併變數(可能這樣說有點不妥Inline)
Alt+Shift+V 移動函數和變數(不怎麼常用)
Alt+Shift+Z 重構的後悔葯(Undo)
編輯
作用域 功能 快捷鍵
全局 查找並替換 Ctrl+F
文本編輯器 查找上一個 Ctrl+Shift+K
文本編輯器 查找下一個 Ctrl+K
全局 撤銷 Ctrl+Z
全局 複製 Ctrl+C
全局 恢復上一個選擇 Alt+Shift+↓
全局 剪切 Ctrl+X
全局 快速修正 Ctrl1+1
全局 內容輔助 Alt+/
全局 全部選中 Ctrl+A
全局 刪除 Delete
全局 上下文信息 Alt+?
Alt+Shift+?
Ctrl+Shift+Space
java編輯器 顯示工具提示描述 F2
java編輯器 選擇封裝元素 Alt+Shift+↑
java編輯器 選擇上一個元素 Alt+Shift+←
java編輯器 選擇下一個元素 Alt+Shift+→
文本編輯器 增量查找 Ctrl+J
文本編輯器 增量逆向查找 Ctrl+Shift+J
全局 粘貼 Ctrl+V
全局 重做 Ctrl+Y
還有好多,但用到的不多,自己百度
java, cmd的使用?
一、簡述:
cmd中,執行java命令與javac命令的區別:
javac:是編譯命令,將java源文件編譯成.class位元組碼文件。
例如:javac hello.java
將生成hello.class文件。
java:是運行位元組碼文件;由java虛擬機對位元組碼進行解釋和運行。
例如:java hello
二、詳述:
下面我們來寫個java文件試試。
1、打開記事本,輸入一個類+主函數

public class Hello{
public static void main(String[] args) {
System.out.println(“Hello World”);
}
}
2、點擊 文件-保存,保存到相應文件夾下,文件名修改了xxx.java


3、在Hello.java文件夾內,空白位置,按住鍵盤Shift,右擊滑鼠,選擇「在此處打開命令窗口」


4、輸入 javac Hello.java 回車
如果java類書寫格式沒有錯誤,cmd不會報錯,而且在java文件同目錄內生成一個class文件。


5、輸入 java Hello 回車
若輸出下圖,恭喜你,成功了!你已經把java類中,輸出列印「Hello World」顯示在cmd命令行中。

三、總結:
首先我們使用記事本編寫java源代碼,擴展名.java;
在命令行模式中,輸入命令:javac 源文件名.java,對源代碼進行編譯,生成class位元組碼文件;
編譯完成後,如果沒有報錯信息,輸入命令:java Hello,對class位元組碼文件進行解釋運行,列印「Hello World」。
為了方便大家理解javac和java編譯運行過程,可以看下圖:

至此,我相信大家應該對javac和java使用有了比較客觀的了解。
四、答疑:
接下來,我們來看一下大家在實踐中容易遇到的問題。
問題一:cmd命令一定要準確,區分大小寫,注意是否要加擴展名。
javac Hello.java
java Hello
問題二:javac命令報錯,如下圖

javac命令報錯,一般都是java代碼有誤,需要檢查修改。
下圖中,java代碼很明顯的錯誤,輸出列印語句寫在了main函數的外面,修改正確就不會報錯了。
javac命令報錯,去看java代碼,肯定有錯誤。

問題三:javac命令執行完成,生成class文件,但是java命令報錯,如下圖

我查閱資料,找到報錯的原因,首先檢查java源代碼,記住,java類不要加package路徑!再就是java環境變數有問題,咱們一起來檢查一下。
右擊「計算機-屬性-高級系統設置」,單擊「環境變數」。我相信大家都已經配置java環境變數,咱們來檢查一下。

逐一核對 」JAVA_HOME」 「Path」 「CLASSPATH」
(1)”JAVA_HOME”,變數值是你的電腦JDK的安裝路徑,我的是”D:\java\tool\java1.8\JDK”
(2)”Path”,在原變數值的最後面加上」;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin」
(3)」CLASSPATH」,變數值」.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar」
特別注意變數值開頭是」.;」(點分號),這個地方需要特別注意,我就是因為這個點和分號不對報錯的。

java源碼修改後,需要把之前生成的class文件刪除,從新運行javac和java命令。
環境變數修改後,一定要重啟cmd命令行窗口,再把把之前生成的class文件刪掉,重新運行javac和java命令。
註:若在輸入javac命令時,顯示’javac’不是內部或外部命令,原因也是因為沒有提前安裝好JDK開發環境或環境變數配置有誤。
JAVA指令大全
指令碼
助記符
說明
0x00
nop
什麼都不做
0x01
aconst_null
將null推送至棧頂
0x02
iconst_m1
將int型-1推送至棧頂
0x03
iconst_0
將int型0推送至棧頂
0x04
iconst_1
將int型1推送至棧頂
0x05
iconst_2
將int型2推送至棧頂
0x06
iconst_3
將int型3推送至棧頂
0x07
iconst_4
將int型4推送至棧頂
0x08
iconst_5
將int型5推送至棧頂
0x09
lconst_0
將long型0推送至棧頂
0x0a
lconst_1
將long型1推送至棧頂
0x0b
fconst_0
將float型0推送至棧頂
0x0c
fconst_1
將float型1推送至棧頂
0x0d
fconst_2
將float型2推送至棧頂
0x0e
dconst_0
將double型0推送至棧頂
0x0f
dconst_1
將double型1推送至棧頂
0x10
bipush
將單位元組的常量值(-128~127)推送至棧頂
0x11
sipush
將一個短整型常量值(-32768~32767)推送至棧頂
0x12
ldc
將int, float或String型常量值從常量池中推送至棧頂
0x13
ldc_w
將int, float或String型常量值從常量池中推送至棧頂(寬索引)
0x14
ldc2_w
將long或double型常量值從常量池中推送至棧頂(寬索引)
0x15
iload
將指定的int型本地變數推送至棧頂
0x16
lload
將指定的long型本地變數推送至棧頂
0x17
fload
將指定的float型本地變數推送至棧頂
0x18
dload
將指定的double型本地變數推送至棧頂
0x19
aload
將指定的引用類型本地變數推送至棧頂
0x1a
iload_0
將第一個int型本地變數推送至棧頂
0x1b
iload_1
將第二個int型本地變數推送至棧頂
0x1c
iload_2
將第三個int型本地變數推送至棧頂
0x1d
iload_3
將第四個int型本地變數推送至棧頂
0x1e
lload_0
將第一個long型本地變數推送至棧頂
0x1f
lload_1
將第二個long型本地變數推送至棧頂
0x20
lload_2
將第三個long型本地變數推送至棧頂
0x21
lload_3
將第四個long型本地變數推送至棧頂
0x22
fload_0
將第一個float型本地變數推送至棧頂
0x23
fload_1
將第二個float型本地變數推送至棧頂
0x24
fload_2
將第三個float型本地變數推送至棧頂
0x25
fload_3
將第四個float型本地變數推送至棧頂
0x26
dload_0
將第一個double型本地變數推送至棧頂
0x27
dload_1
將第二個double型本地變數推送至棧頂
0x28
dload_2
將第三個double型本地變數推送至棧頂
0x29
dload_3
將第四個double型本地變數推送至棧頂
0x2a
aload_0
將第一個引用類型本地變數推送至棧頂
0x2b
aload_1
將第二個引用類型本地變數推送至棧頂
0x2c
aload_2
將第三個引用類型本地變數推送至棧頂
0x2d
aload_3
將第四個引用類型本地變數推送至棧頂
0x2e
iaload
將int型數組指定索引的值推送至棧頂
0x2f
laload
將long型數組指定索引的值推送至棧頂
0x30
faload
將float型數組指定索引的值推送至棧頂
0x31
daload
將double型數組指定索引的值推送至棧頂
0x32
aaload
將引用型數組指定索引的值推送至棧頂
0x33
baload
將boolean或byte型數組指定索引的值推送至棧頂
0x34
caload
將char型數組指定索引的值推送至棧頂
0x35
saload
將short型數組指定索引的值推送至棧頂
0x36
istore
將棧頂int型數值存入指定本地變數
0x37
lstore
將棧頂long型數值存入指定本地變數
0x38
fstore
將棧頂float型數值存入指定本地變數
0x39
dstore
將棧頂double型數值存入指定本地變數
0x3a
astore
將棧頂引用型數值存入指定本地變數
0x3b
istore_0
將棧頂int型數值存入第一個本地變數
0x3c
istore_1
將棧頂int型數值存入第二個本地變數
0x3d
istore_2
將棧頂int型數值存入第三個本地變數
0x3e
istore_3
將棧頂int型數值存入第四個本地變數
0x3f
lstore_0
將棧頂long型數值存入第一個本地變數
0x40
lstore_1
將棧頂long型數值存入第二個本地變數
0x41
lstore_2
將棧頂long型數值存入第三個本地變數
0x42
lstore_3
將棧頂long型數值存入第四個本地變數
0x43
fstore_0
將棧頂float型數值存入第一個本地變數
0x44
fstore_1
將棧頂float型數值存入第二個本地變數
0x45
fstore_2
將棧頂float型數值存入第三個本地變數
0x46
fstore_3
將棧頂float型數值存入第四個本地變數
0x47
dstore_0
將棧頂double型數值存入第一個本地變數
0x48
dstore_1
將棧頂double型數值存入第二個本地變數
0x49
dstore_2
將棧頂double型數值存入第三個本地變數
0x4a
dstore_3
將棧頂double型數值存入第四個本地變數
0x4b
astore_0
將棧頂引用型數值存入第一個本地變數
0x4c
astore_1
將棧頂引用型數值存入第二個本地變數
0x4d
astore_2
將棧頂引用型數值存入第三個本地變數
0x4e
astore_3
將棧頂引用型數值存入第四個本地變數
0x4f
iastore
將棧頂int型數值存入指定數組的指定索引位置
0x50
lastore
將棧頂long型數值存入指定數組的指定索引位置
0x51
fastore
將棧頂float型數值存入指定數組的指定索引位置
0x52
dastore
將棧頂double型數值存入指定數組的指定索引位置
0x53
aastore
將棧頂引用型數值存入指定數組的指定索引位置
0x54
bastore
將棧頂boolean或byte型數值存入指定數組的指定索引位置
0x55
castore
將棧頂char型數值存入指定數組的指定索引位置
0x56
sastore
將棧頂short型數值存入指定數組的指定索引位置
0x57
pop
將棧頂數值彈出 (數值不能是long或double類型的)
0x58
pop2
將棧頂的一個(long或double類型的)或兩個數值彈出(其它)
0x59
dup
複製棧頂數值並將複製值壓入棧頂
0x5a
dup_x1
複製棧頂數值並將兩個複製值壓入棧頂
0x5b
dup_x2
複製棧頂數值並將三個(或兩個)複製值壓入棧頂
0x5c
dup2
複製棧頂一個(long或double類型的)或兩個(其它)數值並將複製值壓入棧頂
0x5d
dup2_x1
待補充
0x5e
dup2_x2
待補充
0x5f
swap
將棧最頂端的兩個數值互換(數值不能是long或double類型的)
0x60
iadd
將棧頂兩int型數值相加並將結果壓入棧頂
0x61
ladd
將棧頂兩long型數值相加並將結果壓入棧頂
0x62
fadd
將棧頂兩float型數值相加並將結果壓入棧頂
0x63
dadd
將棧頂兩double型數值相加並將結果壓入棧頂
0x64
isub
將棧頂兩int型數值相減並將結果壓入棧頂
0x65
lsub
將棧頂兩long型數值相減並將結果壓入棧頂
0x66
fsub
將棧頂兩float型數值相減並將結果壓入棧頂
0x67
dsub
將棧頂兩double型數值相減並將結果壓入棧頂
0x68
imul
將棧頂兩int型數值相乘並將結果壓入棧頂
0x69
lmul
將棧頂兩long型數值相乘並將結果壓入棧頂
0x6a
fmul
將棧頂兩float型數值相乘並將結果壓入棧頂
0x6b
dmul
將棧頂兩double型數值相乘並將結果壓入棧頂
0x6c
idiv
將棧頂兩int型數值相除並將結果壓入棧頂
0x6d
ldiv
將棧頂兩long型數值相除並將結果壓入棧頂
0x6e
fdiv
將棧頂兩float型數值相除並將結果壓入棧頂
0x6f
ddiv
將棧頂兩double型數值相除並將結果壓入棧頂
0x70
irem
將棧頂兩int型數值作取模運算並將結果壓入棧頂
0x71
lrem
將棧頂兩long型數值作取模運算並將結果壓入棧頂
0x72
frem
將棧頂兩float型數值作取模運算並將結果壓入棧頂
0x73
drem
將棧頂兩double型數值作取模運算並將結果壓入棧頂
0x74
ineg
將棧頂int型數值取負並將結果壓入棧頂
0x75
lneg
將棧頂long型數值取負並將結果壓入棧頂
0x76
fneg
將棧頂float型數值取負並將結果壓入棧頂
0x77
dneg
將棧頂double型數值取負並將結果壓入棧頂
0x78
ishl
將int型數值左移位指定位數並將結果壓入棧頂
0x79
lshl
將long型數值左移位指定位數並將結果壓入棧頂
0x7a
ishr
將int型數值右(符號)移位指定位數並將結果壓入棧頂
0x7b
lshr
將long型數值右(符號)移位指定位數並將結果壓入棧頂
0x7c
iushr
將int型數值右(無符號)移位指定位數並將結果壓入棧頂
0x7d
lushr
將long型數值右(無符號)移位指定位數並將結果壓入棧頂
0x7e
iand
將棧頂兩int型數值作「按位與」並將結果壓入棧頂
0x7f
land
將棧頂兩long型數值作「按位與」並將結果壓入棧頂
0x80
ior
將棧頂兩int型數值作「按位或」並將結果壓入棧頂
0x81
lor
將棧頂兩long型數值作「按位或」並將結果壓入棧頂
0x82
ixor
將棧頂兩int型數值作「按位異或」並將結果壓入棧頂
0x83
lxor
將棧頂兩long型數值作「按位異或」並將結果壓入棧頂
0x84
iinc
將指定int型變數增加指定值(i++, i–, i+=2)
0x85
i2l
將棧頂int型數值強制轉換成long型數值並將結果壓入棧頂
0x86
i2f
將棧頂int型數值強制轉換成float型數值並將結果壓入棧頂
0x87
i2d
將棧頂int型數值強制轉換成double型數值並將結果壓入棧頂
0x88
l2i
將棧頂long型數值強制轉換成int型數值並將結果壓入棧頂
0x89
l2f
將棧頂long型數值強制轉換成float型數值並將結果壓入棧頂
0x8a
l2d
將棧頂long型數值強制轉換成double型數值並將結果壓入棧頂
0x8b
f2i
將棧頂float型數值強制轉換成int型數值並將結果壓入棧頂
0x8c
f2l
將棧頂float型數值強制轉換成long型數值並將結果壓入棧頂
0x8d
f2d
將棧頂float型數值強制轉換成double型數值並將結果壓入棧頂
0x8e
d2i
將棧頂double型數值強制轉換成int型數值並將結果壓入棧頂
0x8f
d2l
將棧頂double型數值強制轉換成long型數值並將結果壓入棧頂
0x90
d2f
將棧頂double型數值強制轉換成float型數值並將結果壓入棧頂
0x91
i2b
將棧頂int型數值強制轉換成byte型數值並將結果壓入棧頂
0x92
i2c
將棧頂int型數值強制轉換成char型數值並將結果壓入棧頂
0x93
i2s
將棧頂int型數值強制轉換成short型數值並將結果壓入棧頂
0x94
lcmp
比較棧頂兩long型數值大小,並將結果(1,0,-1)壓入棧頂
0x95
fcmpl
比較棧頂兩float型數值大小,並將結果(1,0,-1)壓入棧頂;當其中一個數值為NaN時,將-1壓入棧頂
0x96
fcmpg
比較棧頂兩float型數值大小,並將結果(1,0,-1)壓入棧頂;當其中一個數值為NaN時,將1壓入棧頂
0x97
dcmpl
比較棧頂兩double型數值大小,並將結果(1,0,-1)壓入棧頂;當其中一個數值為NaN時,將-1壓入棧頂
0x98
dcmpg
比較棧頂兩double型數值大小,並將結果(1,0,-1)壓入棧頂;當其中一個數值為NaN時,將1壓入棧頂
0x99
ifeq
當棧頂int型數值等於0時跳轉
0x9a
ifne
當棧頂int型數值不等於0時跳轉
0x9b
iflt
當棧頂int型數值小於0時跳轉
0x9c
ifge
當棧頂int型數值大於等於0時跳轉
0x9d
ifgt
當棧頂int型數值大於0時跳轉
0x9e
ifle
當棧頂int型數值小於等於0時跳轉
0x9f
if_icmpeq
比較棧頂兩int型數值大小,當結果等於0時跳轉
0xa0
if_icmpne
比較棧頂兩int型數值大小,當結果不等於0時跳轉
0xa1
if_icmplt
比較棧頂兩int型數值大小,當結果小於0時跳轉
0xa2
if_icmpge
比較棧頂兩int型數值大小,當結果大於等於0時跳轉
0xa3
if_icmpgt
比較棧頂兩int型數值大小,當結果大於0時跳轉
0xa4
if_icmple
比較棧頂兩int型數值大小,當結果小於等於0時跳轉
0xa5
if_acmpeq
比較棧頂兩引用型數值,當結果相等時跳轉
0xa6
if_acmpne
比較棧頂兩引用型數值,當結果不相等時跳轉
0xa7
goto
無條件跳轉
0xa8
jsr
跳轉至指定16位offset位置,並將jsr下一條指令地址壓入棧頂
0xa9
ret
返回至本地變數指定的index的指令位置(一般與jsr, jsr_w聯合使用)
0xaa
tableswitch
用於switch條件跳轉,case值連續(可變長度指令)
0xab
lookupswitch
用於switch條件跳轉,case值不連續(可變長度指令)
0xac
ireturn
從當前方法返回int
0xad
lreturn
從當前方法返回long
0xae
freturn
從當前方法返回float
0xaf
dreturn
從當前方法返回double
0xb0
areturn
從當前方法返回對象引用
0xb1
return
從當前方法返回void
0xb2
getstatic
獲取指定類的靜態域,並將其值壓入棧頂
0xb3
putstatic
為指定的類的靜態域賦值
0xb4
getfield
獲取指定類的實例域,並將其值壓入棧頂
0xb5
putfield
為指定的類的實例域賦值
0xb6
invokevirtual
調用實例方法
0xb7
invokespecial
調用超類構造方法,實例初始化方法,私有方法
0xb8
invokestatic
調用靜態方法
0xb9
invokeinterface
調用介面方法
0xba
—
0xbb
new
創建一個對象,並將其引用值壓入棧頂
0xbc
newarray
創建一個指定原始類型(如int, float, char…)的數組,並將其引用值壓入棧頂
0xbd
anewarray
創建一個引用型(如類,介面,數組)的數組,並將其引用值壓入棧頂
0xbe
arraylength
獲得數組的長度值並壓入棧頂
0xbf
athrow
將棧頂的異常拋出
0xc0
checkcast
檢驗類型轉換,檢驗未通過將拋出ClassCastException
0xc1
instanceof
檢驗對象是否是指定的類的實例,如果是將1壓入棧頂,否則將0壓入棧頂
0xc2
monitorenter
獲得對象的鎖,用於同步方法或同步塊
0xc3
monitorexit
釋放對象的鎖,用於同步方法或同步塊
0xc4
wide
待補充
0xc5
multianewarray
創建指定類型和指定維度的多維數組(執行該指令時,操作棧中必須包含各維度的長度值),並將其引用值壓入棧頂
0xc6
ifnull
為null時跳轉
0xc7
ifnonnull
不為null時跳轉
0xc8
goto_w
無條件跳轉(寬索引)
0xc9
jsr_w
跳轉至指定32位offset位置,並將jsr_w下一條指令地址壓入棧頂
編譯java程序需要使用什麼命令
編譯命令是 javac
首先使用記事本編輯一段簡單的Java代碼
然後保存為HelloWorld.java文件(注意類名需要和文件名保持一致)
3.打開cmd命令行
4.進入HelloWorld.java所在的目錄
5.輸入javac HelloWorld.java命令,輸入完成後按下回車鍵
6.執行完javac命令後會看到文件夾下多出了一個HelloWorld.class文件
7.進入HelloWorld.class的目錄下,執行java HelloWorld命令,執行完成後會看到執行結果
北大青鳥java培訓:位元組碼指令的編譯與執行?
java編程開發是目前市場上使用範圍非常廣泛的一種編程開發語言。
今天我們就一起來了解一下,在java編程中關於位元組碼的一些指令的編譯與執行方法。
java文件編譯後的class文件,java跨平台的中間層,JVM通過對位元組碼的解釋執行(執行模式,還有JIT編譯執行,下面講解),屏蔽對操作系統的依賴。
一個位元組(8位)可以儲存256中不同的指令,這樣的指令就是位元組碼,java所有指令有200個左右,這些指令組成了位元組碼文件(.class)。
一、位元組碼的主要指令:.class文件裡面的十六進位文件,其中CAFEBABE是標誌這個文件為java的編譯後的文件,00000034代表版本號,01670700一個位元組(8位)就是一個位元組指令,由於數值指令太難看懂,我們可以用javap將指令翻譯為助記指令。
1、載入或儲存指令在棧幀中,通過指令操作數據在局部變數表與操作棧間傳遞。
ILOAD、ALOAD:將int、對象引用類型從局部變數表壓入操作棧頂;ISTORE、ASTORE:將int、對象引用類型從操作棧頂儲存到局部變數表裡;ICONST、BIPUSH、SIPUSH、LDC:將常亮載入到操作棧頂。
2、運算指令對操作棧上的值進行運算,並把結果寫入操作棧頂,如IADD、IMUL。
3、類型轉換指令I2L、D2F4、對象創建與訪問指令NEW除了位元組碼指令外,海南電腦培訓認為還包括像LINENUMBER儲存位元組碼與源碼對應,方便調試定位;LOCALVARIABLE儲存當前方法使用到的局部表量表。
二、java源碼文件轉化為位元組碼(.class)文件的過程JAVA源文件———-詞法解析———-語法解析———-語義分析———生成位元組碼———位元組碼文件詞法分析:根據空格分割出單詞、操作符等,形成token信息流;語法分析:根據token流和java語法規範生成語法樹;語義分析:檢查關鍵字、類型匹配是否正確;
javac命令和java命令做什麼事情呢?
javac用來編譯java文件,java用來執行。
1,javac命令用來編譯java文件,例如編寫一個Test.java文件,使用javac Test.java可以執行編譯操作,將生成一個Test.class文件。
2,java命令可以執行生成的class文件,使用java Test可以執行編寫的代碼。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/232578.html