关于方法调用,Java提供了5个字节码指令。
invokestatic:调用类方法(编译阶段确定方法调用版本)。
invokespecial:调用构造器方法、私有方法及父类方法(编译阶段确定方法调用版本)。
invokevirtual:调用实例方法(虚方法)。
invokeinterface:调用接口方法,在运行再确定一个实现此接口的对象。
invokedynamic:由用户引导方法决定。
invokestatic和invokespecial指令在类加载时,就能把符号引用(即逻辑地址,与虚拟机内存无关)解析为直接引用,符合这个条件的有静态方法、实例构造器方法、私有方法、父类方法这4类,叫非虚方法。
非虚方法除了上面静态方法、实例构造器方法、私有方法、父类方法这4种方法之外,还包括final方法。虽然final方法使用invokevirtual指令来调用,但是final方法无法被覆盖,没有其他版本,无需对方法接收者进行多态选择,或者说多态选择的结果是唯一的。
---------------------
作者:Java小萧
来源:CSDN
原文:https://blog.csdn.net/qq_43202482/article/details/88350809
版权声明:本文为博主原创文章,转载请附上博文链接! |
|