java 反射机制

来源:互联网 发布:java用户登录权限 编辑:程序博客网 时间:2024/06/08 04:44

反射机制:

指的是可以于运行时加载,探知,使用编译期间完全未知的类。程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个;已加载的类,都能知道这个类的所有方法

属性;对于任意一个对象,都能够调用它的任意一个方法和属性,加载完类之后,在堆内存中,就产生了一个Class类型的对象,(一个类只有一个Class对象 )这个对象就包含了完整

的类的结构信息,我们可以通过这个对象看到类的结构,这个对象就像一面镜子,形象的称为:反射

 Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注解是一种接口。 每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的

组都共享该 Class 对 象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也 表示为 Class 对象。 

 Class 类是整个 Java 反射机制的源头,Class 类本身表示 Java 对象的类型,获取 Class 对象的方法有很多种,比如我们可通过 Class  clazz = 类.class 方式获得某个类的 Class实例

 
方式说明1.通过类名获得类实例 
Class  类实例  = 类名.class  
1. 这种方法获得类对象比较直接 
2. 对于基本类型来说,他们也有自己的类对象,
并且要获 得基本类型的类对象,只能通过类型名.class来获得类对象。
 例如 Class  intClass = int.class; 
2. 通过 Class 的 forName 方法加载类获得类实例 
Class 类实例  = Class.forName("类名"); 1. Class.forName("类名");注意这种方式,类名必须是带有 完整的包名。 
例如 Class.forName("com.mysql.jdbc.Driver"); 
2. 这种加载类的方式在编译阶段就会进行实例化,类 名.class 方式是执行阶段类加载给虚拟机时才进行实例化 3.通过类的实例化对象获得类实例 
Class类实例 = 具体对象.getClass() getClass()方法源自于 Object 类,所有的类的实例化对象均 可通过 getClass()方法获得所属类的类实例对象   

以上是获得 Class 类实例的方法,在实际应用中,根据实际应用场合选择方法,所知信息为类名, 就使用类名.class 方式,所知信息为对象,就使用对象.getClass()方式。 
在得到 Class 类实例后,根据 Class 类实例就可以得到所属类的各种信息了,首先是类的整体信息
API 
方式说明String  getName() 获取类的名称,包括包名 String getSimpleName() 获得类的简称,不包括包括包名 Class<?  super T> getSuperClass() 获得本类的父类的类信息(Class )Class<?>[]  getInterfaces() 获得本类实现的所有接口的类信息 

获取类的成员属性 API 

方式说明Field getField(String name)根据变量名,返回一个具体的具有 public 属性的成 员属性 Field[]  getFields()返回具有 public 属性的成员属性数组 Field DeclaredField(String name) 根据变量名返回一个成员变量(不分 public 和非 public 属性)Field[] DeclaredFields()返回所有成员变量组成的数组(不分 public 和非 public 属性) 

获取类的成员方法 API 


方式说明Method getMethod(String name, Class<?>... parameterTypes)    
   根据方法名和参数类型,返回一个具体的 具有 public 属性的方法 Method[] getMethods()   返回所有具有 public 属性的方法数组,包 括从父类继承的public方法和实现接口的 public 方法 Method getDeclaredMethod(String name, Class<?>... parameterTypes)  
根据方法名和参数类型,返回一个具体的 方法(不分 public 和非 public 属性) Method[] getDeclaredMethods()   返回该类中的所有声明的方法数组(不分 public 和非 public 属性) 

获取类的构造方法 API 


方法名说明
Contructor  getConstructor(Class<?>... parameterTypes)根据构造方法的参数类型,返回一个具 体的具有 public 属性的构造方法   Contructor  getConstructor() 返回所有具有 public 属性的构造方法数 组 
Constructor getDeclaredConstructors(Class<?>... parameterTypes) 
根据构造方法的参数类型,返回一个具 体的构造方法(不分 public 和非 public 属性) Constructor  getDeclaredConstructors() 返回该类中所有的构造方法数组(不分 public 和非 public 属性) 



















原创粉丝点击