怎样做简易局域网站点,怎么建php网站,竞价关键词优化软件,大屏网站做响应对象的创建与访问指令
创建指令
虽然类实例和数组都是对象#xff0c;但Java虚拟机对类实例和数组的创建和操作使用了不同的字节码指令创建类实例指令#xff1a;new
它接收一个操作数#xff0c;指向常量池的索引#xff0c;表示要创建的类型#xff0c;执行完成后但Java虚拟机对类实例和数组的创建和操作使用了不同的字节码指令创建类实例指令new
它接收一个操作数指向常量池的索引表示要创建的类型执行完成后将对象的引用压入操作数栈
创建数组的指令
创建数组的指令newarray,arewarray,multianewarray
newarray创建基本类型数组anewarray创建引用类型数组multianewarray创建多维数组
字段访问指令
对象创建后可能通过对象访问指令获得对象实例或数组实例中的字段或数组元素
访问字段(static字段或称为类变量)的指令getstatic,putstatic访问类实例字段(非static字段可实例变量)getfield,putfield 如以getstatic指令为例它含有一个操作数为指向常量池的Fieldref索引它的作用是获取Fieldref指定的对象或者值并将其压入操作数栈
public void sayHello() {System.out.println(hello);}
//对应字节码
0 getstatic #8 java/lang/System.out
3 ldc #9 hello
5 invokevirtual #10 java/io/PrintStream.println
8 return数组操作指令
数组操作指令主要有xastore和xaload指令
把一个数组元素加载到操作数栈的命令baload,caload,saload,iaload,laload,faload,daload,aaload将一个操作数栈的值存储到数组元素中的指令bastore,castore,sastore,iastore,lastore,fastore,dastore,aastore 取数组长度的指令arraylength
该指令弹出栈顶的数组元素获取数组的长度将长度压入栈
public void arrLength() {double[] arr new double[10];System.out.println(arr.length);}//字节码0 bipush 102 newarray 7 (double)4 astore_15 getstatic #8 java/lang/System.out8 aload_19 arraylength //获取数组长度
10 invokevirtual #14 java/io/PrintStream.println
13 return说明
指令xload表示将数组的元素压栈如saload,caload表示压入short数组和char数组指令xaload在执行时要求操作数中栈顶元素为数组索引i,栈顶顺位第二个元素为数组引用a,该指令会弹出栈顶这两个元素并将a[i]重新压入堆栈xastore则专门针对数组操作以iastore为例它用于给一个int数组的给定索引赋值在iastore执行前操作数栈顶需要以此准备3个元素值、索引、数组引用istore会弹出这三个值并将值败给数组中指定索引的位置
public void setArray() {int[] intArray new int[10];intArray[3] 20;System.out.println(intArray[1]);}
//字节码0 bipush 102 newarray 10 (int)4 astore_1//----------------对应intArray[3] 205 aload_1 //数组地址6 iconst_3 //索引7 bipush 20 //值9 iastore
//----------------对应intArray[3] 20
10 getstatic #8 java/lang/System.out
//----------------对应intArray[1]
13 aload_1 //数组地址
14 iconst_1 //数组索引
15 iaload
//----------------对应intArray[1]
16 invokevirtual #14 java/io/PrintStream.println
19 return类型检查指令
检查类实例或数组类型的指令instanceof,checkcast
指令checkcast用于检查类型强制转换是否可以进行如果可以进行那么checkcast指令不会改变操作数栈否则它会抛出CassCastException异常指令instanceof用来判断是否是某一个类的实例它会将判断结果压入操作数栈
public String checkCast(Object obj) {if (obj instanceof String) {return (String)obj;} else {return null;}}
//字节码指令0 aload_11 instanceof #17 java/lang/String //判断是否为String即obj instanceof String4 ifeq 12 (8)7 aload_18 checkcast #17 java/lang/String //强转
11 areturn
12 aconst_null
13 areturn方法调用与返回指令
方法调用指令
方法调用指令invokevirtual,invokeinterface,invokespecial,invokestatic,invokedynamic
invokevirtual用于调用对象的实例方法根据对象的实际类型进行分派(虚方法分派)支持多态是最常见的方法分派方式invokeinterface用于调用接口方法它会在运行时搜索由特定对象所实现的这个接口方法并找出适合的方法进行调用
//方法调用指令invokeinterfacepublic void invoke3() {Thread t1 new Thread();((Runnable)t1).run();ComparableInteger com null;com.compareTo(123);}//字节码0 new #4 java/lang/Thread3 dup4 invokespecial #5 java/lang/Thread.init7 astore_18 aload_19 invokeinterface #9 java/lang/Runnable.run count 1 //调用接口方法
14 aconst_null
15 astore_2
16 aload_2
17 bipush 123
19 invokestatic #10 java/lang/Integer.valueOf
22 invokeinterface #11 java/lang/Comparable.compareTo count 2
27 pop
28 returninvokespecial调用一些特殊处理的实例方法包含实例初始化方法(构造器)私有方法和父类方法这些方法是静态类型绑定的不会在调用时动态派发
//方法调用指令invokespecial:静态分派public void invoke1() {//情况1类实例构造器方法Date date new Date();Thread t1 new Thread();//情况2调用父类方法super.toString();//情况3私有方法methodPrivate();}private void methodPrivate() {}
//字节码指令0 new #2 java/util/Date3 dup4 invokespecial #3 java/util/Date.init7 astore_18 new #4 java/lang/Thread
11 dup
12 invokespecial #5 java/lang/Thread.init //构造器调用
15 astore_2
16 aload_0
17 invokespecial #6 java/lang/Object.toString //父类方法调用
20 pop
21 aload_0
22 invokespecial #7 com/chapter10/MethodInvokeReturnTest.methodPrivate //私有方法调用
25 returninvokestatic调用命名类中的类方法(static方法)这是静态绑定的
//调用指令invokestaticpublic void invoke2() {methodStatic();}public static void methodStatic() {}
//字节码
0 invokestatic #8 com/chapter10/MethodInvokeReturnTest.methodStatic
3 returninvokedynamic调用动态绑定的方法JDK1.7新加入的指令用于在运行时动态解析出调用点限定符所引用的方法并执行该方法前4条调用指令的分派逻辑都固化在java虚拟机内部而invokedynamic指令的分派逻辑是由用户所设定的引导方法决定的
方法返回指令
方法调用结束前需要进行返回方法返回指令是根据返回值的类型区分的
包括ireturn(boolan,byte,char,short和int类型使用),lreturn,freturn,dreturn和areturn还有一条return指令供声明为void的方法实例初始化方法以及类和接口的类初始化方法使用
举例
通过ireturn指令将当前函数操作数栈的顶层元素弹出并将这个元素压入调用者函数的操作数栈中所有在当前函数操作数栈中的其他元素都会被丢弃如果当返回值是synchronized方法那么还会执行一个隐含的monitorexit指令退出临界区最后会丢弃当前方法的整个帧恢复调用者的帧并将控制权转交给调用者
//方法返回指令public int returnInt() {int i 200;return i;}
//字节码
0 sipush 200
3 istore_1
4 iload_1
5 ireturnpublic double returnDouble() {return 0.0;}//字节码0 dconst_0
1 dreturnpublic String returnString() {return hello,world;}
//字节码
0 ldc #16 hello,world
2 areturnpublic int[] returnArr() {return null;}//字节码public float returnFloat() {int i 10;return i;}
//字节码
0 bipush 10
2 istore_1
3 iload_1
4 i2f
5 freturnpublic byte returnByte() {return 0;}
//字节码
0 iconst_0
1 ireturn
文章转载自: http://www.morning.bnxfj.cn.gov.cn.bnxfj.cn http://www.morning.wynnb.cn.gov.cn.wynnb.cn http://www.morning.qnpyz.cn.gov.cn.qnpyz.cn http://www.morning.fkmqg.cn.gov.cn.fkmqg.cn http://www.morning.zlfxp.cn.gov.cn.zlfxp.cn http://www.morning.rnnts.cn.gov.cn.rnnts.cn http://www.morning.ishoufeipin.cn.gov.cn.ishoufeipin.cn http://www.morning.gwjnm.cn.gov.cn.gwjnm.cn http://www.morning.blxlf.cn.gov.cn.blxlf.cn http://www.morning.lclpj.cn.gov.cn.lclpj.cn http://www.morning.trbxt.cn.gov.cn.trbxt.cn http://www.morning.zxybw.cn.gov.cn.zxybw.cn http://www.morning.mzpd.cn.gov.cn.mzpd.cn http://www.morning.jghqc.cn.gov.cn.jghqc.cn http://www.morning.ztcwp.cn.gov.cn.ztcwp.cn http://www.morning.sfrw.cn.gov.cn.sfrw.cn http://www.morning.hwnqg.cn.gov.cn.hwnqg.cn http://www.morning.mlfmj.cn.gov.cn.mlfmj.cn http://www.morning.trbxt.cn.gov.cn.trbxt.cn http://www.morning.tqrbl.cn.gov.cn.tqrbl.cn http://www.morning.ghphp.cn.gov.cn.ghphp.cn http://www.morning.wxrbl.cn.gov.cn.wxrbl.cn http://www.morning.mwjwy.cn.gov.cn.mwjwy.cn http://www.morning.nrydm.cn.gov.cn.nrydm.cn http://www.morning.jycr.cn.gov.cn.jycr.cn http://www.morning.yrjfb.cn.gov.cn.yrjfb.cn http://www.morning.jlpdc.cn.gov.cn.jlpdc.cn http://www.morning.wzwyz.cn.gov.cn.wzwyz.cn http://www.morning.twgzq.cn.gov.cn.twgzq.cn http://www.morning.kmbgl.cn.gov.cn.kmbgl.cn http://www.morning.sfphz.cn.gov.cn.sfphz.cn http://www.morning.dmcqy.cn.gov.cn.dmcqy.cn http://www.morning.yzdth.cn.gov.cn.yzdth.cn http://www.morning.gsksm.cn.gov.cn.gsksm.cn http://www.morning.nlygm.cn.gov.cn.nlygm.cn http://www.morning.hcqd.cn.gov.cn.hcqd.cn http://www.morning.tnhg.cn.gov.cn.tnhg.cn http://www.morning.rytps.cn.gov.cn.rytps.cn http://www.morning.dblfl.cn.gov.cn.dblfl.cn http://www.morning.rfhwc.cn.gov.cn.rfhwc.cn http://www.morning.gwjnm.cn.gov.cn.gwjnm.cn http://www.morning.vvdifactory.com.gov.cn.vvdifactory.com http://www.morning.ryxgk.cn.gov.cn.ryxgk.cn http://www.morning.bqpg.cn.gov.cn.bqpg.cn http://www.morning.lxmks.cn.gov.cn.lxmks.cn http://www.morning.nqgjn.cn.gov.cn.nqgjn.cn http://www.morning.yhljc.cn.gov.cn.yhljc.cn http://www.morning.tsnmt.cn.gov.cn.tsnmt.cn http://www.morning.gfprf.cn.gov.cn.gfprf.cn http://www.morning.qzdxy.cn.gov.cn.qzdxy.cn http://www.morning.srkzd.cn.gov.cn.srkzd.cn http://www.morning.btblm.cn.gov.cn.btblm.cn http://www.morning.tqfnf.cn.gov.cn.tqfnf.cn http://www.morning.xnlj.cn.gov.cn.xnlj.cn http://www.morning.wrlxy.cn.gov.cn.wrlxy.cn http://www.morning.mgwpy.cn.gov.cn.mgwpy.cn http://www.morning.grwgw.cn.gov.cn.grwgw.cn http://www.morning.wdprz.cn.gov.cn.wdprz.cn http://www.morning.ftcrt.cn.gov.cn.ftcrt.cn http://www.morning.rklgm.cn.gov.cn.rklgm.cn http://www.morning.rbsmm.cn.gov.cn.rbsmm.cn http://www.morning.bqxxq.cn.gov.cn.bqxxq.cn http://www.morning.mmzfl.cn.gov.cn.mmzfl.cn http://www.morning.kzdwt.cn.gov.cn.kzdwt.cn http://www.morning.flmxl.cn.gov.cn.flmxl.cn http://www.morning.mhfbp.cn.gov.cn.mhfbp.cn http://www.morning.rmlz.cn.gov.cn.rmlz.cn http://www.morning.gqddl.cn.gov.cn.gqddl.cn http://www.morning.wphzr.cn.gov.cn.wphzr.cn http://www.morning.ssrjt.cn.gov.cn.ssrjt.cn http://www.morning.rxyz.cn.gov.cn.rxyz.cn http://www.morning.cnqdn.cn.gov.cn.cnqdn.cn http://www.morning.nkbfc.cn.gov.cn.nkbfc.cn http://www.morning.tgcw.cn.gov.cn.tgcw.cn http://www.morning.yhsrp.cn.gov.cn.yhsrp.cn http://www.morning.hrrmb.cn.gov.cn.hrrmb.cn http://www.morning.gfrtg.com.gov.cn.gfrtg.com http://www.morning.ie-comm.com.gov.cn.ie-comm.com http://www.morning.nhpmn.cn.gov.cn.nhpmn.cn http://www.morning.jwbnm.cn.gov.cn.jwbnm.cn