java--反射机制

反射听起来就好像很厉害的样子,我们可以想象一下,利用一个反射镜放在路旁,便可以看到我们背后所拥有的好多实物。对的,在Java编程中也有这样的一种机制---反射机制。

当我们拥有了这面”镜子“之后,可以同构摆放镜子的位置来调整我们想要看到的东西。其中这面镜子指的是我们反射机制中的Class类的对象;而如何摆放镜子的位置便是我们所需用到的方法。

下面我们看一下是如何得到这面镜子:

首先需要清楚我们想要看到什么东西 ,也即被看到的对象,eg:public class Student(){   ...............  },有这么一个学生类,然后里面有好多的方法、属性包括共有的、私有的。

现在我想不通过传递参数的方法调用就可以拥有获取Student 中的那些东西,此时就可以利用之前提到的镜子了。怎么用?

eg:假如说有这么一个家伙Guy想要看到Student,那么请看

public class Guy (){     
 public static void main(String[] args) throws Exception {
Student stu=new Student();//创建想要看到的对象
Class stuMirror=stu.getClass();//这样就拿到了所需要的镜子,也即Class对象
//那到家那镜子之后,
/***********1、可以通过Class对象创建对象************/
	Student stuInstance = (Student) stuMirror.newInstance();
/***********2、可以通过Class获取所有的构造函数 ************/ 
//获取有参数的构造方法Declared
Constructor[] constructors = stuClass.getDeclaredConstructors();
		for (int i = 0; i < constructors.length; i++) {
			System.out.println(constructors[i].getName() + "  "
					+ Modifier.toString(constructors[i].getModifiers()));
		}
		Constructor constructor = stuMirror.getDeclaredConstructor(String.class,int.class);
		Student studen = (Student)constructor.newInstance("张三",34);
		System.out.println(studen);
/*****************3、可以通过Class获取所有普通函数 *************************/
Method[] methods = stuClass.getDeclaredMethods();
		for (Method method : methods) {
			System.out.println(method);
		}
		Method method = stuMirror.getDeclaredMethod("study", java.lang.String.class);
		//调用方法
		method.invoke(studen,"李四");
		//获取私有方法
		Method priMethod = stuClass.getDeclaredMethod("play");
		//去除方法权限修饰符
		priMethod.setAccessible(true);
		priMethod.invoke(studen);
/************** *********4、通过Class对象获取所有属性******************************/
Field[] fields = stuClass.getDeclaredFields();
		for (Field field : fields) {
			System.out.println(field);
		}
//以上四种便是我们拿到镜子之后可以做到的事
前提是Student里面函数一些共有的、私有的属性、共有的、私有的函数以及构造方法。



}


 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值