Java指令集:GETSTATIC_极悦注册
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java指令集:GETSTATIC

Java指令集:GETSTATIC

更新时间:2022-08-30 10:42:15 来源:极悦 浏览944次

本文章向大家介绍JAVA指令集——GETSTATIC,主要包括JAVA指令集——GETSTATIC使用实例、应用技巧、基本知识点总结和需要注意事项。

(indexbyte1<<8)|indexbyte2——得到index

1.从runtimeconstantpool中取得index处的运行时常量A,A必须是指向字段的符号引用

FieldRef fieldRef = (FieldRef) runtimeConstantPool.getConstant(index);

2.A为指向字段B的符号引用,取得字段B的名字和描述符(要先取得字段B),以及字段B要所找的类或接口(也就是字段B所属的类或接口)

          field = fieldRef.getResolvedFieldRef();
          JClass targetClazz = field.getClazz();

3.检查字段B所属的类是否已被初始化,如果没有,就初始化

if (targetClazz.getInitState() == InitState.PREPARED) {
                frame.setNextPC(frame.getNextPC() - 3);//opcode + operand = 3bytes
                targetClazz.initClass(frame.getThread(), targetClazz);
                return;
            }

4.如果Field是不是静态字段,抛出IncompatibleClassChangeError()

if (!field.isStatic()) {
                throw new IncompatibleClassChangeError();
            }

5.字段B的值存储在字段所属的类(接口)中的staticVars中,索引为slotID.

我们要取出这个值,放到栈帧的操作数栈中

String descriptor = field.getDescriptor();
            int slotID = field.getSlotID();
            Vars staticVars = targetClazz.getStaticVars();
            OperandStack stack = frame.getOperandStack();
            switch (descriptor.charAt(0)) {
                case 'Z':
                case 'B':
                case 'C':
                case 'S':
                case 'I':
                    stack.pushInt(staticVars.getInt(slotID));
                    break;
                case 'F':
                    stack.pushFloat(staticVars.getFloat(slotID));
                    break;
                case 'J':
                    stack.pushLong(staticVars.getLong(slotID));
                    break;
                case 'D':
                    stack.pushDouble(staticVars.getDouble(slotID));
                    break;
                case 'L':
                case '[':
                    stack.pushObjectRef(staticVars.getObjectRef(slotID));
                    break;
                default:

 

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>