用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

reflect反射技术

2014-08-04 作者: jun举报

[java]代码库

package d.cn.itcast.reflect;
 
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
 
import org.junit.Test;
//在创建一个类User.java  属性 id ,name 提供get set 方法  和构造
public class ReflectUser {
    // @Test
    public void test1() throws Exception {
        // 1: 找User.class 包的全路径 d.cn.itcast.reflect.User.class
        // 获取Class 对象 User字节码对象
        Class clazz = Class.forName("d.cn.itcast.reflect.User");
        // 2: 获取对象实例化 通过构造方法 实例化对象
        Constructor c1 = clazz.getConstructor(String.class, String.class);
        // 可以通过构造方法 进行对象属性的注入
        User user = (User) c1.newInstance("1010", "lisi");
 
        // 3: 对实例化的对象 调用 指定的方法getName获取名字
        Method m = clazz.getMethod("getName", null);
        // 表示方法名是getName 该方法参数是null 无参方法的反射调用
        // 有参方法的调用 需要申明 方法参数的数据类型 String.class
        Method m1 = clazz.getMethod("setName", String.class);
        m1.invoke(user, "zs");// 给该方法 传递参数具体值
        // 4: 调用方法执行 invoke(实例化对象,方法需要的参数)
        // 方法执行
        System.out.println(m.invoke(user, null));
 
        // 2.2 操作属性对象 Field
        // Field[] fields = clazz.getFields();// 获取不到.默认 私有的属性....只能获取public 修饰
        // Field[] fields = clazz.getDeclaredFields();// 获取所有的属性 public private
        // 默认的都可以获取
        // 默认
        // for (int i = 0; i < fields.length; i++) {
        // System.out.println(fields[i].getName());
        // }
        Field field = clazz.getDeclaredField("name");
        field.setAccessible(true);// 注意: 私有的属性 注入需要添加此行代码
        field.set(user, "赵六");// object 实例化 user value 属性值
        System.out.println(m.invoke(user, null));
 
        // Method[] methods = clazz.getMethods();
        // for (int i = 0; i < methods.length; i++) {
        // System.out.println(methods[i].getName());
        // }
    }
 
    @Test
    public void test2() throws Exception {
        // 2: 获取字节码对象第二种方式
        // Class c = User.class;
        // 3: 类getClass() 第三种方式
        // User u = new User();
        // u.getClass();
        // 常用第一种
        Class clazz = Class.forName("d.cn.itcast.reflect.User");
        // 直接获取无参构造实例化
        User user = (User) clazz.newInstance();
        Constructor[] constructors = clazz.getConstructors();
        Field field = clazz.getField("name");
        field.set(user, "lisi");
        // Method m = clazz.getMethod("getName", null);
        // String name = (String) m.invoke(user, null);
        // System.out.println(name);
 
    }
 
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...