方法调用问题
class GrandFather {
void thinking() {
System.out.println("i am grandfather");
}
}
class Father extends GrandFather {
void thinking() {
System.out.println("i am father");
}
}
class Son extends Father {
void thinking() {
// 请读者在这里填入适当的代码(不能修改其他地方的代码)
// 实现调用祖父类的thinking()方法,打印"i am grandfather"
}
}
Java程序中,可以服务器托管网通过“super”关键字很方便地调用到父类中的方法,但如何访问祖类的方法
使用MethodHandles
void thinking() {
try {
MethodType mt = MethodType.methodType(void.class);
Field lookupImpl = MethodHandles.Lookup.class.getDeclaredField("IMPL_LOOKUP");
lookupImpl.setAccessible(true);
MethodHandle mh = ((MethodHandles.Lookup) lookupImpl.get(null)).findSpecial(GrandFather.class,"thinking", mt, GrandFather.class);
mh.invoke(this);
} catch (Throwable e) {
}
}
基于栈的字节码解释执行引擎
执行引擎
基于栈的指令集与基于寄存器的指令集
Javac编译器输出的字节码指令流,基本上[1]是一种基于栈的指令集架构(Instruction SetArchitecture,ISA),字节码指令流里面的指令大部分都是零地址指令,服务器托管网它们依赖操作数栈进行工作。
基于栈的指令集主要优点是可移植,因为寄存器由硬件直接提供,程序直接依赖这些硬件寄存器则不可避免地要受到硬件的约束。栈架构指令集的主要缺点是理论上执行速度相对来说会稍慢一些
基于栈的解释器执行过程
示例字节码
public int calc();
Code:
Stack=2, Locals=4, Args_size=1
0: bipush 100
2: istore_1
3: sipush 200
6: istore_2
7: sipush 300
10: istore_3
11: iload_1
12: iload_2
13: iadd
14: iload_3
15: imul
16: ireturn
}
操作数入栈 遇到符号出栈计算
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: rabbit MQ的延迟队列处理模型示例(基于SpringBoot延时插件实现)
rabbitMQ安装插件rabbitmq-delayed-message-exchange 交换机由此type 表示组件安装成功 生产者发送消息时设置延迟值 消息在交换机滞纳至指定延迟后,进入队列,被消费者消费。 组件注解类: package com.esin…