-
- All Superinterfaces:
-
Accessible,Comparable<ReferenceType>,Mirror,Type
- All Known Subinterfaces:
-
ArrayType,ClassType,InterfaceType
public interface ReferenceType extends Type, Comparable<ReferenceType>, Accessible
目标VM中对象的类型。 ReferenceType包含The Java™ Language Specification中定义的类,接口和数组类型。 所有ReferenceType对象都属于以下子接口之一: 类为ClassType,接口为InterfaceType,阵列为ArrayType。 请注意,基本类(例如,Integer.TYPE的reflected type)表示为ClassType。 VM为所有三个创建Class对象,因此从VM角度来看,每个ReferenceType都映射到不同的Class对象。可以通过查询特定
ObjectReference的类型或从VirtualMachine获取所有引用类型的列表来获取ReferenceTypes 。ReferenceType提供对静态类型信息(如方法和字段)的访问,并提供对动态类型信息的访问,例如相应的Class对象和类加载器。
上的任何方法
ReferenceType直接或间接花费ReferenceType作为参数可能抛出VMDisconnectedException如果目标VM断开且VMDisconnectEvent已经或可用于被从读EventQueue。如果目标VM内存
ReferenceType,ReferenceType上直接或间接将ReferenceType作为参数的任何方法都可能抛出VMOutOfMemoryException。上的任何方法
ReferenceType或直接或间接花费ReferenceType作为参数可能抛出ObjectCollectedException如果镜像类型已被卸载。- 从以下版本开始:
- 1.3
- 另请参见:
-
ObjectReference,ObjectReference.referenceType(),VirtualMachine,VirtualMachine.allClasses()
-
-
方法摘要
所有方法 实例方法 抽象方法 Default Methods 变量和类型 方法 描述 List<字段>allFields()返回一个列表,其中包含此类型中声明的每个字段及其超类,实现的接口和/或超接口。List<Location>allLineLocations()返回包含此引用类型中每个可执行源代码行的Location对象的列表。List<Location>allLineLocations(String stratum, String sourceName)返回包含此引用类型中每个可执行源代码行的Location对象的列表。List<方法>allMethods()返回包含此类型中声明的每个方法及其超类,实现的接口和/或超接口的列表。List<String>availableStrata()返回此参考类型的可用层。ClassLoaderReferenceclassLoader()获取加载与此类型对应的类的类加载器对象。ClassObjectReferenceclassObject()返回目标VM中与此类型对应的类对象。byte[]constantPool()以Java虚拟机规范中的类文件格式的constant_pool项的格式返回常量池的原始字节。intconstantPoolCount()返回常量池中的条目数加1。StringdefaultStratum()返回此引用类型的默认层。booleanequals(Object obj)将指定的Object与此ReferenceType进行比较以获得相等性。booleanfailedToInitialize()确定此类的初始化是否失败。字段fieldByName(String fieldName)查找具有给定非模糊名称的可见字段。List<字段>字段()返回包含此类型中声明的每个字段的列表。StringgenericSignature()获取此类型的通用签名(如果有)。ValuegetValue(字段 field)Map<字段,Value>getValues(List<? extends 字段> fields)inthashCode()返回此ObjectReference的哈希码值。List<ObjectReference>instances(long maxInstances)返回此ReferenceType的实例。booleanisAbstract()确定此类型是否声明为abstract。booleanisFinal()确定此类型是否已声明为final。booleanisInitialized()确定此类型是否已初始化。booleanisPrepared()确定是否已准备好此类型。booleanisStatic()确定此类型是否声明为static。booleanisVerified()确定此类型是否已经过验证。List<Location>locationsOfLine(int lineNumber)返回一个List,其中包含映射到给定行号的所有Location个对象。List<Location>locationsOfLine(String stratum, String sourceName, int lineNumber)返回包含映射到给定行号的所有Location对象的List。intmajorVersion()返回类主要版本号,如Java虚拟机规范的类文件格式中所定义。List<方法>methods()返回包含此类型中直接声明的每个方法的列表。List<方法>methodsByName(String name)返回包含具有给定名称的每个可见方法的List。List<方法>methodsByName(String name, String signature)返回一个List,其中包含具有给定名称和签名的每个可见方法。intminorVersion()返回类次要版本号,如Java虚拟机规范的类文件格式中所定义。default ModuleReference模块()获取包含与此类型对应的类的模块对象。Stringname()获取此类型的完全限定名称。List<ReferenceType>nestedTypes()返回包含ReferenceType个对象的List, 这些对象在此类型中声明并且当前已加载到虚拟机中。StringsourceDebugExtension()获取此类型的源调试扩展。StringsourceName()获取与此类型声明对应的源的标识名称。List<String>sourceNames(String stratum)获取与此类型声明对应的所有源的标识名称。List<String>sourcePaths(String stratum)获取与此类型声明对应的源的路径。List<字段>visibleFields()返回包含此类型中每个未隐藏且明确的字段的列表。List<方法>visibleMethods()返回包含此类型声明或继承的每个方法的列表。-
声明方法的接口 com.sun.jdi.Accessible
isPackagePrivate, isPrivate, isProtected, isPublic, modifiers
-
声明方法的接口 java.lang.Comparable
compareTo
-
声明方法的接口 com.sun.jdi.Mirror
toString, virtualMachine
-
-
-
-
方法详细信息
-
name
String name()
获取此类型的完全限定名称。 返回的名称格式化为可能出现在此类型对象的Java编程语言声明中。对于基本类,返回的名称是相应基元类型的名称; 例如,“int”作为
Integer.TYPE表示的类的名称返回。
-
genericSignature
String genericSignature()
获取此类型的通用签名(如果有)。 通用签名在The Java™ Virtual Machine Specification中描述。- 结果
-
包含通用签名的字符串,如果没有通用签名,
null。 - 从以下版本开始:
- 1.5
-
classLoader
ClassLoaderReference classLoader()
获取加载与此类型对应的类的类加载器对象。- 结果
-
ClassLoaderReference镜像类加载器,如果类是通过引导类加载器加载的,null。
-
模块
default ModuleReference module()
- 实现要求:
-
默认实现抛出
UnsupportedOperationException。 - 结果
-
ModuleReference,它镜像目标VM中的模块。 - 异常
-
UnsupportedOperationException- 如果目标虚拟机不支持此操作。 - 从以下版本开始:
- 9
-
sourceName
String sourceName() throws AbsentInformationException
获取与此类型声明对应的源的标识名称。 解释此字符串是源存储库机制的责任。返回的名称取决于VM的默认层(
VirtualMachine.getDefaultStratum())。 在参考实现中,当使用基础层时,返回的字符串是包含此类型声明的源文件的非限定名称。 在其他层中,返回的源名称是该层的第一个源名称。 由于其他语言可能具有多个引用类型的源名称,因此首选使用Location.sourceName()或sourceNames(String)。对于数组(
ArrayType)和基本类,始终抛出AbsentInformationException。- 结果
- 字符串源文件名
- 异常
-
AbsentInformationException- 如果源名称未知
-
sourceNames
List<String> sourceNames(String stratum) throws AbsentInformationException
获取与此类型声明对应的所有源的标识名称。 解释这些名称是源存储库机制的责任。返回的名称用于指定的层(有关层的描述,请参阅
Location)。 在参考实现中,当使用Java编程语言层时,返回的List包含一个元素:一个String,它是包含此类型声明的源文件的非限定名称。 在其他层中,返回的源名称是为该层定义的所有源名称。- 参数
-
stratum- 从声明类型的默认层或从null检索信息的层。 - 结果
- 每个表示源名称的String对象列表
- 异常
-
AbsentInformationException- 如果源名称未知。对于数组(
ArrayType)和基本类,始终抛出AbsentInformationException。 - 从以下版本开始:
- 1.4
-
sourcePaths
List<String> sourcePaths(String stratum) throws AbsentInformationException
获取与此类型声明对应的源的路径。 解释这些路径是源存储库机制的责任。返回的路径用于指定的层(有关层的描述,请参阅
Location)。 在参考实现中,对于未明确指定源路径的层(Java编程语言层从不这样做),返回的字符串是sourceNames(String),前缀为此ReferenceType的包名称转换为平台相关路径。 例如,在Windows平台上,java.lang.Thread将返回包含一个元素的List:"java\lang\Thread.java"。- 参数
-
stratum- 从声明类型的默认层或null检索信息的层。 - 结果
- 每个表示源路径的String对象列表
- 异常
-
AbsentInformationException- 如果源名称未知。对于数组(
ArrayType)和基本类,始终抛出AbsentInformationException。 - 从以下版本开始:
- 1.4
-
sourceDebugExtension
String sourceDebugExtension() throws AbsentInformationException
获取此类型的源调试扩展。并非所有目标虚拟机都支持此操作。 使用
canGetSourceDebugExtension()确定是否支持该操作。- 结果
- 作为字符串的源调试扩展属性
- 异常
-
AbsentInformationException- 如果未指定扩展名 -
UnsupportedOperationException- 如果目标虚拟机不支持此操作 - 请参阅canGetSourceDebugExtension(),
-
isStatic
boolean isStatic()
确定此类型是否声明为static。 只有嵌套类型可以声明为static,因此对于任何包级别类型,数组类型或基本类都返回false。- 结果
-
true如果此类型是静态的; 否则是假的。
-
isAbstract
boolean isAbstract()
确定此类型是否声明为abstract。对于数组(
ArrayType)和基本类,返回值是未定义的。- 结果
-
true如果这种类型是抽象的; 否则是假的。
-
isFinal
boolean isFinal()
确定此类型是否已声明为final。对于数组(
ArrayType)和基本类,返回值始终为true。- 结果
-
true如果这种类型是最终的; 否则是假的。
-
isPrepared
boolean isPrepared()
- 结果
-
true如果准备好这种类型; 否则是假的。
-
isVerified
boolean isVerified()
- 结果
-
true如果验证此类型; 否则是假的。
-
isInitialized
boolean isInitialized()
确定此类型是否已初始化。 有关类验证的定义,请参阅JVM规范。 对于InterfaceType,此方法始终返回与isPrepared()相同的值。对于数组(
ArrayType)和基本类,返回值是未定义的。- 结果
-
true如果初始化此类型; 否则是假的。
-
failedToInitialize
boolean failedToInitialize()
- 结果
-
true如果尝试初始化并失败; 否则是假的。
-
字段
List<字段> fields()
- 结果
-
列表
字段对象; 如果不存在字段,则列表的长度为0。 - 异常
-
ClassNotPreparedException- 如果这个班级尚未准备好。
-
visibleFields
List<字段> visibleFields()
返回包含此类型中每个未隐藏且明确的字段的列表。 包含可以从类或其实例以其简单名称访问的每个字段。 模糊地乘法继承的字段或在最近继承的类中由具有相同名称的字段隐藏的字段不能通过其简单名称访问,并且不包括在返回的列表中。 包括所有其他继承的字段。 有关详细信息,请参阅JLS第8.3节。对于数组(
ArrayType)和基本类,返回的列表始终为空。- 结果
-
一个
字段对象的列表; 如果不存在可见字段,则列表的长度为0。 - 异常
-
ClassNotPreparedException- 如果这个班级尚未准备好。
-
allFields
List<字段> allFields()
返回一个列表,其中包含此类型中声明的每个字段及其超类,实现的接口和/或超接口。 包括所有声明和继承的字段,无论它们是隐藏还是多重继承。对于数组(
ArrayType)和基本类,返回的列表始终为空。- 结果
-
a
字段对象列表; 如果不存在字段,则列表的长度为0。 - 异常
-
ClassNotPreparedException- 如果这个班级尚未准备好。
-
fieldByName
字段 fieldByName(String fieldName)
- 参数
-
fieldName- 包含所需字段名称的字符串。 - 结果
-
镜像找到的字段的
字段对象;如果没有给定名称的字段或给定名称不明确,则返回null。 - 异常
-
ClassNotPreparedException- 如果这个班级尚未准备好。
-
methods
List<方法> methods()
返回包含此类型中直接声明的每个方法的列表。 不包括继承的方法。 构造函数,初始化方法(如果有)以及编译器创建的任何合成方法都包含在列表中。对于数组(
ArrayType)和基本类,返回的列表始终为空。- 结果
-
列表
方法对象; 如果不存在方法,则列表的长度为0。 - 异常
-
ClassNotPreparedException- 如果这个班级尚未准备好。
-
visibleMethods
List<方法> visibleMethods()
返回包含此类型声明或继承的每个方法的列表。 不包括已隐藏或覆盖的超类或超接口的方法。请注意,尽管有这种排除,但返回列表中可能存在具有相同签名的多个继承方法,但最多只能有一个
ClassType的成员。 有关详细信息,请参阅JLS第8.4.6节。对于数组(
ArrayType)和基本类,返回的列表始终为空。- 结果
-
一个
方法对象的列表; 如果不存在可见方法,则列表的长度为0。 - 异常
-
ClassNotPreparedException- 如果这个班级尚未准备好。
-
allMethods
List<方法> allMethods()
- 结果
-
一个
方法对象的列表; 如果不存在方法,则列表的长度为0。 - 异常
-
ClassNotPreparedException- 如果这个班级尚未准备好。
-
methodsByName
List<方法> methodsByName(String name)
返回包含具有给定名称的每个可见方法的List。 这最常用于查找重载方法。不包括重写和隐藏方法。 有关详细信息,请参阅JLS(8.4.6)。
对于数组(
ArrayType)和基本类,返回的列表始终为空。- 参数
-
name- 要查找的方法的名称。 - 结果
-
与给定名称匹配的
方法个对象的列表; 如果找不到匹配的方法,则列表的长度为0。 - 异常
-
ClassNotPreparedException- 如果这个班级尚未准备好。
-
methodsByName
List<方法> methodsByName(String name, String signature)
返回一个List,其中包含具有给定名称和签名的每个可见方法。 签名字符串是目标方法的JNI签名:-
()V -
([Ljava/lang/String;)V -
(IIII)Z
列表中最多一个方法是具体方法和
ClassType的组件; 列表中的任何其他方法都是抽象的。 使用ClassType.concreteMethodByName(java.lang.String, java.lang.String)仅检索匹配的具体方法。对于数组(
ArrayType)和基本类,返回的列表始终为空。- 参数
-
name- 要查找的方法的名称。 -
signature- 要查找的方法的签名 - 结果
-
与给定名称和签名匹配的
方法个对象的列表; 如果找不到匹配的方法,则列表的长度为0。 - 异常
-
ClassNotPreparedException- 如果这个班级尚未准备好。
-
-
nestedTypes
List<ReferenceType> nestedTypes()
返回包含ReferenceType对象的List, 这些对象在此类型中声明并且当前已加载到虚拟机中。 包括静态嵌套类型和非静态嵌套类型(即内部类型)。 本地内部类型(在此引用类型中的某个代码块中声明)也包含在返回的列表中。对于数组(
ArrayType)和基本类,返回的列表始终为空。- 结果
-
嵌套
ReferenceType对象的列表; 如果没有嵌套类型,则列表长度为0。
-
getValue
Value getValue(字段 field)
- 参数
-
字段- 包含请求值的字段 - 结果
-
实例字段的
Value。 - 异常
-
IllegalArgumentException- 如果该字段对此对象的类无效。
-
getValues
Map<字段,Value> getValues(List<? extends 字段> fields)
- 参数
-
字段- 包含请求值的字段对象的列表。 - 结果
-
所请求的
字段对象的地图及其Value。 - 异常
-
IllegalArgumentException- 如果任何字段对此对象的类无效。 -
VMMismatchException- 如果Mirror参数与此镜像不属于同一个VirtualMachine。
-
classObject
ClassObjectReference classObject()
返回目标VM中与此类型对应的类对象。 VM为每种ReferenceType创建类对象:类,接口和数组类型。- 结果
-
目标VM中此引用类型的
ClassObjectReference。
-
allLineLocations
List<Location> allLineLocations() throws AbsentInformationException
返回包含此引用类型中每个可执行源代码行的Location对象的列表。此方法相当于
allLineLocations(vm.getDefaultStratum(),null)- 有关详细信息,请参阅allLineLocations(String,String)。- 异常
-
AbsentInformationException- 如果AbsentInformationException没有行号信息,则此类的非本机非抽象可执行成员。 -
ClassNotPreparedException- 如果这个班级尚未准备好。
-
allLineLocations
List<Location> allLineLocations(String stratum, String sourceName) throws AbsentInformationException
返回包含此引用类型中每个可执行源代码行的Location对象的列表。 每个位置将源行映射到一系列代码索引。 范围的开始可以通过Location.codeIndex()确定。 如果编译器和/或VM已将该行映射到两个或更多个不相交的代码索引范围,则返回的列表可包含特定行号的多个位置。 请注意,相同的源代码行可能在不同的方法中表示不同的代码索引范围。对于数组(
ArrayType)和基本类,返回的列表始终为空。 对于接口(InterfaceType),仅当接口在其类初始化中具有可执行代码时,返回的列表才是非空的。返回列表用于指定的层 (有关层的描述,请参阅
Location)。- 参数
-
stratum-该层来检索或信息null为defaultStratum()。 -
sourceName- 仅在此源文件或null中返回位置以返回位置。 - 结果
-
所有源代码行
Location对象的列表。 - 异常
-
AbsentInformationException- 如果AbsentInformationException没有行号信息,则此类的非本机非抽象可执行成员。 或者,如果SOURCENAME是非null和源名信息不存在。 -
ClassNotPreparedException- 如果这个班级尚未准备好。 - 从以下版本开始:
- 1.4
-
locationsOfLine
List<Location> locationsOfLine(int lineNumber) throws AbsentInformationException
返回一个List,其中包含映射到给定行号的所有Location对象。此方法相当于
locationsOfLine(vm.getDefaultStratum(), null, lineNumber)- 有关详细信息,请参阅locationsOfLine(java.lang.String,java.lang.String,int)。- 参数
-
lineNumber- 行号 - 结果
-
映射到给定行的所有
Location对象的列表。 - 异常
-
AbsentInformationException- 如果AbsentInformationException没有行号信息。 -
ClassNotPreparedException- 如果这个班级尚未准备好。 - 另请参见:
-
VirtualMachine.getDefaultStratum()
-
locationsOfLine
List<Location> locationsOfLine(String stratum, String sourceName, int lineNumber) throws AbsentInformationException
返回一个List,其中包含映射到给定行号的所有Location对象。对于数组(
ArrayType)和基本类,返回的列表始终为空。 对于接口(InterfaceType),仅当接口在指定行号的类初始化中具有可执行代码时,返回的列表才是非空的。 如果指定的行号没有可执行代码,则将返回空列表。返回列表用于指定的层 (有关层的描述,请参阅
Location)。- 参数
-
stratum- 用于比较行号和源名称的层,或null以使用defaultStratum()。 -
sourceName- 包含行号的源名称,或null以匹配所有源名称 -
lineNumber- 行号 - 结果
-
映射到给定行的所有
Location对象的列表。 - 异常
-
AbsentInformationException- 如果AbsentInformationException没有行号信息。 或者,如果SOURCENAME是非null和源名信息不存在。 -
ClassNotPreparedException- 如果这个班级尚未准备好。 - 从以下版本开始:
- 1.4
-
defaultStratum
String defaultStratum()
- 从以下版本开始:
- 1.4
-
instances
List<ObjectReference> instances(long maxInstances)
返回此ReferenceType的实例。 仅返回可用于垃圾回收目的的实例。并非所有目标虚拟机都支持此操作。 使用
VirtualMachine.canGetInstanceInfo()确定是否支持该操作。- 参数
-
maxInstances- 要返回的最大实例数。 必须是非负面的。 如果为零,则返回所有实例。 - 结果
-
一个
ObjectReference对象的列表。 如果没有此ReferenceType的实例,则返回零长度列表。 - 异常
-
UnsupportedOperationException- 如果目标虚拟机不支持此操作 - 请参阅canGetInstanceInfo() -
IllegalArgumentException- 如果maxInstances小于零。 - 从以下版本开始:
- 1.6
- 另请参见:
-
VirtualMachine.instanceCounts(List),ObjectReference.referringObjects(long)
-
equals
boolean equals(Object obj)
将指定的Object与此ReferenceType进行比较以获得相等性。- 重写:
-
equals在类Object - 参数
-
obj- 要与之比较的引用对象。 - 结果
-
如果Object是
ReferenceType,则为true ;如果ReferenceTypes属于同一VM,并且它们镜像对应于该VM中的java.lang.Class的相同实例的类。 - 另请参见:
-
Object.hashCode(),HashMap
-
hashCode
int hashCode()
返回此ObjectReference的哈希码值。- 重写:
-
hashCode在类Object - 结果
- 整数哈希码
- 另请参见:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
-
majorVersion
int majorVersion()
返回类主要版本号,如Java虚拟机规范的类文件格式中所定义。 对于数组(ArrayType)和基本类,返回的主要版本号值为零。 并非所有目标虚拟机都支持此操作。 使用VirtualMachine.canGetClassFileVersion()确定是否支持该操作。- 结果
- 该类的主要版本号。
- 异常
-
UnsupportedOperationException- 如果目标虚拟机不支持此操作 - 请参阅canGetClassFileVersion() - 从以下版本开始:
- 1.6
-
minorVersion
int minorVersion()
返回类次要版本号,如Java虚拟机规范的类文件格式中所定义。 对于数组(ArrayType)和基本类,返回的次要版本号值为零。 并非所有目标虚拟机都支持此操作。 使用VirtualMachine.canGetClassFileVersion()确定是否支持该操作。- 结果
- 该类的次要版本号。
- 异常
-
UnsupportedOperationException- 如果目标虚拟机不支持此操作 - 请参阅canGetClassFileVersion() - 从以下版本开始:
- 1.6
-
constantPoolCount
int constantPoolCount()
返回常量池中的条目数加1。 这对应于Java虚拟机规范中的类文件格式的constant_pool_count项。 对于数组(ArrayType)和基本类,返回的常量池计数值为零。 并非所有目标虚拟机都支持此操作。 使用VirtualMachine.canGetConstantPool()确定是否支持该操作。- 结果
- 一个类的常量池条目总数加一。
- 异常
-
UnsupportedOperationException- 如果目标虚拟机不支持此操作 - 请参阅canGetConstantPool() - 从以下版本开始:
- 1.6
- 另请参见:
-
constantPool()
-
constantPool
byte[] constantPool()
以Java虚拟机规范中的类文件格式的constant_pool项的格式返回常量池的原始字节。 常量池的格式可能因类文件格式的版本而不同,因此,应检查次要和主要类版本号的兼容性。 对于数组(ArrayType)和基本类,返回零长度字节数组。 并非所有目标虚拟机都支持此操作。 使用VirtualMachine.canGetConstantPool()确定是否支持该操作。- 结果
- 常量池的原始字节。
- 异常
-
UnsupportedOperationException- 如果目标虚拟机不支持此操作 - 请参阅canGetConstantPool() - 从以下版本开始:
- 1.6
- 另请参见:
-
constantPoolCount()
-
-