java反射

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次
李四


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值