package com.dwt1220;
import java.util.Date;
public class User {
private int id;
private String name;
private Date birther;
private float money;
public User(){
}
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 Date getBirther() {
return birther;
}
public void setBirther(Date birther) {
this.birther = birther;
}
public float getMoney() {
return money;
}
public void setMoney(float money) {
this.money = money;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", birther=" + birther
+ ", money=" + money + "]";
}
}
package com.dwt1220;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectTest {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Class clazz=User.class;
Object obj=create(clazz);
System.out.println("构造obj方法-------------------------");
System.out.println(obj);
invoke1(obj,"showName");
field(clazz);
}
/******new 类(构造类)******/
static Object create(Class clazz) throws Exception{
/******方法1、****************************/
clazz.newInstance();//类必须有无参的构造方法
/******方法2、****************************/
Constructor con=clazz.getConstructor(String.class);//获得带String类型的构造函数
Object obj=con.newInstance("test name");//通过构造函数构造类
return obj;
}
/********反射类的方法************/
static void invoke1(Object obj,String methodName) throws Exception{
/******方法1、****************************/
Method[] ms=obj.getClass().getDeclaredMethods();//反射类中的方法名,包括私有方法(不包括从父类继承的方法)
/******方法2、****************************/
ms=obj.getClass().getMethods();//反射类中的方法名,包括从父类继承的方法(不包括私有方法)
System.out.println("obj类的方法----------------------------------");
for(Method m:ms){
System.out.println(m.getName());
}
/***********方法1、***************************/
System.out.println("obj类方法的调用方法1、----------------------------------");
for(Method m:ms){
if(methodName.equals(m.getName())){
m.invoke(obj, null);//调用obj类中的方法(不适合有重载的方法)
}
}
/***********方法1、***************************/
System.out.println("obj类方法的调用方法2、----------------------------------");
Method m=obj.getClass().getMethod(methodName, null);
m.invoke(obj, null);
}
/********反射类的属性**************/
static void field(Class clazz){
Field[] fs=clazz.getDeclaredFields();//反射类中的属性名,包括私有属性(不包括从父类继承的属性)
// fs=clazz.getFields();//反射类中的属性名,包括从父类继承的属性(不包括私有属性)
System.out.println("obj类的属性----------------------------------");
for(Field f:fs){
System.out.println(f.getName());
}
}
}