编译原理(十)Java运行系统

本文探讨了Java类转换为C语言的具体过程,包括如何处理非静态属性、方法及静态方法,并深入解析了编译器实现动态绑定的技术细节。

动态绑定规则

当对象o的一个方法可能被自类重写时,如果编译器不能确定o的运行时类型,那么必须对该方法进行动态绑定

将一个java语言的类翻译成c语言的程序段,主要的工作由如下几点(由继承引出的问题暂不考虑)

  • 将Java语言中一个类的所有非静态属性构成一个C语言的结构体类型,取类的名字作为结构体类型的名字
  • 类的静态属性是该类的所有对象所共有的,应当翻译成C中的全局变量,但是需要改一个名字。
  • Java语言中类的对象声明不加翻译就成了C语言中的结构体类型
  • 将java语言中的类的非静态方法翻译成C语言的函数,对应的方法和函数的区别由下面几点:
  1. 函数的名字必须在原来方法名的基础上修改
  2. 函数声明增加一个形参this
  3. 在函数体中出现的函数调用也要增加一个实参
  4. 在方法中对本对象的非静态属性的访问,改成对this相应域的访问。在方法中对其他对象的非静态属性的访问不必修改
  • 类的静态方法在定义和调用的地方都需要改名

编译器怎么样有效地实现动态绑定?

  • 编译器为每个类建立一个方法表,它们包含该类或它的超类中所有接口方法;
  • 每个对象在C程序中由对应的结构体,再为这种结构体增加一个域,该域是方法表的指针
  • 继承类方法表的产生
  1. 首先拷贝基类的方法,被重新定义的方法由新的定义覆盖
  2. 然后把新引入的方法追加打这张表上


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值