`
simpleman7210
  • 浏览: 18782 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

实现getstatic和putstatic

阅读更多
继上次实现了静态方法调用之后,又实现了对静态字段的读写,即getstatic和putstatic指令。通过了下面一段java代码的测试。
public class ClassHasStaticField
{
private static boolean _z;
private static byte _b;
private static char _c;
private static short _si;
private static int _i;
private static float _f;
private static long _l;
private static double _d;
public static void main()
{
_z = true;
boolean z = _z;
if (z != _z) return;
_b = 100;
byte b = _b;
if (b != _b) return;
_si = 300;
short si = _si;
if (si != _si) return;
_c = 'a';
char c =  _c;
if (c != _c) return;
_i = 200;
int i = _i;
if (i != _i) return;
_f = 34.12f;
float f = _f;
if (f != _f) return;
_d = 21.123456;
double d = _d;
if (d != _d) return;
_l = 123456789;
long l = _l;
if (l != _l) return;
}

}

测试时,仍然是先编译这个java类,然后编译和运行虚拟机,源代码请参考附件。
分享到:
评论

相关推荐

    java相关的2024面试题集锦

    - 遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候、读取或者设置一个类...

    12.虚拟机的加载机制1

    5. 如果使用jdk1.7的动态语言支持,是,如果一个Java.lang.invoke.MethodHandle实例最后的解析结果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,并且这个方法句柄所对应类没有初始化,则先触发其初始...

    Java虚拟机(字节码介绍)1

    访问字段的指令如getfield、putfield处理实例字段,getstatic、putstatic处理静态字段。数组元素的存取通过baload、iastore等指令实现,arraylength指令获取数组长度,instanceof和checkcast用于检查对象是否属于...

    提高Java程序动态性的一个新途径.pdf

    在Java程序开发领域,动态性的提升一直是软件工程师和研究...它不仅拓宽了Java的应用范围,还为Java程序的设计和实现提供了新的可能性。这种方法的研究和应用,对于提升Java语言在动态编程领域的竞争力有着重要意义。

    分析Java类加载全过程

     1、遇到new,getstatic,putstatic,invokestatic这4条字节码指令时,加入类还没进行初始化,则马上对其进行初始化工作。其实是3种情况:用new实例化一个类时、读取或者设置类的静态字段时(不包括

    Java类装载过程_.docx

    - 访问或修改类的静态字段(getstatic或putstatic指令,但final static字段除外) - 使用反射API(如Class类的方法或java.lang.reflect包中的类) - 初始化类的子类(除非是接口) - 虚拟机启动时指定的启动类(main...

    2 类加载子系统.md,学习代码

    类的加载通常在遇到new、getstatic、putstatic或invokestatic这四个字节码指令时触发,但也可以通过`Class.forName()`或`ClassLoader.loadClass()`等方法手动触发。 7. **类加载的最佳实践** - 合理设计类的加载...

    java中关于类加载的资料

    当遇到以下情况时,会触发类的初始化:1) 遇到new、getstatic、putstatic或invokestatic这四条字节码指令时;2) 初始化一个类的子类时;3) 调用java.lang.reflect包的方法对类进行反射调用时;4) 使用JDK 7及以后...

    深入理解JVM之类加载机制详解

    "深入理解JVM之类加载机制详解" 本文主要介绍了深入理解JVM之类...本文通过详细分析类加载机制的原理、过程和实现,提供了一个深入理解JVM之类加载机制的概述,希望能够帮助读者更好地理解Java虚拟机的类加载机制。

    浅谈Java中对类的主动引用和被动引用

    1. 遇到 new、getstatic、putstatic、invokestatic 等四条字节码指令时,如果类还没有初始化,就会被初始化。 2. 通过反射来访问类的成员变量或方法。 3. 在子类初始化之前,父类会被初始化。 4. 包含 main 方法的类...

    详解JAVA类加载机制

    1. 遇到new、getstatic、putstatic或invokestatic这四条字节码指令时,如果类没有进行过初始化,则需要先对其进行初始化。 2. 使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则...

    通过Java字节码发现有趣的内幕之初始化篇(下)Java开

    例如,`new`指令用于创建对象,`invokespecial`用于调用构造函数,`getstatic`和`putstatic`则分别用于访问和修改静态字段。通过阅读和分析字节码,我们可以洞察到程序的运行流程,找出性能瓶颈,甚至实现一些高级的...

    CstFieldRef.rar_cst

    同样,对于静态字段,`GETSTATIC`和`PUTSTATIC`指令也需要`CstFieldRef`来确定要访问的静态字段。 Android的DexFile结构中,`CstFieldRef`的实例是通过` DexFile::FieldIdItem`来表示的,这个结构体包含了`...

    JVM指令查询手册.pdf

    `getstatic`和`putstatic`访问类的静态字段,而`invokevirtual`和`invokeinterface`用于实例方法和接口方法的调用,这些都是Java反射机制的基础。 10. **内存管理** JVM内存模型包括堆、栈、方法区等区域。`...

    JAVA面试题

    - 遇到new关键字、getstatic、putstatic或invokestatic这四条字节码指令时,如果这四条字节码指令所引用的类没有进行过初始化,则需要先触发其初始化。 - 使用java.lang.reflect包的方法对类进行反射调用的时候,...

    jvm-java字节码规则.pdf

    `new`指令用于创建新对象,`checkcast`指令用于检查类型转换是否有效,`getfield`和`putfield`用于获取和设置对象字段的值,`getstatic`和`putstatic`用于获取和设置静态字段的值,`instanceof`指令用于检查对象是否...

    JAVA类加载机制与动态代理

    1. **当遇到`new`、`getstatic`、`putstatic`或`invokestatic`这四条字节码指令时**,例如使用`new`关键字实例化对象、读取或设置一个类的静态字段(被`static`关键字修饰)、以及调用一个类的静态方法时。...

    java类加载知识点整理

    - 遇到`new`、`getstatic`、`putstatic`或`invokestatic`字节码指令时; - 使用`java.lang.reflect`包的方法对类进行反射调用时; - 初始化子类时,若父类未初始化则需先初始化父类; - 虚拟机启动时初始化包含`...

    Java类加载

    1. **遇到 `new`、`getstatic`、`putstatic` 或 `invokestatic` 这四条字节码指令时**。 2. **使用 `java.lang.reflect` 包的方法对类进行反射调用时**。 3. **当初始化一个类的时候,发现其父类还没有进行过初始化...

Global site tag (gtag.js) - Google Analytics