(四十九)反射
一、反射的定义
在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功能就称为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()创建一个对象
④通过反序列化的方式创建一个对象