类型参数:
T
- 由此
Class
对象建模的类的类型。例如,
String.class
的类型是
Class<String>
。如果将被建模的类未知,则使用
Class<?>
。
所有已实现的接口:
Serializable
,
AnnotatedElement
,
GenericDeclaration
,
Type
public final class Class<T>
extends
Object
implements
Serializable
,
GenericDeclaration
,
Type
,
AnnotatedElement
Class
类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该
Class
对象。基本的 Java 类型(
boolean
、
byte
、
char
、
short
、
int
、
long
、
float
和
double
)和关键字
void
也表示为
Class
对象。
Class
没有公共构造方法。
Class
对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的
defineClass
方法自动构造的。
以下示例使用
Class
对象来显示对象的类名:
void printClassName(Object obj) {
System.out.println("The class of " + obj +
" is " + obj.getClass().getName());
还可以使用一个类字面值(JLS Section
15.8.2
)来获取指定类型(或 void)的
Class
对象。例如:
System.out.println("The name of class Foo is: "+Foo.class.getName());
public
String
toString
()
将对象转换为字符串。字符串的表示形式为字符串 "class" 或 "interface" 后面紧跟一个空格,然后是该类的完全限定名,它具有
getName
返回的那种格式。如果此
Class
对象表示一个基本类型,则此方法返回该基本类型的名称。如果该
Class
对象表示 void,则此方法返回 "void"。
覆盖:
类
Object
中的
toString
返回:
表示此 class 对象的字符串。
throws
ClassNotFoundException
使用给定的类加载器,返回与带有给定字符串名的类或接口相关联的
Class
对象。(以
getName
所返回的格式)给定一个类或接口的完全限定名,此方法会试图定位、加载和链接该类或接口。指定的类加载器用于加载该类或接口。如果参数
loader
为 null,则该类通过引导类加载器加载。只有
initialize
参数为
true
且以前未被初始化时,才初始化该类。
如果
name
表示一个基本类型或 void,则会尝试在未命名的包中定位用户定义的名为
name
的类。因此,该方法不能用于获得表示基本类型或 void 的任何
Class
对象。
如果
name
表示一个数组类,则会加载但不初始化该数组类的组件类型。
例如,在一个实例方法中,表达式:
Class.forName("Foo")
Class.forName("Foo", true, this.getClass().getClassLoader())
注意,此方法会抛出与加载、链接或初始化相关的错误,
Java Language Specification
的第 12.2、12.3 和 12.4 节对此进行了详细说明。
注意,此方法不检查调用者是否可访问其请求的类。
如果
loader
为
null
,也存在安全管理器,并且调用者的类加载器不为 null,则此方法通过
RuntimePermission("getClassLoader")
权限调用安全管理器的
checkPermission
方法,以确保可以访问引导类加载器。
LinkageError
- 如果链接失败
ExceptionInInitializerError
- 如果该方法激发的初始化失败
ClassNotFoundException
- 如果指定的类加载器无法定位该类
从以下版本开始:
另请参见:
forName(String)
,
ClassLoader
IllegalAccessException
创建此
Class
对象所表示的类的一个新实例。如同用一个带有一个空参数列表的
new
表达式实例化该类。如果该类尚未初始化,则初始化这个类。
注意,此方法传播 null 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。
Constructor.newInstance
方法将该构造方法所抛出的任何异常包装在一个(已检查的)
InvocationTargetException
中,从而避免了这一问题。
IllegalAccessException
- 如果该类或其 null 构造方法是不可访问的。
InstantiationException
- 如果此
Class
表示一个抽象类、接口、数组类、基本类型或 void;
或者该类没有 null 构造方法;
或者由于其他某种原因导致实例化失败。
ExceptionInInitializerError
- 如果该方法引发的初始化失败。
SecurityException
- 如果存在安全管理器
s
,并满足下列任一条件:
调用
s.checkMemberAccess(this, Member.PUBLIC)
拒绝创建该类的新实例
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
public boolean
isInstance
(
Object
obj)
判定指定的
Object
是否与此
Class
所表示的对象赋值兼容。此方法是 Java 语言
instanceof
运算符的动态等效方法。如果指定的
Object
参数非空,且能够在不引发
ClassCastException
的情况下被强制转换成该
Class
对象所表示的引用类型,则该方法返回 true;否则返回
false
。
特别地,当该
Class
对象表示一个已声明的类时,若指定的
Object
参数是所表示类(或其任一子类)的一个实例,则此方法返回
true
;否则返回
false
。如果此
Class
对象表示一个数组类,且通过身份转换或扩展引用转换,指定的
Object
参数能转换为一个数组类的对象,则返回
true
;否则返回
false
。如果此
Class
对象表示一个接口,且指定
Object
参数的类或任一超类实现了此接口,则此方法返回
true
;否则返回
false
。如果此
Class
对象表示一个基本类型,则此方法返回
false
。
public boolean
isAssignableFrom
(
Class
<?> cls)
判定此
Class
对象所表示的类或接口与指定的
Class
参数所表示的类或接口是否相同,或是否是其超类或超接口。如果是则返回
true
;否则返回
false
。如果该
Class
表示一个基本类型,且指定的
Class
参数正是该
Class
对象,则该方法返回
true
;否则返回
false
。
特别地,通过身份转换或扩展引用转换,此方法能测试指定
Class
参数所表示的类型能否转换为此
Class
对象所表示的类型。有关详细信息,请参阅
Java Language Specification
的第 5.1.1 和 5.1.4 节。
返回:
表明
cls
类型的对象能否赋予此类对象的
boolean
值
NullPointerException
- 如果指定的 Class 参数为 null。
从以下版本开始:
JDK1.1
判定指定的
Class
对象是否表示一个基本类型。
有九种预定义的
Class
对象,表示八个基本类型和 void。这些类对象由 Java 虚拟机创建,与其表示的基本类型同名,即
boolean
、
byte
、
char
、
short
、
int
、
long
、
float
和
double
。
这些对象仅能通过下列声明为 public static final 的变量访问,也是使此方法返回
true
的仅有的几个
Class
对象。
以
String
的形式返回此
Class
对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
如果此类对象表示的是非数组类型的引用类型,则返回该类的二进制名称,Java Language Specification, Second Edition 对此作了详细说明。
如果此类对象表示一个基本类型或 void,则返回的名字是一个与该基本类型或 void 所对应的 Java 语言关键字相同的
String
。
如果此类对象表示一个数组类,则名字的内部形式为:表示该数组嵌套深度的一个或多个 '
[
' 字符加元素类型名。元素类型名的编码如下:
Element Type Encoding
boolean Z
byte B
char C
class or interface
L
classname
;
double D
float F
int I
long J
short S
类或接口名
classname
是上面指定类的二进制名称。
String.class.getName()
returns "java.lang.String"
byte.class.getName()
returns "byte"
(new Object[3]).getClass().getName()
returns "[Ljava.lang.Object;"
(new int[3][4][5][6][7][8][9]).getClass().getName()
returns "[[[[[[[I"
public
ClassLoader
getClassLoader
()
返回该类的类加载器。有些实现可能使用 null 来表示引导类加载器。如果该类由引导类加载器加载,则此方法在这类实现中将返回 null。
如果存在安全管理器,并且调用者的类加载器不是 null,也不同于或是请求其类加载器的类的类加载器的祖先,则此方法通过
RuntimePermission("getClassLoader")
权限调用此安全管理器的
checkPermission
方法,以确保可以访问该类的类加载器。
如果此对象表示一个基本类型或 void,则返回 null。
返回:
加载此对象所表示的类或接口的类加载器。
SecurityException
- 如果存在安全管理器,并且
checkPermission
方法拒绝对该类类加载器的访问。
另请参见:
ClassLoader
,
SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
public
TypeVariable
<
Class
<
T
>>[]
getTypeParameters
()
按声明顺序返回
TypeVariable
对象的一个数组,这些对象表示用此
GenericDeclaration
对象所表示的常规声明来声明的类型变量。如果底层常规声明不声明类型变量,则返回长度为 0 的数组。
指定者:
接口
GenericDeclaration
中的
getTypeParameters
返回:
表示该常规声明所声明的类型变量的
TypeVariable
对象的一个数组
GenericSignatureFormatError
- 如果常规声明的常规签名不符合 Java Virtual Machine Specification, 3rd edition 规定的格式
从以下版本开始:
如果超类是参数化类型,则返回的
Type
对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示超类的参数化类型,则创建这个类型。有关参数化类型创建过程的语义,请参阅
ParameterizedType
声明。如果此
Class
表示
Object
类、接口、基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示
Object
类的
Class
对象。
返回:
此对象所表示的类的超类
GenericSignatureFormatError
- 如果常规类签名不符合 Java Virtual Machine Specification, 3rd edition 规定的格式
TypeNotPresentException
- 如果常规超类引用不存在的类型声明
MalformedParameterizedTypeException
- 如果常规超类引用的参数化类型由于某种原因无法实例化
从以下版本开始:
public
Package
getPackage
()
获取此类的包。此类的类加载器用于查找该包。如果该类是通过引导类加载器加载的,则搜索从 CLASSPATH 加载的包的集合,以查找该类的包。如果所有包对象都不是用该类的类加载器加载的,则返回 null。
只有该类的附属清单中定义了信息,并且类加载器使用该清单中的属性创建了包实例时,包才具有版本和规范属性。
确定此对象所表示的类或接口实现的接口。
如果此对象表示一个类,则返回值是一个数组,它包含了表示该类所实现的所有接口的对象。数组中接口对象顺序与此对象所表示的类的声明的
implements
子句中接口名顺序一致。例如,给定声明:
class Shimmer implements FloorWax, DessertTopping { ... }
设
s
的值为
Shimmer
的一个实例;表达式:
s.getClass().getInterfaces()[0]
的值为表示
FloorWax
接口的
Class
对象;
s.getClass().getInterfaces()[1]
的值为表示
DessertTopping
接口的
Class
对象。
如果此对象表示一个接口,则该数组包含表示该接口扩展的所有接口的对象。数组中接口对象顺序与此对象所表示的接口的声明的
extends
子句中接口名顺序一致。
如果此对象表示一个不实现任何接口的类或接口,则此方法返回一个长度为 0 的数组。
如果此对象表示一个基本类型或 void,则此方法返回一个长度为 0 的数组。
返回表示某些接口的
Type
,这些接口由此对象所表示的类或接口直接实现。
如果超接口是参数化类型,则为它返回的
Type
对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示每个超接口的参数化类型,则创建这个类型。有关参数化类型创建过程的语义,请参阅
ParameterizedType
声明。
如果此对象表示一个类,则返回一个包含这样一些对象的数组,这些对象表示该类实现的所有接口。数组中接口对象顺序与此对象所表示的类的声明的
implements
子句中接口名顺序一致。对于数组类,接口
Cloneable
和
Serializable
以该顺序返回。
如果此对象表示一个接口,则该数组包含表示该接口直接扩展的所有接口的对象。数组中接口对象顺序与此对象所表示的接口的声明的
extends
子句中接口名顺序一致。
如果此对象表示一个不实现任何接口的类或接口,则此方法返回一个长度为 0 的数组。
如果此对象表示一个基本类型或 void,则此方法返回一个长度为 0 的数组。
返回:
此类所实现的接口的一个数组
GenericSignatureFormatError
- 如果常规类签名不符合 Java Virtual Machine Specification, 3rd edition 规定的格式
TypeNotPresentException
- 如果任意常规超接口引用不存在的类型声明
MalformedParameterizedTypeException
- 如果任意常规超接口引用的参数化类型由于某种原因无法实例化
从以下版本开始:
public int
getModifiers
()
返回此类或接口以整数编码的 Java 语言修饰符。修饰符由 Java 虚拟机的
public
、
protected
、
private
、
final
、
static
、
abstract
和
interface
对应的常量组成;它们应当使用
Modifier
类的方法来解码。
如果底层类是数组类,则其
public
、
private
和
protected
修饰符与其组件类型的修饰符相同。如果此
Class
表示一个基本类型或 void,则其
public
修饰符始终为
true
,
protected
和
private
修饰符始终为
false
。如果此对象表示一个数组类、一个基本类型或 void,则其
final
修饰符始终为
true
,其接口修饰符始终为
false
。该规范没有给定其他修饰符的值。
Java Virtual Machine Specification
中的表 4.1 对修饰符编码进行了详细说明。
public
Method
getEnclosingMethod
()
如果此
Class
对象表示某一方法中的一个本地或匿名类,则返回
Method
对象,它表示底层类的立即封闭方法。否则返回
null
。
特别地,如果底层类是由一个类型声明、实例初始值设定项或静态初始值设定项立即封闭的本地或匿名类,则此方法返回
null
。
调用
s.checkMemberAccess(this, Member.PUBLIC)
方法拒绝访问该类中的类
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
从以下版本开始:
JDK1.1
throws
SecurityException
返回一个包含某些
Field
对象的数组,这些对象反映此
Class
对象所表示的类或接口的所有可访问公共字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果类或接口没有可访问的公共字段,或者表示一个数组类、一个基本类型或 void,则此方法返回长度为 0 的数组。
特别地,如果该
Class
对象表示一个类,则此方法返回该类及其所有超类的公共字段。如果该
Class
对象表示一个接口,则此方法返回该接口及其所有超接口的公共字段。
该方法不反映数组类的隐式长度字段。用户代码应使用
Array
类的方法来操作数组。
请参阅
Java Language Specification
的第 8.2 和 8.3 节。
调用
s.checkMemberAccess(this, Member.PUBLIC)
拒绝访问该类中的字段
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
从以下版本开始:
JDK1.1
throws
SecurityException
返回一个包含某些
Method
对象的数组,这些对象反映此
Class
对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共
member
方法。数组类返回从
Object
类继承的所有(公共)member 方法。返回数组中的元素没有排序,也没有任何特定的顺序。如果此
Class
对象表示没有公共成员方法的类或接口,或者表示一个基本类型或 void,则此方法返回长度为 0 的数组。
类初始化方法
<clinit>
不包含在返回的数组中。如果类声明了带有相同参数类型的多个公共成员方法,则它们都会包含在返回的数组中。
请参阅
Java Language Specification
的第 8.2 和 8.4 节。
调用
s.checkMemberAccess(this, Member.PUBLIC)
拒绝访问该类中的方法
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
从以下版本开始:
JDK1.1
throws
SecurityException
返回一个包含某些
Constructor
对象的数组,这些对象反映此
Class
对象所表示的类的所有公共构造方法。如果该类没有公共构造方法,或者该类是一个数组类,或者该类反映一个基本类型或 void,则返回一个长度为 0 的数组。
注意,此方法返回
Constructor<T>
对象的数组(即取自此类构造方法的数组)时,此方法的返回类型是
Constructor<?>[]
,
不是
预期的
Constructor<T>[]
。此少量信息的返回类型是必需的,因为从此方法返回之后,该数组可能被修改以保存不同类的
Constructor
对象,而这将违反
Constructor<T>[]
的类型保证。
调用
s.checkMemberAccess(this, Member.PUBLIC)
拒绝访问该类中的构造方法
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
从以下版本开始:
JDK1.1
SecurityException
返回一个
Field
对象,它反映此
Class
对象所表示的类或接口的指定公共成员字段。
name
参数是一个
String
,用于指定所需字段的简称。
要反映的字段由下面的算法确定。设 C 为此对象所表示的类:
如果 C 声明一个带有指定名的公共字段,则它就是要反映的字段。
如果在第 1 步中没有找到任何字段,则该算法被递归地应用于 C 的每一个直接超接口。直接超接口按其声明顺序进行搜索。
如果在第 1、2 两步没有找到任何字段,且 C 有一个超类 S,则在 S 上递归调用该算法。如果 C 没有超类,则抛出
NoSuchFieldException
。
请参阅
Java Language Specification
的第 8.2 和 8.3 节。
调用
s.checkMemberAccess(this, Member.PUBLIC)
拒绝访问字段
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
从以下版本开始:
JDK1.1
public
Method
getMethod
(
String
name,
Class
<?>... parameterTypes)
throws
NoSuchMethodException
,
SecurityException
返回一个
Method
对象,它反映此
Class
对象所表示的类或接口的指定公共成员方法。
name
参数是一个
String
,用于指定所需方法的简称。
parameterTypes
参数是按声明顺序标识该方法形参类型的
Class
对象的一个数组。如果
parameterTypes
为
null
,则按空数组处理。
如果
name
是 "
<init>
;" 或 "
<clinit>
",则将引发
NoSuchMethodException
。否则,要反映的方法由下面的算法确定(设 C 为此对象所表示的类):
在 C 中搜索任一
匹配的方法
。如果找不到匹配的方法,则将在 C 的超类上递归调用第 1 步算法。
如果在第 1 步中没有找到任何方法,则在 C 的超接口中搜索匹配的方法。如果找到了这样的方法,则反映该方法。
在 C 类中查找匹配的方法:如果 C 正好声明了一个具有指定名称的公共方法并且恰恰有相同的形参类型,则它就是反映的方法。如果在 C 中找到了多个这样的方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则反映该方法;否则将从中任选一个方法。
注意,类中可以有多个匹配方法,因为尽管 Java 语言禁止类声明带有相同签名但不同返回类型的多个方法,但 Java 虚拟机并不禁止。这增加了虚拟机的灵活性,可以用来实现各种语言特性。例如,可以使用
桥方法 (brige method)
实现协变返回;桥方法以及将被重写的方法将具有相同的签名,不同的返回类型。
请参阅
Java 语言规范
第 8.2 和 8.4 节。
返回:
与指定的
name
和
parameterTypes
匹配的
Method
对象
NoSuchMethodException
- 如果找不到匹配的方法,或者方法名为 "<init>" 或 "<clinit>"
NullPointerException
- 如果
name
为
null
SecurityException
- 如果存在安全管理器
s
,并满足下列任一条件:
调用
s.checkMemberAccess(this, Member.PUBLIC)
拒绝访问方法
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
从以下版本开始:
JDK1.1
public
Constructor
<
T
>
getConstructor
(
Class
<?>... parameterTypes)
throws
NoSuchMethodException
,
SecurityException
返回一个
Constructor
对象,它反映此
Class
对象所表示的类的指定公共构造方法。
parameterTypes
参数是
Class
对象的一个数组,这些 Class 对象按声明顺序标识构造方法的形参类型。
如果此
Class
对象表示非静态上下文中声明的内部类,则形参类型作为第一个参数包括显示封闭的实例。
要反映的构造方法是此
Class
对象所表示的类的公共构造方法,其形参类型与
parameterTypes
所指定的参数类型相匹配。
调用
s.checkMemberAccess(this, Member.PUBLIC)
拒绝访问构造方法
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
从以下版本开始:
JDK1.1
调用
s.checkMemberAccess(this, Member.DECLARED)
拒绝访问此类中已声明的类
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问此类的包
从以下版本开始:
JDK1.1
throws
SecurityException
返回
Field
对象的一个数组,这些对象反映此
Class
对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。
返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此
Class
对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
请参阅
Java Language Specification
的第 8.2 和 8.3 节。
调用
s.checkMemberAccess(this, Member.DECLARED)
拒绝访问此类中已声明的字段
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
从以下版本开始:
JDK1.1
throws
SecurityException
返回
Method
对象的一个数组,这些对象反映此
Class
对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何方法,或者此
Class
对象
表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。类初始化方法
<clinit>
不包含在返回数组中。如果该类声明带有相同参数类型的多个公共成员方法,则它们都包含在返回的数组中。
请参阅
Java Language Specification
第 8.2 节。
调用
s.checkMemberAccess(this, Member.DECLARED)
拒绝访问该类中已声明的方法
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
从以下版本开始:
JDK1.1
throws
SecurityException
返回
Constructor
对象的一个数组,这些对象反映此
Class
对象表示的类声明的所有构造方法。它们是公共、保护、默认(包)访问和私有构造方法。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类存在一个默认构造方法,则它包含在返回的数组中。
如果此
Class
对象表示一个接口、一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
请参阅
Java Language Specification
第 8.2 节。
调用
s.checkMemberAccess(this, Member.DECLARED)
拒绝访问该类中已声明的构造方法
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问此类的包
从以下版本开始:
JDK1.1
public
Field
getDeclaredField
(
String
name)
throws
NoSuchFieldException
,
SecurityException
返回一个
Field
对象,该对象反映此
Class
对象所表示的类或接口的指定已声明字段。
name
参数是一个
String
,它指定所需字段的简称。注意,此方法不反映数组类的
length
字段。
调用
s.checkMemberAccess(this, Member.DECLARED)
拒绝访问已声明字段
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
从以下版本开始:
JDK1.1
public
Method
getDeclaredMethod
(
String
name,
Class
<?>... parameterTypes)
throws
NoSuchMethodException
,
SecurityException
返回一个
Method
对象,该对象反映此
Class
对象所表示的类或接口的指定已声明方法。
name
参数是一个
String
,它指定所需方法的简称,
parameterTypes
参数是
Class
对象的一个数组,它按声明顺序标识该方法的形参类型。如果在某个类中声明了带有相同参数类型的多个方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则返回该方法;否则将从中任选一个方法。如果名称是 "<init>” 或 “<clinit>",则引发一个
NoSuchMethodException
。
调用
s.checkMemberAccess(this, Member.DECLARED)
拒绝访问已声明方法
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
从以下版本开始:
JDK1.1
getDeclaredConstructor
public
Constructor
<
T
>
getDeclaredConstructor
(
Class
<?>... parameterTypes)
throws
NoSuchMethodException
,
SecurityException
返回一个
Constructor
对象,该对象反映此
Class
对象所表示的类或接口的指定构造方法。
parameterTypes
参数是
Class
对象的一个数组,它按声明顺序标识构造方法的形参类型。
如果此
Class
对象表示非静态上下文中声明的内部类,则形参类型作为第一个参数包括显示封闭的实例。
调用
s.checkMemberAccess(this, Member.DECLARED)
拒绝访问已声明的构造方法
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
从以下版本开始:
JDK1.1
public
InputStream
getResourceAsStream
(
String
name)
查找具有给定名称的资源。查找与给定类相关的资源的规则是通过定义类的
class loader
实现的。此方法委托此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给
ClassLoader.getSystemResourceAsStream(java.lang.String)
。
在委托前,使用下面的算法从给定的资源名构造一个绝对资源名:
如果
name
以
'/'
开始
(
'\u002f'
),则绝对资源名是
'/'
后面的
name
的一部分。
否则,绝对名具有以下形式:
modified_package_name
/
name
其中
modified_package_name
是此对象的包名,该名用
'/'
取代了
'.'
(
'\u002e'
)。
返回:
一个
InputStream
对象;如果找不到带有该名称的资源,则返回
null
NullPointerException
- 如果
name
是
null
从以下版本开始:
JDK1.1
public
URL
getResource
(
String
name)
查找带有给定名称的资源。查找与给定类相关的资源的规则是通过定义类的
class loader
实现的。此方法委托给此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给
ClassLoader.getSystemResource(java.lang.String)
。
在委托前,使用下面的算法从给定的资源名构造一个绝对资源名:
如果
name
以
'/'
(
'\u002f'
) 开始,则绝对资源名是
'/'
后面的
name
的一部分。
否则,绝对名具有以下形式:
modified_package_name
/
name
其中
modified_package_name
是此对象的包名,该名用
'/'
取代了
'.'
(
'\u002e'
)。
返回:
该类的 ProtectionDomain
SecurityException
- 若安全管理器存在,并且其
checkPermission
方法不允许获取 ProtectionDomain。
从以下版本开始:
另请参见:
ProtectionDomain
,
SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
如果要在调用此方法时将要初始化该类,则返回将分配给该类的断言状态。
如果已经设置了该类的断言状态,则返回其最新设置;如果有包默认断言状态属于此类,则返回最特殊的相关包默认断言状态的最新设置;如果该类不是系统类(即它有类加载器),则返回其类加载器的默认断言状态;否则返回系统类默认断言状态。
很少有程序员需要此方法;它是为 JRE 自身提供的。(它使类能够在初始化时确定是否启用断言。)注意,不保证此方法在(或将要)初始化指定类时返回与(或将与)该指定类相关的实际断言状态。
返回:
所需的指定类断言状态。
从以下版本开始:
另请参见:
ClassLoader.setClassAssertionStatus(java.lang.String, boolean)
,
ClassLoader.setPackageAssertionStatus(java.lang.String, boolean)
,
ClassLoader.setDefaultAssertionStatus(boolean)
返回:
强制转换返回该对象,若 obj 为 null 则返回 null
ClassCastException
- 如果该对象不是 null 也不能分配给类型 T。
从以下版本开始:
public <U>
Class
<? extends U>
asSubclass
(
Class
<U> clazz)
强制转换该
Class
对象,以表示指定的 class 对象所表示的类的一个子类。检查强制转换的有效性,如果无效则抛出
ClassCastException
。如果此方法成功了,它将始终返回对此 class 对象的一个引用。
此方法的使用场合为:客户端需要“收缩转换”
Class
对象的类型,以便将其传递给某个 API,且该 API 对它愿意接受的
Class
对象进行限制。强制转换会产生一个编译时警告,因为强制转换的正确性无法在运行时检查(因为常规类型是通过擦除实现的)。
返回:
此
Class
对象,它被强制转换以表示指定类对象的子类。
ClassCastException
- 如果该
Class
对象不表示指定类的子类(这里“子类”包括该类本身)。
从以下版本开始:
public <A extends
Annotation
> A
getAnnotation
(
Class
<A> annotationClass)
从接口
AnnotatedElement
复制的描述
如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。
指定者:
接口
AnnotatedElement
中的
getAnnotation
参数:
annotationClass
- 对应于注释类型的 Class 对象
返回:
如果该元素的指定注释类型的注释存在于此对象上,则返回这些注释,否则返回 null
NullPointerException
- 如果给定的注释类为 null
从以下版本开始:
isAnnotationPresent
public boolean
isAnnotationPresent
(
Class
<? extends
Annotation
> annotationClass)
从接口
AnnotatedElement
复制的描述
如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。此方法主要是为了便于访问标记注释而设计的。
指定者:
接口
AnnotatedElement
中的
isAnnotationPresent
参数:
annotationClass
- 对应于注释类型的 Class 对象
返回:
如果指定注释类型的注释存在于此对象上,则返回 true,否则返回 false
NullPointerException
- 如果给定的注释类为 null
从以下版本开始:
从接口
AnnotatedElement
复制的描述
返回此元素上存在的所有注释。(如果此元素没有注释,则返回长度为零的数组。)该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。
指定者:
接口
AnnotatedElement
中的
getAnnotations
返回:
此元素上存在的所有注释
从以下版本开始:
从接口
AnnotatedElement
复制的描述
返回直接存在于此元素上的所有注释。与此接口中的其他方法不同,该方法将忽略继承的注释。(如果没有注释直接存在于此元素上,则返回长度为零的一个数组。)该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。
指定者:
接口
AnnotatedElement
中的
getDeclaredAnnotations
返回:
直接存在于此元素上的所有注释
从以下版本开始: