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

实现invokespecial指令和invokevirtual

阅读更多
自从上次实现new指令之后,我没有马上实现invokespecial指令,因为对于invokespecial指令的理解需要时间。现在基本实现了invokesecial指令,但是在权限检查上遇到一个困难,主要是派生类对于基类protected实例成员(非静态成员)的访问。这个问题暂时忽视了。接着实现了invokevirtual指令,也遇到访问权限方面的疑问。我参考“深入java虚拟机”的一个例子,这个例子测试通过了,如下。

Superclass.java
class Superclass {
	private void interestingMethod() {
		//System.out.println("Superclass's interesting method.");
	}

	void exampleMethod() {
		interestingMethod();
	}
}


Subclass.java
class Subclass extends Superclass {
	void interestingMethod() {
		//System.out.println("Subclass's interesting method.");
	}

	public static void main(String args[]) {
		main();
	}

	public static void main() {
		Subclass me = new Subclass();
		me.exampleMethod();
	}
}


用javac编译上述两个java文件,然后编译和运行虚拟机。虚拟机代码参考附件,同样这一次的版本我在visual studio以及cygwin下都编译通过。
0
4
分享到:
评论

相关推荐

    深入JVM---JVM命令---invokespecial

    然而,`invokespecial`与`invokevirtual`、`invokestatic`和`invokeinterface`等其他方法调用指令有所不同。`invokevirtual`用于调用非私有实例方法,`invokestatic`用于调用静态方法,而`invokeinterface`则用于...

    实现new, getfield, putfield指令

    然后,`invokespecial`指令用来调用对应的构造函数初始化新对象。 2. **getfield 指令**: "getfield"指令用于从对象实例中获取一个字段的值。在Java源代码中,当我们访问一个实例变量,如 `myVariable = obj....

    JVM指令手册_jvm指令手册_

    5. **对象创建与访问指令**:`new`用于创建一个新的对象实例,`aload`和`astore`用于对象引用的加载和存储,`getfield`和`putfield`用于读写对象字段,`invokevirtual`、`invokespecial`、`invokestatic`、`invoke...

    JVM指令查询手册.pdf

    对象操作指令涉及创建对象(如`new`),访问和调用方法(如`invokevirtual`,`invokespecial`),以及字段访问(如`getfield`, `putfield`)。数组操作指令如`iaload`加载数组中的int元素,`iastore`存储int元素到...

    JVM指令码表.zip

    6. **方法调用与返回指令**:`invokevirtual`用于调用对象的虚方法,`invokespecial`用于构造函数调用和私有方法,`return`表示方法的结束。 7. **异常处理指令**:如`athrow`抛出异常,`catch`配合`try-catch`块...

    JVM指令集.docx

    9. **方法调用和返回**:`invokevirtual`用于调用实例方法,`invokespecial`用于调用构造器、私有方法和父类方法,`return`指令表示方法返回。 10. **对象创建和初始化**:`new`指令用于创建新的对象实例,` anew...

    jvm指令手册

    10. **方法调用与返回**:`invokevirtual`、`invokespecial`、`invokestatic` 和 `invokeinterface` 指令用于调用方法,`return` 指令结束方法执行并返回结果。 11. **异常处理**:JVM提供了异常处理框架,通过 `a...

    中文版JVM指令手册.pdf

    JVM指令手册是开发者理解和运用JVM指令的重要资料,其中详细介绍了各个指令的作用、参数以及应用场景。中文版JVM指令手册为那些英语阅读有障碍的开发者提供了方便。 #### 指令分类 ##### 常量推送指令 - `iconst`...

    基于C语言实现的JVM.zip

    6. **动态类型与方法调用**:JVM支持动态类型和虚方法调用,C语言实现需要处理符号引用到直接引用的转换,以及 invokevirtual 和 invokespecial 指令。 7. **异常处理**:JVM需要处理try-catch-finally语句块和异常...

    JVM调用Lambda的表达式实现方法原理详解.docx

    这里主要讨论的是`invokestatic`、`invokespecial`、`invokevirtual`、`invokeinterface`和`invokedynamic`这五种指令。 1. `invokestatic`: 这个指令用于调用静态方法,它不需要任何特定的对象实例,因为静态方法...

    JVM指令手册(Java)

    `invokevirtual`、`invokespecial`、`invokestatic`、`invokeinterface`指令用于调用方法,它们根据方法的特性(虚拟、特殊、静态、接口)来区分。`return`指令则用于结束方法执行并返回结果。 5. 类加载与初始化...

    Java代码指令定义全集.zip

    7. **方法调用**:`invokevirtual`用于调用实例方法,`invokespecial`用于构造器和私有方法,`invokestatic`用于静态方法。 8. **类和对象操作**:`new`指令创建新对象,`aload_0`和`aload_1`等用于加载局部变量表...

    00-JVM指令手册.zip

    - **方法调用指令**:如`invokevirtual`(调用实例方法)、`invokespecial`(调用构造函数或私有方法)等,处理方法调用。 5. **垃圾回收**:JVM的内存管理包括垃圾回收机制,通过`new`指令创建的对象,如果不再被...

    08JVM是怎么实现invokedynamic的?(上)1

    在 Java 中,方法调用会被编译为 invokestatic、invokespecial、invokevirtual 以及 invokeinterface 四种指令。这些指令与包含目标方法类名、方法名以及方法描述符的符号引用捆绑。在实际运行之前,Java 虚拟机将...

    java字节码指令集.docx

    - `invokevirtual`、`invokespecial`、`invokestatic`、`invokeinterface`:调用方法的指令,根据方法调用的类型执行。 Java字节码指令集的设计使得JVM可以高效地解释和执行代码,同时提供了跨平台兼容性。理解...

    Java代码指令定义全集.7z

    4. **类和接口操作指令**:如`aload_0`加载局部变量0(通常为this引用),`invokevirtual`调用实例方法,`invokespecial`调用构造函数或私有方法。 5. **异常处理指令**:`athrow`用于抛出一个异常,`catch`配合try...

    JVM指令手册.pdf

    - `invokevirtual`、`invokespecial`、`invokestatic`、`invokeinterface` 用于调用方法。 JVM指令集是Java字节码的基础,理解这些指令的含义和作用,对于优化Java代码、调试程序以及深入理解JVM的工作原理至关...

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

    invokevirtual、invokeinterface、invokespecial和invokestatic分别处理虚拟方法调用、接口方法调用、特殊方法调用(如构造器、私有方法)和静态方法调用。ireturn、lreturn等返回指令则根据方法返回值的类型决定...

    JVM.rar_jvm_虚拟机

    `invokevirtual`、`invokespecial`、`invokestatic`和`invokeinterface`用于调用方法。 6. **类和数组操作指令**:`checkcast`用于类型检查转换,`instanceof`检查对象是否是特定类或其子类的实例。` anewarray`...

Global site tag (gtag.js) - Google Analytics