(四十九)反射

一、反射的定义

运行状态中,对于任意一个,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功能就称为java语言的反射机制。通俗点讲,通过反射,该类对我们来说是完全透明的,想要获取任何东西都可以。

一、java反射的作用(功能)

①得到一个对象所属的类

②获得一个类所具有的成员变量和方法

③在运行时调用一个对象的方法

④在运行时构造一个类的对象

	//根据具体类,获得所属类
		List li=new ArrayList();
		Class clazz=li.getClass();
		System.out.println(clazz);
		
		//根据给定类的全路径,获取类
		String className="java.util.ArrayList";
		System.out.println(Class.forName(className));
		
		//创建一个类的对象
		ArrayList array=(ArrayList) clazz.newInstance();
		
		//判断一个类所具有的成员变量和方法
	    System.out.println(Class.forName("java.lang.Integer").getField("MAX_VALUE"));
	    //public static final int java.lang.Integer.MAX_VALUE
		
		//判断一个类所具有所有的方法
		Method[] method=clazz.getMethods();
		for(Method m:method)
		{
			System.out.println(m);
			//public void java.util.ArrayList.add(int,java.lang.Object)
		}
		
		//调用一个对象的方法
		Method meth=clazz.getMethod("add",Object.class);
		meth.invoke(array, "hhh");//调用方法
		System.out.println(array.size());

二、反射的优缺点

优点:可以动态创建对象和编译,体现了很大的灵活性,在框架中用的较多。

缺点:

①性能有影响,反射是一种解释操作,执行效率低于直接代码

②使用反射模糊了程序的内部逻辑,绕过了源代码的技术,带来维护的问题

 

三、可看:https://blog.csdn.net/jiangshangchunjiezi/article/details/76376879

四、如何获取class类

①Class.forName("类的路径")

②实例.getClass()

③类名.class

四、java中创建对象的方式

①new 语句实例化一个对象

②通过反射机制创建一个对象

③通过clone()创建一个对象

④通过反序列化的方式创建一个对象

 

posted @ 2019-03-19 09:44  测试开发分享站  阅读(102)  评论(0编辑  收藏  举报