反射功能测试类:
package com.xie.app;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* 测试反射类
*
* @author Hao
*
*/
public class Test {
public static void main(String[] args) {
try {
Class user_class = null; // Class对象声明
// 1.获取Class对象的三种方式
user_class = User.class;
user_class = Class.forName("com.xie.app.User");
user_class = new User().getClass();
// 2.通过Class无参构造实例化对象,没有无参构造报错
User user = (User) user_class.newInstance();
// 3.获取构造方法,通过构造方法实例对象
Constructor[] constructors = user_class.getConstructors(); // 获取所有的构造方法
Constructor constructor = user_class.getConstructor(); // 无参构造获取
constructor = user_class.getConstructor(String.class, int.class); // 有参构造获取
user = (User) constructor.newInstance("李四", 18); // 有参构造实例化对象
// 4.获取属性
Field[] fields = user_class.getDeclaredFields(); // 获取所有的定义的属性
Field field = user_class.getDeclaredField("age"); // 获取指定的属性,public属性
System.out.println(field.get(user)); // 获取属性值并输出
field = user_class.getDeclaredField("name"); // 获取指定的属性,private属性
field.setAccessible(true); // 设置属性可访问
System.out.println(field.get(user)); // 获取属性值并输出
field.set(user, "王五"); // 设置私有属性值
System.out.println(field.get(user)); // 获取属性值并输出
// 5.获取方法
Method[] methods = user_class.getDeclaredMethods(); // 获取所有的定义的方法
Method method = user_class.getDeclaredMethod("sayName"); // 获取指定方法,public,没有参数
method.invoke(user); // 调用方法
method = user_class.getDeclaredMethod("sayAge", int.class); // 获取指定方法,private,有参数
method.setAccessible(true); // 设置方法可访问
method.invoke(user, 13); // 调用方法
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
用来反射的类:
package com.xie.app;
/**
* 测试用户类
*
* @author Hao
*
*/
public class User {
private String name; // 私有的属性
public int age; // 公共的属性
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
/**
* 公共的方法输出姓名
*/
public void sayName() {
System.out.println("输出的:" + name);
}
/**
* 私有的方法输出姓名
*/
private void sayAge(int age) {
System.out.println("输出的:" + age);
}
}