繁体   English   中英

java常量池符号参考

[英]java constant pool symbolic reference

类的常量池具有对字段和方法的符号引用。 类的常量池是否包含仅在该类中定义的方法的符号引用或在其超类中定义的方法的引用。

您正在混淆引用声明 常量池仅包含对方法和字段的引用 ,因此,常量池是否包含对超类中声明的方法的引用的问题无法给出明确的答案。

如果类的常量池以某种方式被引用,例如,如果该类调用了超类方法,则该类的常量池可能包含对超类方法的引用。 同样,如果在内部使用,则类的常量池可能包含对自己声明的方法的引用。 但是,如果一个类不调用自己的方法之一,否则不引用它,则在常量池中就不会对其进行引用。

相反,类文件包含其已声明方法的列表,包括其实现代码或注释之类的信息,其条目与常量池共享信息,但包含在常量池中。

更具体地说,常量池中的方法引用由对其他池条目的两个引用组成,一个引用指定了声明类,另一个是“名称和类型”条目,再次由对其他池条目的两个引用组成,指定了方法的名称并输入签名。 相比之下,一个声明的方法显然不需要指定其声明类,它对池有两个直接引用,分别指定名称和类型签名。

因此,当类将方法声明void foo() ,将有两个常量池条目,它们分别是名称foo和类型签名()V ,声明均引用该条目。 如果该类还具有对该方法的引用 (不是强制性的),则还将存在一个指向上述两个条目的“名称和类型”条目,以及一个引用所述“名称和类型”条目的方法引用条目,并指定this名称的类条目类作为声明类。


总而言之,常量池可能包含对任意类方法的引用,包括在自己的类层次结构中声明的方法,但并非必须如此。 声明的方法列表(不要与常量池混淆)将仅包含在此类中声明的方法,包括那些覆盖超类方法的方法,但不包含继承的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM