类的常量池具有对字段和方法的符号引用。 类的常量池是否包含仅在类或超类中定义的方法的引用中定义的方法的符号引用。
答案 0 :(得分:0)
您正在混合引用和声明。常量池只包含方法和字段的引用,因此常量池是否包含对超类中方法声明的引用的问题不能有明确的答案。 / p>
类'常量池可能包含对超类方法的引用,如果以某种方式引用它们,例如如果类调用超类方法。类似地,类的常量池可能包含对其自己声明的方法的引用(如果它们在内部使用)。但是如果一个类没有调用它自己的一个方法而不引用它,那么它就不会在常量池中引用它。
相反,类文件包含其声明的方法列表,包括其实现代码或注释等信息,其条目与常量池共享信息,但常量中包含 not 池。
更具体地说,常量池中的方法引用包含对其他池条目的两个引用,一个指定声明类,另一个是“name& type”条目,同样包含对其他池条目的两个引用,指定方法的名称和类型签名。相反,声明的方法显然不需要指定其声明类,它有两个对池的直接引用,指定名称和类型签名。
因此当类声明方法void foo()
时,名称foo
和类型签名()V
将有两个常量池条目,其中声明是指。如果该类还具有该方法的引用(非强制性),则还将存在指向上述两个条目的“名称和类型”条目以及引用所述“方法”的方法引用条目。 name& type“entry和class entry,指定this
类作为声明类。
总而言之,常量池可能包含对任意类方法的引用,包括在自己的类层次结构中声明但不必的类。声明的方法列表(不要与常量池混淆)只包含在此类中声明的方法,包括覆盖超类方法但没有继承方法的方法。