Java反射

时间:2019-08-24
本文章向大家介绍Java反射,主要包括Java反射使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、Class类

1. 我们创建的类也是对象,即类本身是java.lang.Class类的实例对象

2. java.lang.Class类的构造方法是私有的,所以类不需要new出来

3. java.lang.Class类的实例对象有三种表示方式:

Class<?> c=A.class;  // 任何一个类都有一个隐藏的静态成员变量class

Class<?> c=a.getClass();  // 已知该类的对象,获取类

Class<?> c=Class.forName("类的全名")

4. 可以通过得到的Class创建该类的对象

A a=(A)c.newInstance();

二、类加载

1. 用new去创建对象的类,是静态加载类,编译时就需要加载所有可能使用到的类

2. 用Class<?> c=Class.forName("类的全名")得到的类,是动态加载类,运行时才会加载

3. 功能性的类尽量使用动态加载

三、获取类型信息和Class类的基本API

1. 获取类型:Class c=String.class;

2. c.getName();

3. Method[] m=c.getMethods();  m.invoke();

4. Field[] f=c.getDelaredFields();

四、集合泛型的本质

1. 集合中的泛型,是用于防止错误类型的元素输入的,只在编译阶段有效

2. 在编译之后运行期间,JVM会将集合中的对象都看作基类,而对象的实际类型信息就丢失了,即泛型擦除

3. 所以用反射可以在泛型集合中加入类型不对的元素,例如List<String>中,加入add(1),就可以在一个list里存储多种不同的类型

原文地址:https://www.cnblogs.com/june0816/p/6774529.html