Java 反射

一.概念

        反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。例如它允许一个java的类获取他所有的成员变量和方法并且显示出来。

Spring JavaBean 是 reflection 的实际应用之一;其通过 reflection 动态的载入并取得 Java 组件(类) 的属性。

二、通过Java反射查看类信息

1、如何获取Class对象?(三种方式)

StringBuilder builder = new StringBuilder();

Class class2 = builder.getClass();

Class class1 = StringBuilder.class;

Class class3 = Class.forName("com.app.Lettcode");  

2、获取class对象的属性?

Field [] publicFields = class1.getFields();  // 获取公有属性

Field [] allFields = class1.getDeclaredFields();  // 获取所有属性

Field nameField = class1.getField("name"); // 获取指定属性

nameField .set("name","1");

3、获取class对象的方法?

Method [] publicMethods = class1.getMethods(); // 获取公有方法

Method [] allMethods = class1.getDeclaredMethods();  // 获取所有方法

Method method = class1.getMethod("getName", String.class); // 获取指定方法

4、获取对象构造函数?

Constructor constructor = class1.getConstructor();

Constructor constructor1 = class1.getConstructor(String.class);

三、通过Java反射生成并操作对象

1、如何生成类的实例对象?

Object object = class1.newInstance();

2、如何调用类的方法?

Method method = class1.getMethod("getName", String.class);

method.setAccessible(true);

Object returnObject = method.invoke(object, "1");

当通过Method的invoke()方法来调用对应的方法时,Java会要求程序必须有调用该方法的权限。如果程序确实需要调用某个对象的private方法,则可以先调用Method对象的如下方法。

setAccessible(boolean flag):将Method对象的acessible设置为指定的布尔值。值为true,指示该Method在使用时应该取消Java语言的访问权限检查;值为false,则知识该Method在使用时要实施Java语言的访问权限检查。


你可能感兴趣的:(Java 反射)