invokevirtual、invokespecial、invokestatic、invokeinterface、invokedynamic介绍
来源:互联网 发布:淘宝网人民法院拍卖 编辑:程序博客网 时间:2024/06/08 02:44
如表格所示:
invokevirtual
Invoke instance method; dispatch based on class执行一般实例方法,创建完实例对象后,obj.method()调用的
invokespecial
Invoke instance method; special handling for superclass, private, and instance initialization method invocations
实例初始化方法(构造函数)、父类的方法(super.method()方式调用)、私有方法
invokeinterface
Invoke interface method
执行接口方法
invokestatic
Invoke a class (static) method
执行静态方法
invokedynamic
Invoke dynamic method
jdk1.7新增,执行动态方法,不需要在编译时确定举个例子:
package org.zheng.jvmcmd;/** * Create by zxb on 2017/4/16 */class SuperClass { public String method() { return "from SuperClass..."; } public void otherMethod() { System.out.println("In SuperClass otherMethod()..."); System.out.println("SuperClass otherMethod() calls method(): " + method()); //invokevirtual编译时确定 }}class SubClass extends SuperClass { public String method() { return "from SubClass..."; } public void subMethod() { System.out.println("SubClass calls super.method(): " + super.method()); //invokespecail privateMethod(); //invokespeical } private void privateMethod() { System.out.println("This is private Method From SubClass"); }}interface ITest { void print();}class TestImpl implements ITest { public void print() { System.out.println("print in TestImpl..."); }}public class InvokeTest { public static void staticMethod() { System.out.println("I am static method.."); } public static void main(String args[]) { staticMethod(); //invokestatic SubClass b = new SubClass(); //invokespecial 初始化 SuperClass supper = b; //向上转型引用 System.out.println(supper.method());//invokevirtual,当前引用的对象是b b.subMethod(); //invokevirtual b.otherMethod(); //invokevirtual ITest iTest = new TestImpl(); //invokespcial 初始化 iTest.print(); //invokeinterface }}
使用命令javac -encoding UTF-8 InvokeTest.java
使用命令javap -p -v InvokeTest.class
使用命令javap -p -v SuperClass.class
使用命令javap -p -v SubClass.class
0 0
- invokevirtual、invokespecial、invokestatic、invokeinterface、invokedynamic介绍
- invokevirtual,invokespecial,invokestatic,invokeinterface
- invokespecial和invokevirtual两种指令
- Java字节码中invokespecial与invokevirtual指令的解析
- 代码模拟invokedynamic指令invokevirtual指令调用方法
- Java调用重载方法(invokevirtual)和接口方法(invokeinterface)的解析
- 多态在JVM中的实现——invokevirtual与invokespecial
- invokevirtual
- 指令invokespecial
- invokespecial指令
- JVM规范学习:invokestatic
- JVM规范学习:invokeinterface
- JVM规范学习:invokevirtual
- JVM规范学习:invokespecial
- JVM规范学习:invokedynamic
- Java中的invokedynamic
- java7 invokedynamic学习笔记
- invokedynamic与lambda表达式
- Longest Palindrome问题及解法
- 编码相关问题整理
- 模拟时间片轮转算法(C++)
- JavaScript基础
- vs2010添加外部头文件
- invokevirtual、invokespecial、invokestatic、invokeinterface、invokedynamic介绍
- 单例模式
- Binary Watch问题及解法
- 安卓开发中将activity设成translucent导致输入法遮挡edittext,windowSoftInputMode设置无效问题
- ORA 各种oraclesql错误
- ACdream 1031 Cut
- 【字符串】最长无重复子串Longest Substring Without Repeating Characters
- Dubbo学习(五)结果缓存
- 策略模式使用的小技巧