|
|
|
|
 请问gcj中的class$是什么意思? - chang2008 [ 2005-07-07 01:43 | 241 byte(s)]
 Re: 请问gcj中的class$是什么意思? - chang2008 [ 2005-07-08 00:38 | 993 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
GCJ中java::lang::Object类的定义里有一个static field:
static java::lang::Class class$;
请问这个东东起什么作用阿?这个东东libjava里面到处用,可是到GCJ里面找又怎么也找不到。实在不明白了,清大家帮帮忙,谢谢
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
哈哈,谢谢大家了,我已经自己搞明白了。这里我说说我的理解,大家一起研究。
首先GCJ中所有的java类都对应一个属于自己的java::lang::Class结构的实例,用以表示这个java类。在GCC的java前端这个东西是编译器生成和管理的。但是GCJ编译出来的整个程序实际是是java和c++的混合,那么C++部分又该如何访问对应于某个java类的java::lang::Class实例呢?
这个就是class$所起的作用了。所有的java API里面的java类都有自己的".h头文件"(除了java.lang.Class和java.lang.Object的,都是用gjavah从java文件里自动生成的)。每个这样的头文件里的类中都有自己的class$静态数据成员:
static java::lang::Class class$;
这就是用来表示java类的那个java::lang::Class结构的实例。由于是静态的,所以每个类有且只有一个。
class$这样一个名称的变量当然不能在GCC的java前端里找到了!因为这个名字根本就不在java范畴,而是在GCC的C++前端。java前端的确也生成相应的variable,并且和C++前端最后都map到内存的同一个地方,不过java前端肯定是不用class$这个名字了。
|
|
|
[Original]
[Print]
[Top]
|
|
|