Java反射基本使用方法 示例

来源:互联网 发布:淘宝二次元 编辑:程序博客网 时间:2024/04/29 14:03
package com.reflection; import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;/**  * @author 鲁志明  E-mail: 13688601037@139.com * @version 创建时间:2013-6-1 下午9:06:22  *  */public class Demo {public static void main(String[] args) throws Exception, SecurityException {/** * 构造对象的步骤 *///1.获得Class对象Class<Person> personClass = Person.class;//2.获得Constructor对象Constructor<Person> personConstructor = personClass.getDeclaredConstructor(null);//3.设置该private的构造方法 可访问为truepersonConstructor.setAccessible(true);//4.利用Constructor构造出该对象Person person = personConstructor.newInstance(null);person.setAge(3);System.out.println("age="+person.getAge());/** * 调用属性的步骤 *///1.获得age Field 属性对象Field personAgeField = personClass.getDeclaredField("age");//2.设置属性的 可访问为truepersonAgeField.setAccessible(true);//3.给该属性设置值 , 设置的时候需要确定是给哪个对象设置,所以第一个参数是我们构造出来的person对象personAgeField.setInt(person, 4);System.out.println("age="+person.getAge());/** * 调用无参数 无返回值 方法 */Method personMethod1 = personClass.getDeclaredMethod("method1", null);personMethod1.setAccessible(true);personMethod1.invoke(person, null);/** * 调用有多个参数 有返回值的方法 *///1.获得Method对象,第一个参数是方法的名字,第二个参数是方法参数的Class数组对象Method personMethod2 = personClass.getDeclaredMethod("method2",new Class[]{String.class,String.class});//2.设置可访问 为 truepersonMethod2.setAccessible(true);//3.使用invoke()方法来执行某个对象的该方法//invoke的第一个参数是要执行该方法的对象,第二个参数是 执行该方法的需要参数数组String result = (String)personMethod2.invoke(person, new Object[]{"参数1","参数2"});System.out.println(result);}}