Java 反射

162 阅读2分钟

生活实例

精准导航弹,知道具体的地址和信息就可以对其结构进行轰炸,修改结构,Java 的反射便是如此

起源

java 做为一个动态语言的关键就是反射,反射在整个Java系统中都是非常重要的一环,反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和 方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。

成员

Java 反射到成员的方式

  • 通过的newInstance()方法来创建Class对象对应类的实例
Class<?> c = String.class;
 Object str = c.newInstance();
  • 先通过Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法来创建实例。这 种方法可以用指定的构造器构造类的实例。
//获取String所对应的Class对象 
 Class<?> c = String.class;
 //获取String类带一个String参数的构造器
 Constructor constructor = c.getConstructor(String.class); 
 //根据构造器创建实例
 Object obj = constructor.newInstance("23333");
 System.out.println(obj);

使用

Java反射机制主要提供了以下功能:

  • 在运行时构造任意一个类的对象
  • 在运行时获取或者修改任意一个类所具有的成员变量和方法
  • 在运行时调用任意一个对象的方法
  1. 得到构造器

Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的public构造函数(包括父类) Constructor[] getConstructors() -- 获得类的所有公共构造函数 Constructor getDeclaredConstructor(Class[] params) -- 获得使用特定参数类型的构造函数(包括私有) Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数(与接入级别无关)

  1. 获取成员变量

Field getField(String name) -- 获得命名的公共字段 Field[] getFields() -- 获得类的所有公共字段 Field getDeclaredField(String name) -- 获得类声明的命名的字段 Field[] getDeclaredFields() -- 获得类声明的所有字段

  1. 获取方法

Method getMethod(String name, Class[] params) -- 使用特定的参数类型,获得命名的公共方法 Method[] getMethods() -- 获得类的所有公共方法 Method getDeclaredMethod(String name, Class[] params) -- 使用特写的参数类型,获得类声明的命名的方法 Method[] getDeclaredMethods() -- 获得类声明的所有方法