2020-09-18 Java 反射

Java反射

类字节码文件是在硬盘上存储的,是一个个的.class文件。在new一个对象时,JVM会先把字节码文件的信息读出来放到内存中,第二次用时,就不用在加载了,而是直接使用之前缓存的这个字节码信息。

字节码的信息包括:类名、声明的方法、声明的字段等信息。在Java中“一切皆对象”,这些信息也可以被封装成一个或多个对象,例如:对于Class类、Method类、Field类的相关对象。

反射技术:通过字节码的信息获取Class类、Method类、Field类等相关对象,并对相关信息进行相关处理,例如可以获取方法名、属性名或相关属性值,甚至不使用new就可以直接创建实例,可以执行相关的方法,设置或获取字段的值。

Class类

Java中有一个Class类用于代表某一个类的字节码。

获取Class对象的三种方式:

Class.forName(“全类名”);
类名.class;
对象.getClass();

通过Class类获取类型的一些信息:

1.getName(): 类的名称(全名,全限定名)
2 getSimpleName(): 类的的简单名称(不带包名)
3. getModifiers(): 类的的修饰符
4.创建对象
无参数构造创建对象
newInstance()
5. 获取指定参数的构造器对象,并可以使用Constructor对象创建一个实例
Constructor getConstructor(Class<?>… parameterTypes)

通过Class类获取类型中的方法的信息:

1.获取公共方法包括继承的父类的方法
getMethods()返回一个数组,元素类型是Method
2.获取指定参数的公共方法
getMethod(“setName”, String.class);
3.获得所有的方法,包括私有
Method[] getDeclaredMethods()
4.获得指定参数的方法,包括私有
Method getDeclaredMethod(String name, Class<?>… parameterTypes)

通过Class类获取类型中的字段的信息:

1.获取公共字段(不包括私有)
Field[] getFields()
2.获取指定参数的公共字段
Field getField(String name)
3.获取所有的字段,包括私用
Field[] getDeclaredFields()
4.获取指定参数的字段,包括私有
Field getDeclaredField(String name)

猜你喜欢

转载自blog.csdn.net/weixin_44158992/article/details/108697199