-
- All Superinterfaces:
-
Accessible
,Comparable<ReferenceType>
,Mirror
,ReferenceType
,Type
public interface ClassType extends ReferenceType
目标VM中类的镜像。 ClassType是ReferenceType
的细化,适用于定义的JLS意义上的真实类(不是接口,不是数组类型)。 镜像此类实例的任何ObjectReference
都将具有ClassType作为其类型。- 从以下版本开始:
- 1.3
- 另请参见:
-
ObjectReference
-
-
字段汇总
字段 变量和类型 字段 描述 static int
INVOKE_SINGLE_THREADED
仅在恢复调用线程的情况下执行方法调用
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 List<InterfaceType>
allInterfaces()
获取此类直接和间接实现的接口。方法
concreteMethodByName(String name, String signature)
返回从此类可见的具有给定名称和签名的单个非抽象方法
。List<InterfaceType>
interfaces()
获取此类直接实现的接口。Value
invokeMethod(ThreadReference thread, 方法 method, List<? extends Value> arguments, int options)
在目标VM中调用指定的静态方法
。boolean
isEnum()
确定此类是否声明为枚举。ObjectReference
newInstance(ThreadReference thread, 方法 method, List<? extends Value> arguments, int options)
使用目标VM中的给定构造函数方法
构造此类型的新实例。void
setValue(字段 field, Value value)
为静态字段分配值。List<ClassType>
subclasses()
获取此类的当前加载的直接子类。ClassType
superclass()
获取此类的超类。-
声明方法的接口 com.sun.jdi.Accessible
isPackagePrivate, isPrivate, isProtected, isPublic, modifiers
-
声明方法的接口 java.lang.Comparable
compareTo
-
声明方法的接口 com.sun.jdi.Mirror
toString, virtualMachine
-
声明方法的接口 com.sun.jdi.ReferenceType
allFields, allLineLocations, allLineLocations, allMethods, availableStrata, classLoader, classObject, constantPool, constantPoolCount, defaultStratum, equals, failedToInitialize, fieldByName, 字段, genericSignature, getValue, getValues, hashCode, instances, isAbstract, isFinal, isInitialized, isPrepared, isStatic, isVerified, locationsOfLine, locationsOfLine, majorVersion, methods, methodsByName, methodsByName, minorVersion, 模块, name, nestedTypes, sourceDebugExtension, sourceName, sourceNames, sourcePaths, visibleFields, visibleMethods
-
-
-
-
字段详细信息
-
INVOKE_SINGLE_THREADED
static final int INVOKE_SINGLE_THREADED
仅在恢复调用线程的情况下执行方法调用- 另请参见:
- 常数字段值
-
-
方法详细信息
-
interfaces
List<InterfaceType> interfaces()
获取此类直接实现的接口。 仅包含在此类中使用“implements”关键字声明的接口。- 结果
-
一个
InterfaceType
对象的列表, 每个对象镜像目标VM中此ClassType的直接接口。 如果不存在,则返回零长度List。 - 异常
-
ClassNotPreparedException
- 如果这个班级尚未准备好。
-
allInterfaces
List<InterfaceType> allInterfaces()
获取此类直接和间接实现的接口。 返回interfaces()
返回的接口以及所有超接口。- 结果
-
一个
InterfaceType
对象的列表, 每个对象镜像目标VM中此ClassType的接口。 如果不存在,则返回零长度List。 - 异常
-
ClassNotPreparedException
- 如果这个班级尚未准备好。
-
isEnum
boolean isEnum()
确定此类是否声明为枚举。- 结果
-
true
如果此类被声明为枚举; 否则是假的。
-
setValue
void setValue(字段 field, Value value) throws InvalidTypeException, ClassNotLoadedException
为静态字段分配值。字段
必须对此ClassType有效; 也就是说,它必须来自镜像对象的类或该类的超类。 该领域不能是最终的。对象值必须与字段类型兼容(这意味着必须通过封闭类的类加载器加载字段类型)。 原始值必须是与字段类型兼容的赋值,或者必须可转换为字段类型而不会丢失信息。 有关分配兼容性的更多信息,请参阅JLS第5.2节。
- 参数
-
字段
- 要设置的字段。 -
value
- 要分配的值。 - 异常
-
IllegalArgumentException
- 如果该字段不是静态字段,则该字段为final,或该字段在此类中不存在。 -
ClassNotLoadedException
- 如果尚未通过适当的类加载器加载字段类型。 -
InvalidTypeException
- 如果值的类型与字段的声明类型不匹配。 -
VMCannotBeModifiedException
- 如果VirtualMachine是只读的 - 请参阅VirtualMachine.canBeModified()
。
-
invokeMethod
Value invokeMethod(ThreadReference thread, 方法 method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
在目标VM中调用指定的静态方法
。 指定的方法可以在此类中定义,也可以在超类中定义。 该方法必须是静态方法,但不是静态初始化程序。 使用newInstance(com.sun.jdi.ThreadReference, com.sun.jdi.Method, java.util.List<? extends com.sun.jdi.Value>, int)
创建一个新对象并运行其构造函数。方法调用将在指定的线程中进行。 仅当指定的线程已被该线程中发生的事件挂起时,才会发生方法调用。 当目标VM已通过悬浮不支持方法调用
VirtualMachine.suspend()
或当指定的线程通过挂起ThreadReference.suspend()
。使用指定参数列表中的参数调用指定的方法。 方法调用是同步的; 在调用的方法在目标VM中返回之前,此方法不会返回。 如果被调用的方法抛出异常,则此方法将抛出一个
InvocationException
,其中包含抛出异常对象的镜像。对象参数必须与参数类型兼容(这意味着必须通过封闭类'类加载器加载参数类型)。 原始参数必须是与参数类型兼容的赋值,或者必须可转换为参数类型而不会丢失信息。 如果被调用的方法接受可变数量的参数,则最后一个参数类型是某个组件类型的数组。 匹配位置中的参数可以省略,或者可以为null,相同组件类型的数组,或组件类型的参数,后跟任意数量的相同类型的其他参数。 如果省略该参数,则传递组件类型的0长度数组。 组件类型可以是基本类型。 不支持自动装箱。 有关分配兼容性的更多信息,请参见The Java™ Language Specification的第5.2节。
默认情况下,如果先前由事件或
VirtualMachine.suspend()
或ThreadReference.suspend()
暂停,则在调用方法时,将恢复目标VM中的所有线程。 这样做是为了防止在任何线程拥有被调用方法所需的监视器时将发生的死锁。 但请注意,此隐式恢复的行为与ThreadReference.resume()
完全相同,因此如果线程的挂起计数大于1,则在调用期间它将保持挂起状态,因此仍可能发生死锁。 默认情况下,调用完成后,目标VM中的所有线程都将被挂起,无论它们在调用之前的状态如何。 调用期间可能会发生断点或其他事件。 这可能导致如上所述的死锁。 如果从客户端的事件处理程序线程调用invokeMethod,它也可能导致死锁。 在这种情况下,此线程将等待invokeMethod完成,并且不会读取新事件的EventSet。 如果这个新的EventSet是SUSPEND_ALL,那么就会发生死锁,因为没有人会恢复EventSet。 为避免这种情况,应在执行invokeMethod之前禁用所有EventRequests,或者不应从客户端的事件处理程序线程执行invokeMethod。通过在
options
参数中指定INVOKE_SINGLE_THREADED
位标志,可以防止在调用期间恢复其他线程。 但是,没有针对上述死锁的保护或恢复,因此应谨慎使用此选项。 只恢复指定的线程(如上面所有线程所述)。 完成单线程调用后,将再次暂停调用线程。 请注意,在调用完成时,不会挂起在单线程调用期间启动的任何线程。如果在调用期间断开目标VM(例如,通过
VirtualMachine.dispose()
),则方法调用将继续。- 参数
-
thread
- 要调用的线程。 -
method
- 要调用的方法
。 -
arguments
- 绑定到调用方法的Value
参数列表。 列表中的值按它们在方法签名中出现的顺序分配给参数。 -
options
- 整数位标志选项。 - 结果
-
一个
Value
镜像的被调用方法的返回值。 - 异常
-
IllegalArgumentException
- 如果方法不是此类或超类的成员,如果参数列表的大小与方法的已声明参数的数量不匹配,或者该方法是初始化程序,构造函数或静态初始化程序。 -
ClassNotLoadedException
- 如果尚未通过适当的类加载器加载任何参数类型。 -
IncompatibleThreadStateException
- 如果指定的线程尚未被事件挂起。 -
InvocationException
- 如果方法调用导致目标VM中出现异常。 -
InvalidTypeException
- 如果参数不符合此要求 - 对象参数必须与参数类型兼容。 这意味着必须通过封闭类的类加载器加载参数类型。 原始参数必须是与参数类型兼容的赋值,或者必须可转换为参数类型而不会丢失信息。 有关分配兼容性的更多信息,请参阅JLS第5.2节。 -
VMCannotBeModifiedException
- 如果VirtualMachine是只读的 - 请参阅VirtualMachine.canBeModified()
。
-
newInstance
ObjectReference newInstance(ThreadReference thread, 方法 method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
使用目标VM中的给定构造函数方法
构造此类型的新实例。 必须在此类中定义指定的构造函数。实例创建将在指定的线程中进行。 仅当指定的线程已被该线程中发生的事件挂起时,才能进行实例创建。 当目标VM已通过暂停不支持实例创建
VirtualMachine.suspend()
或在指定的线程通过暂停ThreadReference.suspend()
。使用指定参数列表中的参数调用指定的构造函数。 调用是同步的; 在构造函数在目标VM中返回之前,此方法不会返回。 如果被调用的方法抛出异常,则此方法将抛出一个
InvocationException
,其中包含抛出异常对象的镜像。对象参数必须与参数类型兼容(这意味着必须通过封闭类'类加载器加载参数类型)。 原始参数必须是与参数类型兼容的赋值,或者必须可转换为参数类型而不会丢失信息。 如果被调用的方法接受可变数量的参数,则最后一个参数类型是某个组件类型的数组。 匹配位置中的参数可以省略,或者可以为null,相同组件类型的数组或组件类型的参数,后跟任意数量的相同类型的其他参数。 如果省略该参数,则传递组件类型的0长度数组。 组件类型可以是基本类型。 不支持自动装箱。 有关分配兼容性的更多信息,请参见The Java™ Language Specification的 5.2节。
默认情况下,如果先前由事件或
VirtualMachine.suspend()
或ThreadReference.suspend()
暂停,则在调用方法时,将恢复目标VM中的所有线程。 这样做是为了防止在任何线程拥有被调用方法所需的监视器时将发生的死锁。 调用期间可能会发生断点或其他事件。 但请注意,此隐式恢复的行为与ThreadReference.resume()
完全相同,因此如果线程的挂起计数大于1,则在调用期间它将保持挂起状态。 默认情况下,调用完成后,目标VM中的所有线程都将被挂起,无论它们在调用之前的状态如何。通过在
options
参数中指定INVOKE_SINGLE_THREADED
位标志,可以防止在调用期间恢复其他线程。 但是,没有针对上述死锁的保护或恢复,因此应谨慎使用此选项。 只恢复指定的线程(如上面所有线程所述)。 完成单线程调用后,将再次暂停调用线程。 请注意,在调用完成时,不会挂起在单线程调用期间启动的任何线程。如果在调用期间断开目标VM(例如,通过
VirtualMachine.dispose()
),则方法调用将继续。- 参数
-
thread
- 要调用的线程。 -
method
- 要调用的构造函数方法
。 -
arguments
- 绑定到被调用的构造函数的Value
个参数的列表。 列表中的值按照它们在构造函数签名中出现的顺序分配给参数。 -
options
- 整数位标志选项。 - 结果
-
新创建的对象的
ObjectReference
镜像。 - 异常
-
IllegalArgumentException
- 如果方法不是此类的成员,如果参数列表的大小与构造函数的已声明参数的数量不匹配,或者该方法不是构造函数。 -
ClassNotLoadedException
- 如果尚未通过适当的类加载器加载任何参数类型。 -
IncompatibleThreadStateException
- 如果指定的线程尚未被事件挂起。 -
InvocationException
- 如果方法调用导致目标VM中出现异常。 -
InvalidTypeException
- 如果参数不符合此要求 - 对象参数必须与参数类型兼容。 这意味着必须通过封闭类的类加载器加载参数类型。 原始参数必须是与参数类型兼容的赋值,或者必须可转换为参数类型而不会丢失信息。 有关分配兼容性的更多信息,请参阅JLS第5.2节。 -
VMCannotBeModifiedException
- 如果VirtualMachine是只读的 - 请参阅VirtualMachine.canBeModified()
。
-
concreteMethodByName
方法 concreteMethodByName(String name, String signature)
返回从此类可见的具有给定名称和签名的单个非抽象方法
。 有关签名格式的信息,请参见ReferenceType.methodsByName(java.lang.String, java.lang.String)
。返回的方法(如果为非null)是
ClassType
的组件。- 参数
-
name
- 要查找的方法的名称。 -
signature
- 要查找的方法的签名 - 结果
-
该
方法
匹配给定的名称和签名或null
,如果没有匹配。 - 异常
-
ClassNotPreparedException
- 如果尚未提供方法,因为该类尚未准备好。 - 另请参见:
-
ReferenceType.visibleMethods()
,ReferenceType.methodsByName(java.lang.String name)
,ReferenceType.methodsByName(java.lang.String name, java.lang.String signature)
-
-