用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

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

加载中,请稍后...