include指令是編譯階段的指令,即include所包含的文件的內(nèi)容是編譯的時(shí)候插入到JSP文件中,JSP引擎在判斷JSP頁面未被修改,否則視為已被修改。由于被包含的文件是在編譯時(shí)才插入的,因此如果只修改了include文件內(nèi)容,而沒有對JSP修改,得到的結(jié)構(gòu)將不會改變,所以直接執(zhí)行已經(jīng)存在的字節(jié)碼文件,而沒有重新編譯。因此對不經(jīng)常變化的內(nèi)容,用include指令是合適的,如果需要的內(nèi)容是經(jīng)常變化的,則需要動作元素jsp:include.下面將詳細(xì)區(qū)分他們之間的不同
創(chuàng)新互聯(lián)建站從2013年開始,先為岑溪等服務(wù)建站,岑溪等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為岑溪企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
1.include指令
include可以在JSP頁面轉(zhuǎn)換成Servlet之前,將JSP代碼插入其中。它的主要優(yōu)點(diǎn)是功能強(qiáng)大,所包含的代碼可以含有總體上影響主頁面的JSP構(gòu)造,比如屬性、方法的定義和文檔類型的設(shè)定。它的缺點(diǎn)是難于維護(hù)只要被包含的頁面發(fā)生更改,就得更改主頁面,這是因?yàn)橹黜撁娌粫詣拥夭榭幢话捻撁媸欠癜l(fā)生更改。
語法:%@ include file="sample.jsp" %
2.include動作
jsp:include動作是在主頁面被請求時(shí),將次級頁面的輸出包含進(jìn)來。盡管被包含的頁面的輸出中不能含有JSP,但這些頁面可以是其他資源所產(chǎn)生的 結(jié)果。服務(wù)器按照正常的方式對指向被包含資源的URL進(jìn)行解釋,因而這個(gè)URL可以是Servlet或JSP頁面。服務(wù)器以通常的方式運(yùn)行被包含的頁面, 將產(chǎn)生的輸出放到主頁面中,這種方式與RequestDispatcher類的include方法一致。它的優(yōu)點(diǎn)是在被包含的頁面發(fā)生更改時(shí),無須對主頁 面做出修改。它的缺點(diǎn)是所包含的是次級頁面的輸出,而非次級頁面的實(shí)際代碼,所以在被包含的頁面中不能使用任何有可能在整體上影響主頁面的JSP構(gòu)造。
語法: jsp:include page="sample.jsp" flush="true" jsp:param name="name" value="value"/ /jsp:include
其中參數(shù)設(shè)置可以沒有,如果沒有參數(shù)設(shè)置,則必須采用jsp:include page="sample.jsp" flush="true"/形式
3. 使用include動作還是include指令?
使用include指令,如果被包含的文件發(fā)生改變,那么,用到它的所有Jsp頁面都需要更新。
僅當(dāng)include動作不能滿足要求時(shí),我們才應(yīng)該使用include指令。
有 些開發(fā)人員認(rèn)為include指令生成的代碼執(zhí)行起來比使用include動作的代碼更快。盡管原則上由可能的確如此,但性能上的差異很小,以致難以測 量,同時(shí),include動作在維護(hù)上的優(yōu)勢十分巨大,當(dāng)兩種方法都可以使用時(shí),include動作幾乎肯定是首選的方法。
對于文件包含,應(yīng)該盡可能地使用include動作。僅在所包含的文件中定義了主頁面要用到的字段或方法,或所包含的文件設(shè)置了主頁面的響應(yīng)報(bào)頭時(shí),才應(yīng)該使用include指令。
既然include指令產(chǎn)生難以維護(hù)的代碼,為什么人們還要使用它呢?
因?yàn)閕nclude指令更為強(qiáng)大。include指令允許所包含的文件中含有影響主頁面的Jsp代碼,比如響應(yīng)報(bào)頭的設(shè)置和字段、方法的定義。
例子://subpage.jsp
%! int num=0; %
//mainpage.jsp
html
body
%@ include file="subpage.jsp" %
%= num %
/body
/html
當(dāng)然使用include動作時(shí)這是不可能的,因?yàn)閚um變量未定義,主頁面不能成功的轉(zhuǎn)換成servlet。
JMP指令將無條件地控制程序轉(zhuǎn)移到目的地址去執(zhí)行.當(dāng)目的地址仍在同一個(gè)代碼段 ---- 內(nèi),稱為段內(nèi)轉(zhuǎn)移;當(dāng)目標(biāo)地址不在同一個(gè)代碼段內(nèi),則稱為段間轉(zhuǎn)移.這兩種情況都 將產(chǎn)生不同的指令代碼,以便能正確地生成目的地址,在段內(nèi)轉(zhuǎn)移時(shí),指令只要能提 供目的地址的段內(nèi)偏移量即夠了;而在段間轉(zhuǎn)移時(shí),指令應(yīng)能提供目的地址的段地址 及段內(nèi)偏移地址值.
指令碼
助記符
說明
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
將單字節(jié)的常量值(-128~127)推送至棧頂
0x11
sipush
將一個(gè)短整型常量值(-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
將第一個(gè)int型本地變量推送至棧頂
0x1b
iload_1
將第二個(gè)int型本地變量推送至棧頂
0x1c
iload_2
將第三個(gè)int型本地變量推送至棧頂
0x1d
iload_3
將第四個(gè)int型本地變量推送至棧頂
0x1e
lload_0
將第一個(gè)long型本地變量推送至棧頂
0x1f
lload_1
將第二個(gè)long型本地變量推送至棧頂
0x20
lload_2
將第三個(gè)long型本地變量推送至棧頂
0x21
lload_3
將第四個(gè)long型本地變量推送至棧頂
0x22
fload_0
將第一個(gè)float型本地變量推送至棧頂
0x23
fload_1
將第二個(gè)float型本地變量推送至棧頂
0x24
fload_2
將第三個(gè)float型本地變量推送至棧頂
0x25
fload_3
將第四個(gè)float型本地變量推送至棧頂
0x26
dload_0
將第一個(gè)double型本地變量推送至棧頂
0x27
dload_1
將第二個(gè)double型本地變量推送至棧頂
0x28
dload_2
將第三個(gè)double型本地變量推送至棧頂
0x29
dload_3
將第四個(gè)double型本地變量推送至棧頂
0x2a
aload_0
將第一個(gè)引用類型本地變量推送至棧頂
0x2b
aload_1
將第二個(gè)引用類型本地變量推送至棧頂
0x2c
aload_2
將第三個(gè)引用類型本地變量推送至棧頂
0x2d
aload_3
將第四個(gè)引用類型本地變量推送至棧頂
0x2e
iaload
將int型數(shù)組指定索引的值推送至棧頂
0x2f
laload
將long型數(shù)組指定索引的值推送至棧頂
0x30
faload
將float型數(shù)組指定索引的值推送至棧頂
0x31
daload
將double型數(shù)組指定索引的值推送至棧頂
0x32
aaload
將引用型數(shù)組指定索引的值推送至棧頂
0x33
baload
將boolean或byte型數(shù)組指定索引的值推送至棧頂
0x34
caload
將char型數(shù)組指定索引的值推送至棧頂
0x35
saload
將short型數(shù)組指定索引的值推送至棧頂
0x36
istore
將棧頂int型數(shù)值存入指定本地變量
0x37
lstore
將棧頂long型數(shù)值存入指定本地變量
0x38
fstore
將棧頂float型數(shù)值存入指定本地變量
0x39
dstore
將棧頂double型數(shù)值存入指定本地變量
0x3a
astore
將棧頂引用型數(shù)值存入指定本地變量
0x3b
istore_0
將棧頂int型數(shù)值存入第一個(gè)本地變量
0x3c
istore_1
將棧頂int型數(shù)值存入第二個(gè)本地變量
0x3d
istore_2
將棧頂int型數(shù)值存入第三個(gè)本地變量
0x3e
istore_3
將棧頂int型數(shù)值存入第四個(gè)本地變量
0x3f
lstore_0
將棧頂long型數(shù)值存入第一個(gè)本地變量
0x40
lstore_1
將棧頂long型數(shù)值存入第二個(gè)本地變量
0x41
lstore_2
將棧頂long型數(shù)值存入第三個(gè)本地變量
0x42
lstore_3
將棧頂long型數(shù)值存入第四個(gè)本地變量
0x43
fstore_0
將棧頂float型數(shù)值存入第一個(gè)本地變量
0x44
fstore_1
將棧頂float型數(shù)值存入第二個(gè)本地變量
0x45
fstore_2
將棧頂float型數(shù)值存入第三個(gè)本地變量
0x46
fstore_3
將棧頂float型數(shù)值存入第四個(gè)本地變量
0x47
dstore_0
將棧頂double型數(shù)值存入第一個(gè)本地變量
0x48
dstore_1
將棧頂double型數(shù)值存入第二個(gè)本地變量
0x49
dstore_2
將棧頂double型數(shù)值存入第三個(gè)本地變量
0x4a
dstore_3
將棧頂double型數(shù)值存入第四個(gè)本地變量
0x4b
astore_0
將棧頂引用型數(shù)值存入第一個(gè)本地變量
0x4c
astore_1
將棧頂引用型數(shù)值存入第二個(gè)本地變量
0x4d
astore_2
將棧頂引用型數(shù)值存入第三個(gè)本地變量
0x4e
astore_3
將棧頂引用型數(shù)值存入第四個(gè)本地變量
0x4f
iastore
將棧頂int型數(shù)值存入指定數(shù)組的指定索引位置
0x50
lastore
將棧頂long型數(shù)值存入指定數(shù)組的指定索引位置
0x51
fastore
將棧頂float型數(shù)值存入指定數(shù)組的指定索引位置
0x52
dastore
將棧頂double型數(shù)值存入指定數(shù)組的指定索引位置
0x53
aastore
將棧頂引用型數(shù)值存入指定數(shù)組的指定索引位置
0x54
bastore
將棧頂boolean或byte型數(shù)值存入指定數(shù)組的指定索引位置
0x55
castore
將棧頂char型數(shù)值存入指定數(shù)組的指定索引位置
0x56
sastore
將棧頂short型數(shù)值存入指定數(shù)組的指定索引位置
0x57
pop
將棧頂數(shù)值彈出 (數(shù)值不能是long或double類型的)
0x58
pop2
將棧頂?shù)囊粋€(gè)(long或double類型的)或兩個(gè)數(shù)值彈出(其它)
0x59
dup
復(fù)制棧頂數(shù)值并將復(fù)制值壓入棧頂
0x5a
dup_x1
復(fù)制棧頂數(shù)值并將兩個(gè)復(fù)制值壓入棧頂
0x5b
dup_x2
復(fù)制棧頂數(shù)值并將三個(gè)(或兩個(gè))復(fù)制值壓入棧頂
0x5c
dup2
復(fù)制棧頂一個(gè)(long或double類型的)或兩個(gè)(其它)數(shù)值并將復(fù)制值壓入棧頂
0x5d
dup2_x1
待補(bǔ)充
0x5e
dup2_x2
待補(bǔ)充
0x5f
swap
將棧最頂端的兩個(gè)數(shù)值互換(數(shù)值不能是long或double類型的)
0x60
iadd
將棧頂兩int型數(shù)值相加并將結(jié)果壓入棧頂
0x61
ladd
將棧頂兩long型數(shù)值相加并將結(jié)果壓入棧頂
0x62
fadd
將棧頂兩float型數(shù)值相加并將結(jié)果壓入棧頂
0x63
dadd
將棧頂兩double型數(shù)值相加并將結(jié)果壓入棧頂
0x64
isub
將棧頂兩int型數(shù)值相減并將結(jié)果壓入棧頂
0x65
lsub
將棧頂兩long型數(shù)值相減并將結(jié)果壓入棧頂
0x66
fsub
將棧頂兩float型數(shù)值相減并將結(jié)果壓入棧頂
0x67
dsub
將棧頂兩double型數(shù)值相減并將結(jié)果壓入棧頂
0x68
imul
將棧頂兩int型數(shù)值相乘并將結(jié)果壓入棧頂
0x69
lmul
將棧頂兩long型數(shù)值相乘并將結(jié)果壓入棧頂
0x6a
fmul
將棧頂兩float型數(shù)值相乘并將結(jié)果壓入棧頂
0x6b
dmul
將棧頂兩double型數(shù)值相乘并將結(jié)果壓入棧頂
0x6c
idiv
將棧頂兩int型數(shù)值相除并將結(jié)果壓入棧頂
0x6d
ldiv
將棧頂兩long型數(shù)值相除并將結(jié)果壓入棧頂
0x6e
fdiv
將棧頂兩float型數(shù)值相除并將結(jié)果壓入棧頂
0x6f
ddiv
將棧頂兩double型數(shù)值相除并將結(jié)果壓入棧頂
0x70
irem
將棧頂兩int型數(shù)值作取模運(yùn)算并將結(jié)果壓入棧頂
0x71
lrem
將棧頂兩long型數(shù)值作取模運(yùn)算并將結(jié)果壓入棧頂
0x72
frem
將棧頂兩float型數(shù)值作取模運(yùn)算并將結(jié)果壓入棧頂
0x73
drem
將棧頂兩double型數(shù)值作取模運(yùn)算并將結(jié)果壓入棧頂
0x74
ineg
將棧頂int型數(shù)值取負(fù)并將結(jié)果壓入棧頂
0x75
lneg
將棧頂long型數(shù)值取負(fù)并將結(jié)果壓入棧頂
0x76
fneg
將棧頂float型數(shù)值取負(fù)并將結(jié)果壓入棧頂
0x77
dneg
將棧頂double型數(shù)值取負(fù)并將結(jié)果壓入棧頂
0x78
ishl
將int型數(shù)值左移位指定位數(shù)并將結(jié)果壓入棧頂
0x79
lshl
將long型數(shù)值左移位指定位數(shù)并將結(jié)果壓入棧頂
0x7a
ishr
將int型數(shù)值右(符號)移位指定位數(shù)并將結(jié)果壓入棧頂
0x7b
lshr
將long型數(shù)值右(符號)移位指定位數(shù)并將結(jié)果壓入棧頂
0x7c
iushr
將int型數(shù)值右(無符號)移位指定位數(shù)并將結(jié)果壓入棧頂
0x7d
lushr
將long型數(shù)值右(無符號)移位指定位數(shù)并將結(jié)果壓入棧頂
0x7e
iand
將棧頂兩int型數(shù)值作“按位與”并將結(jié)果壓入棧頂
0x7f
land
將棧頂兩long型數(shù)值作“按位與”并將結(jié)果壓入棧頂
0x80
ior
將棧頂兩int型數(shù)值作“按位或”并將結(jié)果壓入棧頂
0x81
lor
將棧頂兩long型數(shù)值作“按位或”并將結(jié)果壓入棧頂
0x82
ixor
將棧頂兩int型數(shù)值作“按位異或”并將結(jié)果壓入棧頂
0x83
lxor
將棧頂兩long型數(shù)值作“按位異或”并將結(jié)果壓入棧頂
0x84
iinc
將指定int型變量增加指定值(i++, i--, i+=2)
0x85
i2l
將棧頂int型數(shù)值強(qiáng)制轉(zhuǎn)換成long型數(shù)值并將結(jié)果壓入棧頂
0x86
i2f
將棧頂int型數(shù)值強(qiáng)制轉(zhuǎn)換成float型數(shù)值并將結(jié)果壓入棧頂
0x87
i2d
將棧頂int型數(shù)值強(qiáng)制轉(zhuǎn)換成double型數(shù)值并將結(jié)果壓入棧頂
0x88
l2i
將棧頂long型數(shù)值強(qiáng)制轉(zhuǎn)換成int型數(shù)值并將結(jié)果壓入棧頂
0x89
l2f
將棧頂long型數(shù)值強(qiáng)制轉(zhuǎn)換成float型數(shù)值并將結(jié)果壓入棧頂
0x8a
l2d
將棧頂long型數(shù)值強(qiáng)制轉(zhuǎn)換成double型數(shù)值并將結(jié)果壓入棧頂
0x8b
f2i
將棧頂float型數(shù)值強(qiáng)制轉(zhuǎn)換成int型數(shù)值并將結(jié)果壓入棧頂
0x8c
f2l
將棧頂float型數(shù)值強(qiáng)制轉(zhuǎn)換成long型數(shù)值并將結(jié)果壓入棧頂
0x8d
f2d
將棧頂float型數(shù)值強(qiáng)制轉(zhuǎn)換成double型數(shù)值并將結(jié)果壓入棧頂
0x8e
d2i
將棧頂double型數(shù)值強(qiáng)制轉(zhuǎn)換成int型數(shù)值并將結(jié)果壓入棧頂
0x8f
d2l
將棧頂double型數(shù)值強(qiáng)制轉(zhuǎn)換成long型數(shù)值并將結(jié)果壓入棧頂
0x90
d2f
將棧頂double型數(shù)值強(qiáng)制轉(zhuǎn)換成float型數(shù)值并將結(jié)果壓入棧頂
0x91
i2b
將棧頂int型數(shù)值強(qiáng)制轉(zhuǎn)換成byte型數(shù)值并將結(jié)果壓入棧頂
0x92
i2c
將棧頂int型數(shù)值強(qiáng)制轉(zhuǎn)換成char型數(shù)值并將結(jié)果壓入棧頂
0x93
i2s
將棧頂int型數(shù)值強(qiáng)制轉(zhuǎn)換成short型數(shù)值并將結(jié)果壓入棧頂
0x94
lcmp
比較棧頂兩long型數(shù)值大小,并將結(jié)果(1,0,-1)壓入棧頂
0x95
fcmpl
比較棧頂兩float型數(shù)值大小,并將結(jié)果(1,0,-1)壓入棧頂;當(dāng)其中一個(gè)數(shù)值為NaN時(shí),將-1壓入棧頂
0x96
fcmpg
比較棧頂兩float型數(shù)值大小,并將結(jié)果(1,0,-1)壓入棧頂;當(dāng)其中一個(gè)數(shù)值為NaN時(shí),將1壓入棧頂
0x97
dcmpl
比較棧頂兩double型數(shù)值大小,并將結(jié)果(1,0,-1)壓入棧頂;當(dāng)其中一個(gè)數(shù)值為NaN時(shí),將-1壓入棧頂
0x98
dcmpg
比較棧頂兩double型數(shù)值大小,并將結(jié)果(1,0,-1)壓入棧頂;當(dāng)其中一個(gè)數(shù)值為NaN時(shí),將1壓入棧頂
0x99
ifeq
當(dāng)棧頂int型數(shù)值等于0時(shí)跳轉(zhuǎn)
0x9a
ifne
當(dāng)棧頂int型數(shù)值不等于0時(shí)跳轉(zhuǎn)
0x9b
iflt
當(dāng)棧頂int型數(shù)值小于0時(shí)跳轉(zhuǎn)
0x9c
ifge
當(dāng)棧頂int型數(shù)值大于等于0時(shí)跳轉(zhuǎn)
0x9d
ifgt
當(dāng)棧頂int型數(shù)值大于0時(shí)跳轉(zhuǎn)
0x9e
ifle
當(dāng)棧頂int型數(shù)值小于等于0時(shí)跳轉(zhuǎn)
0x9f
if_icmpeq
比較棧頂兩int型數(shù)值大小,當(dāng)結(jié)果等于0時(shí)跳轉(zhuǎn)
0xa0
if_icmpne
比較棧頂兩int型數(shù)值大小,當(dāng)結(jié)果不等于0時(shí)跳轉(zhuǎn)
0xa1
if_icmplt
比較棧頂兩int型數(shù)值大小,當(dāng)結(jié)果小于0時(shí)跳轉(zhuǎn)
0xa2
if_icmpge
比較棧頂兩int型數(shù)值大小,當(dāng)結(jié)果大于等于0時(shí)跳轉(zhuǎn)
0xa3
if_icmpgt
比較棧頂兩int型數(shù)值大小,當(dāng)結(jié)果大于0時(shí)跳轉(zhuǎn)
0xa4
if_icmple
比較棧頂兩int型數(shù)值大小,當(dāng)結(jié)果小于等于0時(shí)跳轉(zhuǎn)
0xa5
if_acmpeq
比較棧頂兩引用型數(shù)值,當(dāng)結(jié)果相等時(shí)跳轉(zhuǎn)
0xa6
if_acmpne
比較棧頂兩引用型數(shù)值,當(dāng)結(jié)果不相等時(shí)跳轉(zhuǎn)
0xa7
goto
無條件跳轉(zhuǎn)
0xa8
jsr
跳轉(zhuǎn)至指定16位offset位置,并將jsr下一條指令地址壓入棧頂
0xa9
ret
返回至本地變量指定的index的指令位置(一般與jsr, jsr_w聯(lián)合使用)
0xaa
tableswitch
用于switch條件跳轉(zhuǎn),case值連續(xù)(可變長度指令)
0xab
lookupswitch
用于switch條件跳轉(zhuǎn),case值不連續(xù)(可變長度指令)
0xac
ireturn
從當(dāng)前方法返回int
0xad
lreturn
從當(dāng)前方法返回long
0xae
freturn
從當(dāng)前方法返回float
0xaf
dreturn
從當(dāng)前方法返回double
0xb0
areturn
從當(dāng)前方法返回對象引用
0xb1
return
從當(dāng)前方法返回void
0xb2
getstatic
獲取指定類的靜態(tài)域,并將其值壓入棧頂
0xb3
putstatic
為指定的類的靜態(tài)域賦值
0xb4
getfield
獲取指定類的實(shí)例域,并將其值壓入棧頂
0xb5
putfield
為指定的類的實(shí)例域賦值
0xb6
invokevirtual
調(diào)用實(shí)例方法
0xb7
invokespecial
調(diào)用超類構(gòu)造方法,實(shí)例初始化方法,私有方法
0xb8
invokestatic
調(diào)用靜態(tài)方法
0xb9
invokeinterface
調(diào)用接口方法
0xba
--
0xbb
new
創(chuàng)建一個(gè)對象,并將其引用值壓入棧頂
0xbc
newarray
創(chuàng)建一個(gè)指定原始類型(如int, float, char…)的數(shù)組,并將其引用值壓入棧頂
0xbd
anewarray
創(chuàng)建一個(gè)引用型(如類,接口,數(shù)組)的數(shù)組,并將其引用值壓入棧頂
0xbe
arraylength
獲得數(shù)組的長度值并壓入棧頂
0xbf
athrow
將棧頂?shù)漠惓伋?/p>
0xc0
checkcast
檢驗(yàn)類型轉(zhuǎn)換,檢驗(yàn)未通過將拋出ClassCastException
0xc1
instanceof
檢驗(yàn)對象是否是指定的類的實(shí)例,如果是將1壓入棧頂,否則將0壓入棧頂
0xc2
monitorenter
獲得對象的鎖,用于同步方法或同步塊
0xc3
monitorexit
釋放對象的鎖,用于同步方法或同步塊
0xc4
wide
待補(bǔ)充
0xc5
multianewarray
創(chuàng)建指定類型和指定維度的多維數(shù)組(執(zhí)行該指令時(shí),操作棧中必須包含各維度的長度值),并將其引用值壓入棧頂
0xc6
ifnull
為null時(shí)跳轉(zhuǎn)
0xc7
ifnonnull
不為null時(shí)跳轉(zhuǎn)
0xc8
goto_w
無條件跳轉(zhuǎn)(寬索引)
0xc9
jsr_w
跳轉(zhuǎn)至指定32位offset位置,并將jsr_w下一條指令地址壓入棧頂
javac命令是用來編譯源代碼文件的,即xxx.java文件的, 如:javac Test.java 這樣就會生成Test.class文件。
java 是運(yùn)行java程序的,即執(zhí)行類的,比如:java Test 就可以運(yùn)行剛生成的Test.class文件
Jocky的下載和配置
OperaMasks上的下載鏈接已經(jīng)失效,請移步CSDN自行搜索下載
1、下載完成后解壓得到名為org.apusic.jocky_1.0.3的文件夾,把這個(gè)文件夾放到eclipse根目錄的plugins文件夾下(myeclipse和eclipse同理)。
2、重啟eclipse,右鍵一個(gè)工程文件,出現(xiàn)Jocky選項(xiàng)說明OK。
3、一般是先進(jìn)行設(shè)置-Jocky Settings,然后進(jìn)行Jocky Now!。以下是settings界面
Enable Jocky多選框選中
Jocky build file是在項(xiàng)目創(chuàng)建一個(gè)xml文件,根據(jù)里面的配置進(jìn)行混淆
Scramble level是進(jìn)行混淆的代碼等級,有none、private、package、protected、public、all,將根據(jù)設(shè)置對java文件中的相應(yīng)修飾符修飾的方法代碼進(jìn)行混淆
Target VM是java虛擬機(jī)的版本,有1.4和1.5,一般選擇1.5
Output directory是輸出文件夾,在項(xiàng)目根目錄下
點(diǎn)擊確認(rèn)會自動根據(jù)項(xiàng)目的設(shè)置生成xml文件
4、jocky_build.xml,實(shí)際上是一個(gè)ant build文件,由系統(tǒng)自動生成,有幾處需要說明
pathelement location="bin"/ pathelement location="XXX.jar"/這類標(biāo)簽代表項(xiàng)目編譯所需的jar包,由于是自動生成一般不用理睬,如果出現(xiàn)找不到相關(guān)的package之類的報(bào)錯(cuò),那么有可能是location路徑有問題。如果你安裝系統(tǒng)時(shí)是用戶名設(shè)置成了中文名,并且使用了maven,maven的jar包的下載路徑設(shè)置成了默認(rèn)${user}/.m2/repository/,那么jocky這里的路徑會出現(xiàn)問題,中文名的用戶名會亂碼或者消失,請修改maven配置xml文件修改下載路徑localRepository[自己指定的路徑]/localRepository 。
javac destdir="${jocky.output.dir}/bin" target="${target}" encoding="UTF-8" 代碼中如果有中文名,必須手動設(shè)定編碼,默認(rèn)是沒有的。
src path="src"/ 設(shè)定源文件的目錄,因?yàn)橛袝r(shí)候我們只想輸出src目錄下的部分包而不是全部。