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 类简介的更多相关文章

  1. 利用Java反射机制对实体类的常用操作工具类ObjectUtil

    代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...

  2. 浅谈Java反射机制 之 使用类的 属性、方法和构造函数

    前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...

  3. java反射技术主要实现类有哪些,作用分别是什么

    Java反射技术主要实现类有哪些,作用分别是什么? 在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中 1)Class类:代表一个类 2)Field 类 ...

  4. Java基础-日期格式化DateFormat类简介

    Java基础-日期格式化DateFormat类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.DateFormat类概述 DateFormat 是日期/时间格式化子类的抽象 ...

  5. Java反射——java.lang.Class和类的加载

    反射的基础: java.lang.Class Class类的实例对象,用于记录类描述信息. 源码说:represent classes and interfaces in a running Java ...

  6. [转]Java反射之如何判断类或变量、方法的修饰符(Modifier解析)

    Java针对类.成员变量.方法,有很多修饰符,例如public.private.static.final.synchronized.abstract等,这些修饰符用来控制访问权限或其他特性. 本文就用 ...

  7. 如何防止JAVA反射对单例类的攻击?

    在我的上篇随笔中,我们知道了创建单例类有以下几种方式: (1).饿汉式; (2).懒汉式(.加同步锁的懒汉式.加双重校验锁的懒汉式.防止指令重排优化的懒汉式); (3).登记式单例模式; (4).静态 ...

  8. JAVA nio 2 和 Path 类简介

    想要初步了解 NIO.2 API,也就是通常所说的“JSR203: More New I/O APIs for the Java Platform”,最好的切入点就是新的抽象类 java.nio.fi ...

  9. 浅谈Java反射机制 之 获取类的字节码文件 Class.forName("全路径名") 、getClass()、class

    另一个篇:获取 类 的 方法 和 属性(包括构造函数) 先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它 ...

随机推荐

  1. C语言运算符(注意事项)

    1.C语言取余注意事项:%   a.求余.模运算符(%)时要求两数必须是整型数据. b.取余的结果,是取决于被除数   (不管除数是正数 还是 负数,模的符号与被除数的符号相同).   例:8÷2=4 ...

  2. 输出1-n的全排(递归C++)

    [问题描述] 输出1到n之间所有不重复的排列,即1到n的全排,要求所产生的任一数列不含有重复的数字. [代码展示] #include<iostream>using namespace st ...

  3. 使用vue和web3创建你的第一个以太坊APP

    欢迎回到这个很牛的教程系列的第2部分,在教程中我们亲手构建我们的第一个分布式应用程序. 在第二部分中,我们将介绍VueJS和Vuex的核心概念,并引入web3js以与metamask进行交互. 如果你 ...

  4. AMF3 在Unity中使用AMF3和Java服务器通信

    现在在做的项目是一个网页游戏的移植到移动端. 所以服务器直接使用原来的代码.原来的游戏是as3实现,使用flash amf3数据通信. Unity 使用C#作为脚本语言,所以就需要.net的amf3解 ...

  5. web开发速查表(php,css,html5........)

  6. el-input怎么绑定回车事件

    在 Vue 2.0 中,为自定义组件绑定原生事件必须使用 .native 修饰符:<el-input v-model="queryForm.skuName" placehol ...

  7. Codeforces Round #391 div1 757F (Dominator Tree)

    首先先膜杜教orz 这里简单说一下支配树的概念 支配树是对一个有向图来讲的 规定一个起点s,如果s到v的路径上必须经过某些点u,那么离s最近的点u就是v的支配点 在树上的关系就是,v的父亲是u. 一般 ...

  8. 皮肤包项目的 Gradle 脚本演化

    我在做的一个项目需要有换肤功能,换肤的方案是采用第三方库 ThemeSkinning 的实现(在其基础上修复若干 bug).皮肤的制作是把相关的资源放在一个 app module 中打包成 apk,当 ...

  9. git config文件总结及git alias配置

    1. 文件位置 mac /etc/.gitconfig 系统级~/.gitconifg 用户级(覆盖系统级) windows C:\Users\$user\.gitconfig 当前项目下 .git/ ...

  10. 【BZOJ 4565】 [Haoi2016]字符合并 区间dp+状压

    考试的时候由于总是搞这道题导致爆零~~~~~(神™倒序难度.....) 考试的时候想着想着想用状压,但是觉得不行又想用区间dp,然而正解是状压着搞区间,这充分说明了一件事,状压不是只是一种dp而是一种 ...