java代码不同指令 代码和指令有什么区别

java中include动作和include指令的区别

include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改,否则视为已被修改。由于被包含的文件是在编译时才插入的,因此如果只修改了include文件内容,而没有对JSP修改,得到的结构将不会改变,所以直接执行已经存在的字节码文件,而没有重新编译。因此对不经常变化的内容,用include指令是合适的,如果需要的内容是经常变化的,则需要动作元素jsp:include.下面将详细区分他们之间的不同

创新互联建站从2013年开始,先为岑溪等服务建站,岑溪等地企业,进行企业商务咨询服务。为岑溪企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

1.include指令

include可以在JSP页面转换成Servlet之前,将JSP代码插入其中。它的主要优点是功能强大,所包含的代码可以含有总体上影响主页面的JSP构造,比如属性、方法的定义和文档类型的设定。它的缺点是难于维护只要被包含的页面发生更改,就得更改主页面,这是因为主页面不会自动地查看被包含的页面是否发生更改。

语法:%@ include file="sample.jsp" %

2.include动作

jsp:include动作是在主页面被请求时,将次级页面的输出包含进来。尽管被包含的页面的输出中不能含有JSP,但这些页面可以是其他资源所产生的 结果。服务器按照正常的方式对指向被包含资源的URL进行解释,因而这个URL可以是Servlet或JSP页面。服务器以通常的方式运行被包含的页面, 将产生的输出放到主页面中,这种方式与RequestDispatcher类的include方法一致。它的优点是在被包含的页面发生更改时,无须对主页 面做出修改。它的缺点是所包含的是次级页面的输出,而非次级页面的实际代码,所以在被包含的页面中不能使用任何有可能在整体上影响主页面的JSP构造。

语法: jsp:include page="sample.jsp" flush="true" jsp:param name="name" value="value"/ /jsp:include

其中参数设置可以没有,如果没有参数设置,则必须采用jsp:include page="sample.jsp" flush="true"/形式

3. 使用include动作还是include指令?

使用include指令,如果被包含的文件发生改变,那么,用到它的所有Jsp页面都需要更新。

仅当include动作不能满足要求时,我们才应该使用include指令。

有 些开发人员认为include指令生成的代码执行起来比使用include动作的代码更快。尽管原则上由可能的确如此,但性能上的差异很小,以致难以测 量,同时,include动作在维护上的优势十分巨大,当两种方法都可以使用时,include动作几乎肯定是首选的方法。

对于文件包含,应该尽可能地使用include动作。仅在所包含的文件中定义了主页面要用到的字段或方法,或所包含的文件设置了主页面的响应报头时,才应该使用include指令。

既然include指令产生难以维护的代码,为什么人们还要使用它呢?

因为include指令更为强大。include指令允许所包含的文件中含有影响主页面的Jsp代码,比如响应报头的设置和字段、方法的定义。

例子://subpage.jsp

%! int num=0; %

//mainpage.jsp

html

body

%@ include file="subpage.jsp" %

%= num %

/body

/html

当然使用include动作时这是不可能的,因为num变量未定义,主页面不能成功的转换成servlet。

什么样的java代码 会产生jmp指令

JMP指令将无条件地控制程序转移到目的地址去执行.当目的地址仍在同一个代码段 ---- 内,称为段内转移;当目标地址不在同一个代码段内,则称为段间转移.这两种情况都 将产生不同的指令代码,以便能正确地生成目的地址,在段内转移时,指令只要能提 供目的地址的段内偏移量即够了;而在段间转移时,指令应能提供目的地址的段地址 及段内偏移地址值.

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下一条指令地址压入栈顶

javac命令和java命令做什么事情

javac命令是用来编译源代码文件的,即xxx.java文件的, 如:javac Test.java 这样就会生成Test.class文件。

java 是运行java程序的,即执行类的,比如:java Test 就可以运行刚生成的Test.class文件

java 代码混淆 用什么命令

Jocky的下载和配置

OperaMasks上的下载链接已经失效,请移步CSDN自行搜索下载

1、下载完成后解压得到名为org.apusic.jocky_1.0.3的文件夹,把这个文件夹放到eclipse根目录的plugins文件夹下(myeclipse和eclipse同理)。

2、重启eclipse,右键一个工程文件,出现Jocky选项说明OK。

3、一般是先进行设置-Jocky Settings,然后进行Jocky Now!。以下是settings界面

Enable Jocky多选框选中

Jocky build file是在项目创建一个xml文件,根据里面的配置进行混淆

Scramble level是进行混淆的代码等级,有none、private、package、protected、public、all,将根据设置对java文件中的相应修饰符修饰的方法代码进行混淆

Target VM是java虚拟机的版本,有1.4和1.5,一般选择1.5

Output directory是输出文件夹,在项目根目录下

点击确认会自动根据项目的设置生成xml文件

4、jocky_build.xml,实际上是一个ant build文件,由系统自动生成,有几处需要说明

pathelement location="bin"/ pathelement location="XXX.jar"/这类标签代表项目编译所需的jar包,由于是自动生成一般不用理睬,如果出现找不到相关的package之类的报错,那么有可能是location路径有问题。如果你安装系统时是用户名设置成了中文名,并且使用了maven,maven的jar包的下载路径设置成了默认${user}/.m2/repository/,那么jocky这里的路径会出现问题,中文名的用户名会乱码或者消失,请修改maven配置xml文件修改下载路径localRepository[自己指定的路径]/localRepository 。

javac destdir="${jocky.output.dir}/bin" target="${target}" encoding="UTF-8" 代码中如果有中文名,必须手动设定编码,默认是没有的。

src path="src"/ 设定源文件的目录,因为有时候我们只想输出src目录下的部分包而不是全部。


分享标题:java代码不同指令 代码和指令有什么区别
当前路径:http://csdahua.cn/article/hgdjhi.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流