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