Java反射——java.lang.Class 类简介
Java的基本思想之一是万事万物即对象,类也是一种对象。但是类是什么对象呢?Java中的类是java.lang.Class的实例化对象,这被成为类类型。
//java.lang.Class类中的的主要方法如下
下面是Java1.8 API中java.lang.Class类中的方法:
va.lang中Class Class <T>
java.lang.Object继承的java.lang.Class<T>
类型参数:
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对象,由具有相同元素类型和维数的所有数组共享。 原始Java类型(boolean,byte,char,short,int,long,float和double)以及关键字void也表示为Class对象。
类没有公共构造函数。 相反,类对象由Java虚拟机在加载类时自动构造,并通过调用类加载器中的defineClass方法。
以下示例使用Class对象来打印对象的类名:
void printClassName(Object obj) {
System.out.println("The class of " + obj +
" is " + obj.getClass().getName());
}
也可以使用类文字获取命名类型(或void)的Class对象。 请参阅Java™语言规范的第15.8.2节。 例如:
System.out.println("The name of class Foo is: "+Foo.class.getName());
方法摘要:
修饰符和类型 方法和描述
<U> Class<? extends U> asSubclass(Class<U> clazz)
转换此Class对象以表示由指定的类对象表示的类的子类。
T cast(Object obj)
将对象强制转换为此Class对象所表示的类或接口。
boolean desiredAssertionStatus()
如果要在调用此方法时初始化,则返回将分配给此类的断言状态。
static Class<?> forName(String className)
返回与具有给定字符串名称的类或接口关联的Class对象。
static Class <?> forName(String name,boolean initialize,ClassLoader loader)
使用给定的类加载器返回与具有给定字符串名称的类或接口关联的Class对象。
AnnotatedType[] getAnnotatedInterfaces()
返回AnnotatedType对象的数组,这些对象表示使用类型来指定此Class对象所表示的实体的超接口。
AnnotatedType getAnnotatedSuperclass()
返回AnnotatedType对象,该对象表示使用类型来指定此Class对象所表示的实体的超类。
<A extends Annotation> A getAnnotation(Class<A> annotationClass)
如果存在这样的注释,则返回指定类型的此元素的注释,否则返回null。
Annotation[] getAnnotations()
返回此元素上存在的注释。
<A extends Annotation> A[] getAnnotationsByType(Class<A> annotationClass)
返回与此元素关联的注释。
String getCanonicalName()
返回Java语言规范定义的基础类的规范名称。
Class<?>[] getClasses()
返回一个数组,其中包含Class对象,这些对象表示作为此Class对象所表示的类的成员的所有公共类和接口。
ClassLoader getClassLoader()
返回类的类加载器。
Class<?> getComponentType()
返回表示数组的组件类型的Class。
Constructor<T> getConstructor(Class<?>... parameterTypes)
返回一个Constructor对象,该对象反映此Class对象所表示的类的指定公共构造函数。
Constructor<?>[] getConstructors()
返回一个包含Constructor对象的数组,这些对象反映此Class对象所表示的类的所有公共构造函数。
<A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass)
如果直接存在这样的注释,则返回指定类型的此元素的注释,否则返回null。
Annotation[] getDeclaredAnnotations()
返回直接出现在此元素上的注释。
<A extends Annotation> A[] getDeclaredAnnotationsByType(Class<A> annotationClass)
如果此类注释直接存在或间接存在,则返回指定类型的此元素的注释。
Class<?>[] getDeclaredClasses()
返回Class对象的数组,这些对象反映声明为此Class对象所表示的类的成员的所有类和接口。
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
返回一个Constructor对象,该对象反映此Class对象所表示的类或接口的指定构造函数。
Constructor<?>[] getDeclaredConstructors()
返回Constructor对象的数组,这些对象反映由此Class对象表示的类声明的所有构造函数。
Field getDeclaredField(String name)
返回一个Field对象,该对象反映此Class对象所表示的类或接口的指定声明字段。
Field[] getDeclaredFields()
返回Field对象的数组,这些对象反映由此Class对象表示的类或接口声明的所有字段。
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
返回一个Method对象,该对象反映此Class对象所表示的类或接口的指定声明方法。
Method[] getDeclaredMethods()
返回一个数组,其中包含反映此Class对象所表示的类或接口的所有声明方法的Method对象,包括public,protected,default(包)访问和私有方法,但不包括继承的方法。
Class<?> getDeclaringClass()
如果此Class对象表示的类或接口是另一个类的成员,则返回表示声明它的类的Class对象。
Class<?> getEnclosingClass()
返回基础类的直接封闭类。
Constructor<?> getEnclosingConstructor()
如果此Class对象表示构造函数中的本地或匿名类,则返回一个Constructor对象,该对象表示基础类的直接封闭构造函数。
Method getEnclosingMethod()
如果此Class对象表示方法中的本地或匿名类,则返回表示基础类的直接封闭方法的Method对象。
T[] getEnumConstants()
返回此枚举类的元素,如果此Class对象不表示枚举类型,则返回null。
Field getField(String name)
返回一个Field对象,该对象反映此Class对象所表示的类或接口的指定公共成员字段。
Field[] getFields()
返回一个包含Field对象的数组,这些对象反映此Class对象所表示的类或接口的所有可访问公共字段。
Type[] getGenericInterfaces()
返回表示由此对象表示的类或接口直接实现的接口的Types。
Type getGenericSuperclass()
返回表示此Class表示的实体(类,接口,基本类型或void)的直接超类的Type。
Class<?>[] getInterfaces()
确定由此对象表示的类或接口实现的接口。
Method getMethod(String name, Class<?>... parameterTypes)
返回一个Method对象,该对象反映此Class对象所表示的类或接口的指定公共成员方法。
Method[] getMethods()
返回一个包含Method对象的数组,这些对象反映此Class对象所表示的类或接口的所有公共方法,包括由类或接口声明的那些以及从超类和超接口继承的那些。
int getModifiers()
返回此类或接口的Java语言修饰符,以整数编码。
String getName()
以String形式返回此Class对象表示的实体名称(类,接口,数组类,基本类型或void)。
Package getPackage()
获取此类的包。
ProtectionDomain getProtectionDomain()
返回此类的ProtectionDomain。
URL getResource(String name)
查找具有给定名称的资源。
InputStream getResourceAsStream(String name)
查找具有给定名称的资源。
Object[] getSigners()
获取此类的签名者。
String getSimpleName()
返回源代码中给出的基础类的简单名称。
Class<? super T> getSuperclass()
返回表示此Class表示的实体(类,接口,基本类型或void)的超类的Class。
String getTypeName()
返回此类型名称的信息字符串。
TypeVariable<Class<T>>[] getTypeParameters()
返回TypeVariable对象的数组,这些对象表示由此GenericDeclaration对象以声明顺序表示的泛型声明声明的类型变量。
boolean isAnnotation()
如果此Class对象表示注释类型,则返回true。boolean isAnnotationPresent(Class <?extends Annotation> annotationClass)如果此元素上存在指定类型的注释,则返回true,否则返回false。
boolean isAnonymousClass()
当且仅当基础类是匿名类时返回true。
boolean isArray()
确定此Class对象是否表示数组类。
boolean isAssignableFrom(Class<?> cls)
确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口。
boolean isEnum()
当且仅当此类在源代码中声明为枚举时返回true。
boolean isInstance(Object obj)
确定指定的Object是否与此Class表示的对象分配兼容。
boolean isInterface()
确定指定的Class对象是否表示接口类型。
boolean isLocalClass()
当且仅当基础类是本地类时返回true。
boolean isMemberClass()
当且仅当底层类是成员类时返回true。
boolean isPrimitive()
确定指定的Class对象是否表示基本类型。
boolean isSynthetic()
如果此类是合成类,则返回true; 否则返回false。
T newInstance()
创建此Class对象表示的类的新实例。
String toGenericString()
返回描述此Class的字符串,包括有关修饰符和类型参数的信息。
String toString()
将对象转换为字符串。
Java反射——java.lang.Class 类简介的更多相关文章
- 利用Java反射机制对实体类的常用操作工具类ObjectUtil
代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...
- 浅谈Java反射机制 之 使用类的 属性、方法和构造函数
前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...
- java反射技术主要实现类有哪些,作用分别是什么
Java反射技术主要实现类有哪些,作用分别是什么? 在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中 1)Class类:代表一个类 2)Field 类 ...
- Java基础-日期格式化DateFormat类简介
Java基础-日期格式化DateFormat类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.DateFormat类概述 DateFormat 是日期/时间格式化子类的抽象 ...
- Java反射——java.lang.Class和类的加载
反射的基础: java.lang.Class Class类的实例对象,用于记录类描述信息. 源码说:represent classes and interfaces in a running Java ...
- [转]Java反射之如何判断类或变量、方法的修饰符(Modifier解析)
Java针对类.成员变量.方法,有很多修饰符,例如public.private.static.final.synchronized.abstract等,这些修饰符用来控制访问权限或其他特性. 本文就用 ...
- 如何防止JAVA反射对单例类的攻击?
在我的上篇随笔中,我们知道了创建单例类有以下几种方式: (1).饿汉式; (2).懒汉式(.加同步锁的懒汉式.加双重校验锁的懒汉式.防止指令重排优化的懒汉式); (3).登记式单例模式; (4).静态 ...
- JAVA nio 2 和 Path 类简介
想要初步了解 NIO.2 API,也就是通常所说的“JSR203: More New I/O APIs for the Java Platform”,最好的切入点就是新的抽象类 java.nio.fi ...
- 浅谈Java反射机制 之 获取类的字节码文件 Class.forName("全路径名") 、getClass()、class
另一个篇:获取 类 的 方法 和 属性(包括构造函数) 先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它 ...
随机推荐
- C语言运算符(注意事项)
1.C语言取余注意事项:% a.求余.模运算符(%)时要求两数必须是整型数据. b.取余的结果,是取决于被除数 (不管除数是正数 还是 负数,模的符号与被除数的符号相同). 例:8÷2=4 ...
- 输出1-n的全排(递归C++)
[问题描述] 输出1到n之间所有不重复的排列,即1到n的全排,要求所产生的任一数列不含有重复的数字. [代码展示] #include<iostream>using namespace st ...
- 使用vue和web3创建你的第一个以太坊APP
欢迎回到这个很牛的教程系列的第2部分,在教程中我们亲手构建我们的第一个分布式应用程序. 在第二部分中,我们将介绍VueJS和Vuex的核心概念,并引入web3js以与metamask进行交互. 如果你 ...
- AMF3 在Unity中使用AMF3和Java服务器通信
现在在做的项目是一个网页游戏的移植到移动端. 所以服务器直接使用原来的代码.原来的游戏是as3实现,使用flash amf3数据通信. Unity 使用C#作为脚本语言,所以就需要.net的amf3解 ...
- web开发速查表(php,css,html5........)
- el-input怎么绑定回车事件
在 Vue 2.0 中,为自定义组件绑定原生事件必须使用 .native 修饰符:<el-input v-model="queryForm.skuName" placehol ...
- Codeforces Round #391 div1 757F (Dominator Tree)
首先先膜杜教orz 这里简单说一下支配树的概念 支配树是对一个有向图来讲的 规定一个起点s,如果s到v的路径上必须经过某些点u,那么离s最近的点u就是v的支配点 在树上的关系就是,v的父亲是u. 一般 ...
- 皮肤包项目的 Gradle 脚本演化
我在做的一个项目需要有换肤功能,换肤的方案是采用第三方库 ThemeSkinning 的实现(在其基础上修复若干 bug).皮肤的制作是把相关的资源放在一个 app module 中打包成 apk,当 ...
- git config文件总结及git alias配置
1. 文件位置 mac /etc/.gitconfig 系统级~/.gitconifg 用户级(覆盖系统级) windows C:\Users\$user\.gitconfig 当前项目下 .git/ ...
- 【BZOJ 4565】 [Haoi2016]字符合并 区间dp+状压
考试的时候由于总是搞这道题导致爆零~~~~~(神™倒序难度.....) 考试的时候想着想着想用状压,但是觉得不行又想用区间dp,然而正解是状压着搞区间,这充分说明了一件事,状压不是只是一种dp而是一种 ...