package com.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
/**
* <p>反射</p>
* @author zhengyong3 2014年9月15日 下午2:54:15
*/
public class ClassReflect {
public static void main(String[] args) {
//通过一个对象获得完整的包名和类名
User user = new User();
System.out.println(user.getClass().getName());
try {
//通过Class实例化其他类的对象
Class<?> cls = Class.forName("com.reflect.User");
User u = (User)cls.newInstance();
u.setUserName("admin");
u.setPassword("12345");
System.out.println(u.toString());
//反射构造函数
Constructor<?>[] con = cls.getConstructors();
for(Constructor<?> c : con){
Class<?>[] vs = c.getParameterTypes();
int mod = c.getModifiers();
String s = Modifier.toString(mod);
System.out.print(s);
System.out.print(" "+c.getName() +"(");
int i = 0;
for(Class<?> v : vs){
if(i!=0){
System.out.print(",");
}
i++;
System.out.print(v.getName()+" arg"+i);
}
System.out.println("){}");
}
//反射setter方法
Method method = cls.getDeclaredMethod("setPassword", String.class);
method.invoke(u, "密码*");
method = cls.getDeclaredMethod("setUserName", String.class);
method.invoke(u, "用户名");
System.out.println(u.toString());
//反射公有方法
method = cls.getDeclaredMethod("print",String.class,Integer.class);
method.invoke(u, "次",100);
//通过反射操作属性
Field field = cls.getDeclaredField("userName");
field.setAccessible(true);
field.set(u, "李四");
System.out.println(field.get(u));
} catch (Exception e) {
e.printStackTrace();
}
}
}
class User{
private String userName;
private String password;
public User(String s,String t){}
public User(){}
public void print(String str,Integer in){
System.out.println("打印:"+in+str);
}
/**
* 获取userName
* @return userName userName
*/
public String getUserName() {
return userName;
}
/**
* 设置userName
* @param userName userName
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* 获取password
* @return password password
*/
public String getPassword() {
return password;
}
/**
* 设置password
* @param password password
*/
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User: {userName:"+this.userName+",password:"+this.password+"}";
}
}
运行结果:
com.reflect.User
User: {userName:admin,password:12345}
public com.reflect.User(){}
public com.reflect.User(java.lang.String arg1,java.lang.String arg2){}
User: {userName:用户名,password:密码*}
打印:100次
李四