- 所有超级接口:
-
Accessible
,Comparable<ReferenceType>
,Mirror
,Type
- 所有已知子接口:
-
ArrayType
,ClassType
,InterfaceType
ClassType
用于类,InterfaceType
用于接口,ArrayType
用于数组。请注意,原始类(例如,Integer.TYPE
的 reflected type
)被表示为ClassType。VM为所有三者创建Class对象,因此从VM的角度看,每个ReferenceType映射到一个不同的Class对象。
可以通过查询特定的ObjectReference
的类型或从VirtualMachine
获取所有引用类型的列表来获取ReferenceTypes。
ReferenceType提供对静态类型信息(如方法和字段)的访问,并提供对动态类型信息(如相应的Class对象和类加载器)的访问。
任何直接或间接以ReferenceType
作为参数的ReferenceType
上的方法,如果目标VM断开连接并且VMDisconnectEvent
已被读取或可从EventQueue
中读取,则可能会抛出VMDisconnectedException
。
任何直接或间接以ReferenceType
作为参数的ReferenceType
上的方法,如果目标VM已耗尽内存,则可能会抛出VMOutOfMemoryException
。
任何直接或间接以ReferenceType
作为参数的ReferenceType
上的方法,如果镜像类型已被卸载,则可能会抛出ObjectCollectedException
。
- 自:
- 1.3
- 参见:
-
Method Summary
Modifier and TypeMethodDescription返回一个包含此类型中声明的每个Field
及其超类、实现的接口和/或超接口的列表。返回一个包含此引用类型中每个可执行源行的Location
对象的列表。allLineLocations
(String stratum, String sourceName) 返回一个包含此引用类型中每个可执行源行的Location
对象的列表。返回一个包含此类型中声明的每个Method
及其超类、实现的接口和/或超接口的列表。返回此引用类型的可用strata。获取加载与此类型对应的类的类加载器对象。返回与目标VM中此类型对应的类对象。byte[]
以Java虚拟机规范中的Class文件格式的constant_pool项目的格式返回常量池的原始字节。int
返回常量池中的条目数加一。返回此引用类型的默认stratum。boolean
将指定的对象与此ReferenceType进行比较以确定是否相等。boolean
确定此类的初始化是否失败。fieldByName
(String fieldName) 查找具有给定非模糊名称的可见Field
。fields()
返回一个包含此类型中声明的每个Field
的列表。获取此类型的通用签名(如果有)。int
hashCode()
返回此ObjectReference的哈希码值。instances
(long maxInstances) 返回此ReferenceType的实例。boolean
确定此类型是否已声明为抽象。boolean
isFinal()
确定此类型是否已声明为final。boolean
确定此类型是否已初始化。boolean
确定此类型是否已准备。boolean
isStatic()
确定此类型是否已声明为静态。boolean
确定此类型是否已验证。locationsOfLine
(int lineNumber) 返回包含映射到给定行号的所有Location
对象的列表。locationsOfLine
(String stratum, String sourceName, int lineNumber) 返回包含映射到给定行号的所有Location
对象的列表。int
返回类主版本号,如Java虚拟机规范中的Class文件格式中定义。methods()
返回一个包含此类型中直接声明的每个Method
的列表。methodsByName
(String name) 返回一个包含具有给定名称的每个可见Method
的列表。methodsByName
(String name, String signature) 返回一个包含具有给定名称和签名的每个可见Method
的列表。int
返回类次版本号,如Java虚拟机规范中的Class文件格式中定义。default ModuleReference
module()
获取包含与此类型对应的类的模块对象。name()
返回此ReferenceType
对象的名称。返回包含在此类型中声明并当前加载到虚拟机中的ReferenceType
对象的列表。获取此类型的源调试扩展。获取与此类型声明对应的源的标识名称。sourceNames
(String stratum) 获取与此类型声明对应的所有源的标识名称。sourcePaths
(String stratum) 获取与此类型声明对应的源的路径。返回此类型中每个未隐藏且非模糊的Field
的列表。返回此类型声明或继承的每个Method
的列表。Methods declared in interface com.sun.jdi.Accessible
isPackagePrivate, isPrivate, isProtected, isPublic, modifiers
Methods declared in interface java.lang.Comparable
compareTo
Methods declared in interface com.sun.jdi.Mirror
toString, virtualMachine
-
Method Details
-
name
String name()返回此ReferenceType
对象的名称。返回的名称与Class.getName()
返回的名称形式相同。 -
genericSignature
String genericSignature()获取此类型的通用签名(如果有)。通用签名在《Java虚拟机规范》中有描述。- 返回:
-
包含通用签名的字符串,如果没有通用签名则返回
null
。 - 自:
- 1.5
-
classLoader
ClassLoaderReference classLoader()获取加载与此类型对应的类的类加载器对象。- 返回:
-
一个反映类加载器的
ClassLoaderReference
,如果类是通过引导类加载器加载的,则返回null
。
-
module
获取包含与此类型对应的类的模块对象。并非所有目标虚拟机都支持此操作。使用VirtualMachine.canGetModuleInfo()
来确定是否支持该操作。- 实现要求:
-
默认实现会抛出
UnsupportedOperationException
异常。 - 返回:
-
一个
ModuleReference
,它反映了目标虚拟机中的模块。 - 抛出:
-
UnsupportedOperationException
- 如果目标虚拟机不支持此操作。 - 自 JDK 版本:
- 9
-
sourceName
获取与此类型声明对应的源代码的标识名称。对该字符串的解释由源代码存储库机制负责。返回的名称取决于虚拟机的默认层次结构(
VirtualMachine.getDefaultStratum()
)。在参考实现中,当使用基本层次结构时,返回的字符串是包含此类型声明的源文件的未限定名称。在其他层次结构中,返回的源名称是该层次结构的第一个源名称。由于其他语言可能对引用类型有多个源名称,因此建议使用Location.sourceName()
或sourceNames(String)
。对于数组(
ArrayType
)和原始类,始终会抛出 AbsentInformationException 异常。- 返回:
- 字符串源文件名称
- 抛出:
-
AbsentInformationException
- 如果源名称未知
-
sourceNames
获取与此类型声明对应的所有源代码的标识名称。对这些名称的解释由源代码存储库机制负责。返回的名称是针对指定的层次结构(请参阅
Location
以获取层次结构的描述)。在参考实现中,当使用 Java 编程语言层次结构时,返回的 List 包含一个元素:一个字符串,即包含此类型声明的源文件的未限定名称。在其他层次结构中,返回的源名称是该层次结构定义的所有源名称。- 参数:
-
stratum
- 要从中检索信息的层次结构,或者为声明类型的默认层次结构使用null
。 - 返回:
- 一个 String 对象列表,每个对象代表一个源名称
- 抛出:
-
AbsentInformationException
- 如果源名称未知。对于数组(
ArrayType
)和原始类,始终会抛出 AbsentInformationException 异常。 - 自 JDK 版本:
- 1.4
-
sourcePaths
获取与此类型声明对应的源代码的路径。对这些路径的解释由源代码存储库机制负责。返回的路径是针对指定的层次结构(请参阅
Location
以获取层次结构的描述)。在参考实现中,对于未明确指定源路径的层次结构(Java 编程语言层次结构永远不会这样做),返回的字符串是由将此 ReferenceType 的包名转换为平台相关路径后再加上sourceNames(String)
前缀的字符串。例如,在 Windows 平台上,java.lang.Thread
将返回一个包含一个元素的列表:"java\lang\Thread.java"
。- 参数:
-
stratum
- 要从中检索信息的层次结构,或者为声明类型的默认层次结构使用null
。 - 返回:
- 一个 String 对象列表,每个对象代表一个源路径
- 抛出:
-
AbsentInformationException
- 如果源名称未知。对于数组(
ArrayType
)和原始类,始终会抛出 AbsentInformationException 异常。 - 自 JDK 版本:
- 1.4
-
sourceDebugExtension
获取此类型的源代码调试扩展。并非所有目标虚拟机都支持此操作。使用
canGetSourceDebugExtension()
来确定是否支持该操作。- 返回:
- 作为字符串的源代码调试扩展属性
- 抛出:
-
AbsentInformationException
- 如果未指定扩展 -
UnsupportedOperationException
- 如果目标虚拟机不支持此操作 - 请参阅canGetSourceDebugExtension()
,
-
isStatic
boolean isStatic()确定此类型是否被声明为静态。只有嵌套类型可以声明为静态,因此对于任何包级别类型、数组类型或原始类,都会返回false
。- 返回:
-
如果此类型是静态,则返回
true
;否则返回 false。
-
isAbstract
boolean isAbstract()确定此类型是否被声明为抽象。对于数组(
ArrayType
)和原始类,返回值是未定义的。- 返回:
-
如果此类型是抽象的,则返回
true
;否则返回 false。
-
isFinal
boolean isFinal()确定此类型是否被声明为最终的。对于数组(
ArrayType
)和原始类,返回值始终为 true。- 返回:
-
如果此类型是最终的,则返回
true
;否则返回 false。
-
isPrepared
boolean isPrepared()确定此类型是否已准备就绪。请参阅 JVM 规范以了解类准备的定义。对于数组(
ArrayType
)和原始类,返回值是未定义的。- 返回:
-
如果此类型已准备就绪,则返回
true
;否则返回 false。
-
isVerified
boolean isVerified()确定此类型是否已验证。请参阅 JVM 规范以了解类验证的定义。对于数组(
ArrayType
)和原始类,返回值是未定义的。- 返回:
-
如果此类型已验证,则返回
true
;否则返回 false。
-
isInitialized
boolean isInitialized()确定此类型是否已初始化。请参阅 JVM 规范以了解类验证的定义。对于InterfaceType
,此方法始终返回与isPrepared()
相同的值。对于数组(
ArrayType
)和原始类,返回值是未定义的。- 返回:
-
如果此类型已初始化,则返回
true
;否则返回 false。
-
failedToInitialize
boolean failedToInitialize()确定此类的初始化是否失败。请参阅 JVM 规范以了解类初始化的详细信息。对于数组(
ArrayType
)和原始类,返回值是未定义的。- 返回:
-
如果尝试初始化并失败,则返回
true
;否则返回 false。
-
fields
- 返回:
-
一个包含
Field
对象的列表;如果不存在字段,则列表长度为 0。 - 抛出:
-
ClassNotPreparedException
- 如果此类尚未准备就绪。
-
visibleFields
返回一个包含此类型中每个未隐藏且明确的Field
的列表。包括可以通过其简单名称从类或其实例访问的每个字段。由于在更近期继承的类中通过其简单名称无法访问的字段或被隐藏的字段,因此无法通过其简单名称访问这些字段,并且不包括在返回的列表中。所有其他继承的字段都包括在内。有关详细信息,请参阅 JLS 第 8.3 节。对于数组(
ArrayType
)和原始类,返回的列表始终为空。- 返回:
-
一个包含
Field
对象的列表;如果不存在可见字段,则列表长度为 0。 - 抛出:
-
ClassNotPreparedException
- 如果此类尚未准备就绪。
-
allFields
返回一个包含此类型中声明的每个Field
,以及其超类、实现的接口和/或超接口中的字段的列表。包括所有声明的和继承的字段,无论它们是否被隐藏或多重继承。对于数组(
ArrayType
)和原始类,返回的列表始终为空。- 返回:
-
一个包含
Field
对象的列表;如果不存在字段,则列表长度为 0。 - 抛出:
-
ClassNotPreparedException
- 如果此类尚未准备就绪。
-
fieldByName
- 参数:
-
fieldName
- 包含所需字段名称的字符串。 - 返回:
-
一个
Field
对象,反映找到的字段,如果没有具有给定名称的字段或给定名称不明确,则返回null。 - 抛出:
-
ClassNotPreparedException
- 如果此类尚未准备好。
-
methods
返回一个包含此类型中直接声明的每个Method
的列表。不包括继承的方法。构造函数,如果有的话,以及编译器创建的任何合成方法都包含在列表中。对于数组(
ArrayType
)和原始类,返回的列表始终为空。- 返回:
-
一个包含
Method
对象的列表;如果没有方法存在,则列表长度为0。 - 抛出:
-
ClassNotPreparedException
- 如果此类尚未准备好。
-
visibleMethods
返回一个包含此类型声明或继承的每个Method
的列表。不包括已被隐藏或覆盖的超类或超接口的方法。请注意,尽管排除了这些方法,但返回的列表中可能存在具有相同签名的多个继承方法,但最多只能有一个是
ClassType
的成员。有关详细信息,请参阅JLS第8.4.8节。对于数组(
ArrayType
)和原始类,返回的列表始终为空。- 返回:
-
一个包含
Method
对象的列表;如果没有可见方法存在,则列表长度为0。 - 抛出:
-
ClassNotPreparedException
- 如果此类尚未准备好。
-
allMethods
- 返回:
-
一个包含
Method
对象的列表;如果没有方法存在,则列表长度为0。 - 抛出:
-
ClassNotPreparedException
- 如果此类尚未准备好。
-
methodsByName
返回一个包含具有给定名称的每个可见Method
的列表。这通常用于查找重载方法。不包括覆盖和隐藏的方法。有关详细信息,请参阅JLS(8.4.8)。
对于数组(
ArrayType
)和原始类,返回的列表始终为空。- 参数:
-
name
- 要查找的方法的名称。 - 返回:
-
一个包含与给定名称匹配的
Method
对象的列表;如果没有找到匹配的方法,则列表长度为0。 - 抛出:
-
ClassNotPreparedException
- 如果此类尚未准备好。
-
methodsByName
返回一个包含具有给定名称和签名的每个可见Method
的列表。签名字符串是目标方法的JNI签名:()V
([Ljava/lang/String;)V
(IIII)Z
列表中最多有一个方法是具体方法并且是
ClassType
的组成部分;列表中的其他方法都是抽象的。使用ClassType.concreteMethodByName(java.lang.String, java.lang.String)
仅检索匹配的具体方法。对于数组(
ArrayType
)和原始类,返回的列表始终为空。- 参数:
-
name
- 要查找的方法的名称。 -
signature
- 要查找的方法的签名 - 返回:
-
一个包含与给定名称和签名匹配的
Method
对象的列表;如果没有找到匹配的方法,则列表长度为0。 - 抛出:
-
ClassNotPreparedException
- 如果此类尚未准备好。
-
nestedTypes
List<ReferenceType> nestedTypes()返回一个包含在此类型中声明并当前加载到虚拟机中的每个ReferenceType
对象的列表。静态嵌套类型和非静态嵌套类型(即内部类型)都包括在内。本地内部类型(在此引用类型的某个代码块中声明)也包括在返回的列表中。对于数组(
ArrayType
)和原始类,返回的列表始终为空。- 返回:
-
一个嵌套的
ReferenceType
对象的列表;如果没有嵌套类型,则列表长度为0。
-
getValue
- 参数:
-
field
- 包含请求值的字段 - 返回:
-
实例字段的
Value
。 - 抛出:
-
IllegalArgumentException
- 如果该字段对于此对象的类无效。
-
getValues
- 参数:
-
fields
- 包含请求值的Field
对象的列表。 - 返回:
-
包含请求的
Field
对象及其Value
的映射。 - 抛出:
-
IllegalArgumentException
- 如果任何字段对于此对象的类无效。 -
VMMismatchException
- 如果一个Mirror
参数和此镜像不属于同一个VirtualMachine
。
-
classObject
ClassObjectReference classObject()返回与目标VM中此类型对应的类对象。VM为每种ReferenceType创建类对象:类、接口和数组类型。- 返回:
-
目标VM中此引用类型的
ClassObjectReference
。
-
allLineLocations
返回一个包含此引用类型中每个可执行源行的Location
对象的列表。此方法等效于
allLineLocations(vm.getDefaultStratum(),null)
- 有关更多信息,请参见allLineLocations(String,String)
。- 抛出:
-
AbsentInformationException
- 如果此类没有行号信息,并且此类具有非本地、非抽象的可执行成员。 -
ClassNotPreparedException
- 如果此类尚未准备好。
-
allLineLocations
List<Location> allLineLocations(String stratum, String sourceName) throws AbsentInformationException 返回一个包含每个可执行源行的Location
对象的列表。每个位置将一个源行映射到一个代码索引范围。可以通过Location.codeIndex()
确定范围的起始位置。如果编译器和/或VM将该行映射到两个或更多不相交的代码索引范围,则返回的列表可能包含特定行号的多个位置。请注意,同一源行可能在不同方法中表示不同的代码索引范围。对于数组(
ArrayType
)和原始类,返回的列表始终为空。对于接口(InterfaceType
),仅当接口的类初始化中存在可执行代码时,返回的列表才会非空。返回的列表是针对指定的stratum(请参阅
Location
以获取strata的描述)。- 参数:
-
stratum
- 要检索信息的stratum,或者为defaultStratum()
的null
。 -
sourceName
- 仅返回此源文件中的位置,或者为null
以返回所有位置。 - 返回:
-
所有源行
Location
对象的列表。 - 抛出:
-
AbsentInformationException
- 如果此类没有行号信息,并且此类具有非本地的、非抽象的可执行成员。或者如果sourceName为非null
且不存在源名称信息。 -
ClassNotPreparedException
- 如果此类尚未准备好。 - 自:
- 1.4
-
locationsOfLine
返回一个包含映射到给定行号的所有Location
对象的列表。此方法等效于
locationsOfLine(vm.getDefaultStratum(), null, lineNumber)
- 有关更多信息,请参见locationsOfLine(java.lang.String,java.lang.String,int)
。- 参数:
-
lineNumber
- 行号 - 返回:
-
所有映射到给定行号的
Location
对象的列表。 - 抛出:
-
AbsentInformationException
- 如果此类没有行号信息。 -
ClassNotPreparedException
- 如果此类尚未准备好。 - 参见:
-
locationsOfLine
List<Location> locationsOfLine(String stratum, String sourceName, int lineNumber) throws AbsentInformationException 返回一个包含映射到给定行号的所有Location
对象的列表。对于数组(
ArrayType
)和原始类,返回的列表始终为空。对于接口(InterfaceType
),仅当接口的类初始化中在指定行号处存在可执行代码时,返回的列表才会非空。如果指定行号处没有可执行代码,则返回空列表。返回的列表是针对指定的stratum(请参阅
Location
以获取strata的描述)。- 参数:
-
stratum
- 用于比较行号和源名称的stratum,或者为defaultStratum()
的null
。 -
sourceName
- 包含行号的源名称,或者为null
以匹配所有源名称 -
lineNumber
- 行号 - 返回:
-
所有映射到给定行号的
Location
对象的列表。 - 抛出:
-
AbsentInformationException
- 如果此类没有行号信息。或者如果sourceName为非null
且不存在源名称信息。 -
ClassNotPreparedException
- 如果此类尚未准备好。 - 自:
- 1.4
-
availableStrata
返回此引用类型的可用strata。请参阅
Location
以获取strata的描述。- 返回:
-
java.lang.String
的列表,每个表示一个stratum - 自:
- 1.4
-
defaultStratum
String defaultStratum()返回此引用类型的默认stratum。此值在类文件中指定,用户无法设置。如果类文件未指定默认stratum,则将返回基本stratum("Java"
)。请参阅
Location
以获取strata的描述。- 自:
- 1.4
-
instances
返回此ReferenceType的实例。仅返回可达以进行垃圾回收的实例。并非所有目标虚拟机都支持此操作。使用
VirtualMachine.canGetInstanceInfo()
来确定是否支持该操作。- 参数:
-
maxInstances
- 要返回的实例的最大数量。必须是非负数。如果为零,则返回所有实例。 - 返回:
-
ObjectReference
对象的列表。如果没有此ReferenceType的实例,则返回长度为零的列表。 - 抛出:
-
UnsupportedOperationException
- 如果目标虚拟机不支持此操作 - 请参见canGetInstanceInfo()
-
IllegalArgumentException
- 如果maxInstances小于零。 - 自:
- 1.6
- 参见:
-
equals
将指定的对象与此ReferenceType进行比较,以确定它们是否相等。- 覆盖:
-
equals
在类Object
中 - 参数:
-
obj
- 要比较的参考对象。 - 返回:
-
如果对象是
ReferenceType
,如果ReferenceTypes属于同一VM,并且它们反映与VM中的java.lang.Class的相同实例对应的类,则返回true。 - 参见:
-
hashCode
int hashCode()返回此ObjectReference的哈希码值。 -
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虚拟机规范中的Class文件格式的constant_pool_count项。对于数组(ArrayType
)和原始类,返回的常量池计数值为零。并非所有目标虚拟机都支持此操作。使用VirtualMachine.canGetConstantPool()
来确定是否支持该操作。- 返回:
- 类的常量池条目总数加一。
- 抛出:
-
UnsupportedOperationException
- 如果目标虚拟机不支持此操作 - 请参见canGetConstantPool()
- 自版本:
- 1.6
- 另请参阅:
-
constantPool
byte[] constantPool()返回常量池的原始字节,格式符合Java虚拟机规范中的constant_pool项的格式。常量池的格式可能在Class文件格式的不同版本之间有所不同,因此应检查次要和主要类版本号以确保兼容性。对于数组(ArrayType
)和原始类,将返回一个长度为零的字节数组。并非所有目标虚拟机都支持此操作。使用VirtualMachine.canGetConstantPool()
来确定是否支持该操作。- 返回:
- 常量池的原始字节。
- 抛出:
-
UnsupportedOperationException
- 如果目标虚拟机不支持此操作 - 请参见canGetConstantPool()
- 自版本:
- 1.6
- 另请参阅:
-