Java反射机制梳理(一)

         至于什么是反射,利用反射技术有什么好处,在这里文章中有一个详细的介绍了。具体可以查看 公共技术点之 Java 反射 Reflection

下面梳理一下,在复习研究反射机制中,遇到的知识点:

(一).获取对象(3中方式)

    1.通过类的完整路径来获取对象

    Class demo1 = Class.forName("com.fangdingjie.bean.Book");
    2.通过实例化来获取对象

    Book book = new Book();
    Object ob = book;
    Class demo2 = ob.getClass();
   3直接类名称.class获取对象
   Class demo3 = Book.class;

 (二).获取对象属性

/**
	 * 该方法用于获取传递过来的属性以及属性对应的值
	 * @param ob
	 */
	public void show(Object ob) {
		// 获得传递过来的对象
		Class cl = ob.getClass();
		// 获得对应的属性集合
		Field[] fi = cl.getDeclaredFields();
		try {
			for (Field ff : fi) {
				ff.setAccessible(true);
				//获取私有属性的时候要先开启访问权限。否则会报错
				System.out.println("属性" + ff.getName() + ",对应的值:" + ff.get(ob));
			}
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

(三).获取对象中的方法以及调用

    1  .获取方法以及参数

/**
	 * 该方法用于返回 获取对象的所有方法,返回值类型以及参数信息
	 * @param ob
	 */
	public void show(Object ob){
		Class cl = ob.getClass();
		Method [] method = cl.getDeclaredMethods();
		for(Method m:method){
			
			//获取方法的参数,返回的是一个Class类型的数组
			Class [] paramCl = m.getParameterTypes();
			System.out.println("方法名"+m.getName()+",返回值类型"+m.getReturnType()+",方法修饰值"+m.getModifiers());
		     
		}
	}
   2.方法的调用。

//该方法用于传递过来的实体对象方法的调用
	public void showUser(Object ob){
		Class cl = ob.getClass();
		try {
			Method mt = cl.getMethod("getName", null);
			System.out.println("方法名"+mt.getName());
			//invoke位调用该方法
			mt.invoke(ob, new Object[0]);
			
			//调用有带1个参数的方法
			Method mt1 = cl.getMethod("setName", String.class);
			mt1.invoke(ob, "Android疯狂讲义");
			
			//调用多个参数的方法
			
			Class [] cll = {String.class,int.class};
			Method mt2 = cl.getMethod("test", cll);
			Object [] object = {"test",154};
			mt2.invoke(ob, object);
			
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
        以上为反射的基础知识,只是做为个人备忘。大神勿喷。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值