- Person.java:
- package test;
- public class Person {
- private String name;
- private int age;
- public Person(){
- }
- }
- Demo.java:
- package test;
- import java.lang.reflect.Field;
- public class Demo {
- public static void main(String[] args) throws Exception{
- Class<?> c=null;
- Object obj=null;
- try {
- c=Class.forName("test.Person");
- } catch (ClassNotFoundException e1) {
- e1.printStackTrace();
- }
- try {
- obj=c.newInstance();
- } catch (InstantiationException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- Field nameField=null;
- Field ageField=null;
- nameField=c.getDeclaredField("name");
- ageField=c.getDeclaredField("age");
- nameField.setAccessible(true);
- nameField.set(obj,"软件工程");
- ageField.setAccessible(true);
- ageField.set(obj, 20);
- System.out.println("姓名:"+nameField.get(obj));
- System.out.println("年龄:"+ageField.get(obj));
- }
- }
个-person:
package com.java_reflect3; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * Created by Administrator on 2017/8/17. */ class Hello { private static int id; private static String name; private static String site; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSite() { return site; } public void setSite(String site) { this.site = site; } //自定义方法 public void home(String sex, String age) { System.out.println("性别:" + sex); System.out.println("年龄:" + age); } } public class ListDemoLianXi { public static void main(String[] args) { //类中方法参数赋值测试 //new ListDemoLianXi().MethodTest(); //成员变量赋值测试 variableTest(); } /** * 变量赋值测试 */ public static void variableTest() { //创建本类对象 Hello hello = new Hello(); //创建类的实例 Class c = hello.getClass(); //创建属性操作对象、具体属性操作 重要:有几个属性必须创建几个实例对象(要么在你输出的时候你有多个属性的话,调用的是一个对象那 必然输出的是一个对象的值 切记) Field nameField = null; Field siteField = null; try { //getDeclaredField:获取你自定义变量的名称 nameField = c.getDeclaredField("name"); siteField = c.getDeclaredField("site"); //属性name赋值: nameField.setAccessible(true); nameField.set(hello, "诺小华!"); //属性site赋值: setAccessible(true);作用: 将此对象的 accessible 标志设置为指示的布尔值。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。 siteField.setAccessible(true); siteField.set(hello, "天津市津南区小站"); System.out.println("姓名:" + nameField.get(hello)); System.out.println("地址:" + siteField.get(hello)); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } /** * 类中的方法(参数)赋值测试 */ public void MethodTest() { //创建对象 Hello hello1 = new Hello(); //创建Class类对象 Class c = hello1.getClass(); //使用反射进行给具体方法参数赋值 try { Method method = c.getMethod("home", String.class, String.class); //invoke参数错误:object is not an instance of declaring class 如果把前面的Object参数传为字符串类型,会抛出该异常,必须是你实体类的对象即可 method.invoke(hello1, "男生", "2 1");//args可以参多个参数 //打印出的方法中参数的类类型信息 System.out.println("home内容为:" + method); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } }