Java学习总结------反射

Java的反射机制

反射是Java语言的特征之一。在运行状态下,对于任意一个类都可以获取其中的属性和方法,对于任意一个对象,都能够调用它的任意一个方法,访问它的任意属性;这种动态的获取类的信息,及调用对象方法的功能称为Java的反射机制。

Class类

Class类是反射中最重要的一个类,该类没有公开的构造方法。每一个类在类加载时,JVM都会为该类自动生成一个Class对象,每一个类都仅有一个Class对象。
不仅类具有Class对象,任何类型都有Class对象如接口,基本类型,枚举等等。
该对象存放着对应类型对象的运行时信息。

取得一个类的Class对象

取得一个类的Class对象主要有三种方式:

  • 通过对象取得调用Object类的getClass()方法。
  • 通过“类.class”获得
  • 通过Class类提供的静态方法Class.forName(类的全名称)取得。

取得一个类的Class对象,就可以对这个类进行任何操作。

反射类的继承结构

在这里插入图片描述

反射的基本使用(大量API)

1.取得父类信息
  • 取得父类的Class对象

public native Class<? super T> getSuperclass();

  • 取得实现的父接口

:public Class<?>[] getInterfaces()

因为可能实现多个接口,因此返回类型是一个数组。

2.反射调用构造
  • 取得本类中的构造方法(仅限public修饰)

public Constructor<?>[] getConstructors() throws SecurityException

  • 取得本类中所有的构造方法(包括private修饰的)

public Constructor<?>[] getDeclaredConstructors() throws SecurityException

  • 取得指定参数的构造方法(非private修饰的)

public Constructor getConstructor(Class<?>… parameterTypes)
throws NoSuchMethodException, SecurityException

  • 实例化对象(本质调用类中的无参构造)

public T newInstance(Object … initargs)
throws InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException

  • 实例化对象(Constructor类中的newInstance方法)

public T newInstance(Object … initargs)
throws InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException

3 反射调用普通方法
  • 取得本类及父类的普通方法 (仅限public修饰的)

public Method[] getMethods() throws SecurityException

  • 取得本类所有的普通方法(包括private修饰的)

public Method[] getDeclaredMethods() throws SecurityException

  • 取得指定方法名称和参数的普通方法

public Method getMethod(String name, Class<?>… parameterTypes)

  • 通过反射调用指定方法(参数 该类对象,方法参数)

public Object invoke(Object obj, Object… args)throws IllegalAccessException,
IllegalArgumentException,InvocationTargetException

4.反射访问类中属性

  • 取得本类及父类的属性(仅限public修饰)

public Field[] getFields() throws SecurityException

  • 取得本类中全部属性(包括private修饰的)

public Field[] getDeclaredFields() throws SecurityException

  • 取得本类指定名称的属性(参数为属性名称)

public Field getDeclaredField(String name)
throws NoSuchFieldException, SecurityException

  • 设置属性内容(不能修改final修饰的属性)

public void set(Object obj, Object value) throws IllegalArgumentException,
IllegalAccessException

  • 取得属性内容

public Object get(Object obj) throws IllegalArgumentException,
IllegalAccessException

猜你喜欢

转载自blog.csdn.net/weixin_43213517/article/details/88916614