全国咨询/投诉热线:400-618-9090

首页技术文章正文

反射的基本使用

更新时间:2018-10-31 来源:黑马程序员 浏览量:

  一:反射的概念反射是一种机制,利用该机制可以在程序运行过程中对类进行解剖并操作类中的方法,属性,构造方法等成员。

  反射的前提:必须先要获取到该类的字节码文件对象,即Class类型对象。

  反射的实现:

  1540964692617_1.jpg

  二:获取Class对象三种方式:

  1)通过类名.class获取

  举例:

  [Java] 纯文本查看 复制代码

  1540964715081_2.jpg

  2)通过Object类的成员方法getClass()方法获取,对象名.getClass()

  3)通过Class.forName("类的全路径名")获取,即Class.forName("cn.itcast.test2.Student");

  举例:

  [Java] 纯文本查看 复制代码

  1540964734834_3.jpg

  三:[size=1.5em]Class对象相关方法

  String getSimpleName(); 获得简单类名,只是类名,没有包

  String getName(); 获取完整类名,包含包名+类名

  T newInstance() ;创建此 Class 对象所表示的类的一个新实例。

  要求:类必须有public的无参数构造方法(已过时,一般用class.getConstructor().newInstance()方法)

  举例:

  [Java] 纯文本查看 复制代码

  1540964747050_4.jpg

  四:Class类中与Constructor相关方法:

  1. Constructor getConstructor(Class... parameterTypes)

  根据参数类型获取构造方法对象,只能获得public修饰的构造方法。

  如果不存在对应的构造方法,则会抛出 java.lang.NoSuchMethodException 异常。

  2. Constructor getDeclaredConstructor(Class... parameterTypes)

  根据参数类型获取构造方法对象,包括private修饰的构造方法。

  如果不存在对应的构造方法,则会抛出 java.lang.NoSuchMethodException 异常。

  3. Constructor[] getConstructors() 获取所有的public修饰的构造方法

  4. Constructor[] getDeclaredConstructors() 获取所有构造方法,包括privat修饰的

  Constructor类中的常用方法:

  1. T newInstance(Object... initargs)

  根据指定参数创建对象。

  2. void setAccessible(true)

  暴力反射,设置为可以直接访问私有类型的构造方法。

  五:Class类中与Method相关的方法:

  1. Method getMethod("方法名", 方法的参数类型... 类型)

  根据方法名和参数类型获得一个方法对象,只能是获取public修饰的

  2. Method getDeclaredMethod("方法名", 方法的参数类型... 类型)

  根据方法名和参数类型获得一个方法对象,包括private修饰的

  3. Method[] getMethods() (了解)

  获取所有的public修饰的成员方法,包括父类中。

  4. Method[] getDeclaredMethods() (了解)

  获取当前类中所有的方法,包含私有的,不包括父类中。

  Method类中常用方法

  1. Object invoke(Object obj, Object... args)

  根据参数args调用对象obj的该成员方法

  如果obj=null,则表示该方法是静态方法

  2. void setAccessible(boolean flag)

  暴力反射,设置为可以直接调用私有修饰的成员方法

  六:Class类中与Field相关方法

  1. Field getDeclaredField(String name)

  根据属性名获得属性对象,包括private修饰的

  2. Field getField(String name)

  根据属性名获得属性对象,只能获取public修饰的

  3. Field[] getFields()

  获取所有的public修饰的属性对象,返回数组。

  4. Field[] getDeclaredFields()

  获取所有的属性对象,包括private修饰的,返回数组。

  Field类中常用方法

  1. void set(Object obj, Object value)

  Object get(Object obj)

  2. void setAccessible(true);暴力反射,设置为可以直接访问私有类型的属性。

  Class getType(); 获取属性的类型,返回Class对象。



作者:黑马程序员JavaEE培训学院
首发:http://java.itheima.com/

javaee

http://www.itcast.cn/files/image/202012/20201209100457953.pngpython

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

http://www.itcast.cn/subject/uizly/index.shtml?seozxuids

pythonAI

在线咨询 我要报名