实现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下都编译通过。

你可能感兴趣的:(jvm jvm实现)