概念:

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

优点:

能够运行时动态获取类的实例,大大提高系统的灵活性和扩展性。

与 Java 动态编译相结合,可以实现无比强大的功能。

能够让我们很方便的创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代码的链接,更加容易实现面向对象。

达到解耦的作用。

缺点:

反射会消耗一定的系统资源,因此,如果不需要动态地创建一个对象,那么就不需要用反射;

反射调用方法时可以忽略权限检查,获取这个类的私有方法和属性,因此可能会破坏类的封装性而导致安全问题。

常用的一些信息:

java 反射存在问题 java反射缺点优点_java 反射存在问题

java 反射存在问题 java反射缺点优点_java 反射存在问题_02

获取类对象

首先创建一个bean类:

java 反射存在问题 java反射缺点优点_不是java反射缺点_03

java 反射存在问题 java反射缺点优点_java 反射存在问题_02

获取类对象有3种方式:

1 通过字符串找到class (最常用的方式)

2.直接通过类获取自己的class

3.this.getClass

java 反射存在问题 java反射缺点优点_java 反射存在问题_02

实例:

java 反射存在问题 java反射缺点优点_调用方法_06

通过反射创建对象

Object object = clzClass1.newInstance();

java 反射存在问题 java反射缺点优点_java 反射存在问题_02

java 反射存在问题 java反射缺点优点_main方法_08

Constructor 类

提供类的构造方法信息。

java 反射存在问题 java反射缺点优点_调用方法_09

Field 类

提供类或接口中成员变量信息。

获取成员变量并使用

基本步骤:

获取Persn类的对象new方法/第2章中的方法h获取属性Field f1 = h.getDeclaredField("属性名")修改属性f1.set(h,实参),注意这里的h是对象,不是类对象

需要一个java bean对象并完成set,get方法

java 反射存在问题 java反射缺点优点_java 反射存在问题_02

java 反射存在问题 java反射缺点优点_java 反射存在问题_11

获取变量并赋值:

java 反射存在问题 java反射缺点优点_java 反射存在问题_02

java 反射存在问题 java反射缺点优点_调用方法_13

获取方法并调用方法

获取Person类的对象 person2获取成员方法:
public Method getMethod(String name ,Class>… parameterTypes):
获取"公有方法";(包含了父类的方法也包含Object类)public Method getDeclaredMethods(String name ,Class>… parameterTypes) :
获取成员方法,包括私有的(不包括继承的)参数解释:name : 
方法名;Class … : 
形参的Class类型对象调用方法Method --> public Object invoke(Object obj,Object… args):
参数说明:obj : 
要调用方法的对象;args:
调用方式时所传递的实参;

实例:

java 反射存在问题 java反射缺点优点_不是java反射缺点_14

调用main方法:

在person中新增一个main方法

java 反射存在问题 java反射缺点优点_不是java反射缺点_15

调用main方法:

java 反射存在问题 java反射缺点优点_java 反射存在问题_02

java 反射存在问题 java反射缺点优点_main方法_17