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的构造方法 可访问为true
personConstructor.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.设置属性的 可访问为true
personAgeField.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.设置可访问 为 true
personMethod2.setAccessible(true);
// 3.使用invoke()方法来执行某个对象的该方法
// invoke的第一个参数是要执行该方法的对象,第二个参数是 执行该方法的需要参数数组
String result = (String)personMethod2.invoke(person, new Object[]{"参数1","参数2"});
System.out.println(result);
}
}
Java反射基本使用方法 示例
最新推荐文章于 2023-04-01 21:55:20 发布