java知识学习49-反射

反射(框架设计的灵魂)的概述:是指在运行时去获取一个类的变量和方法信息。然后通过这些信息来创建对象,调用方法的一种机制。由于这种动态性,可以极大增强程序的灵活性,程序可以不用在编译期就完成确定,所以可以在运行期进行扩展。

     我们通过Class类的对象使用对应类的方法或变量,就是反射操作

  通过下图加深对反射的理解:

    

  

获取Class类对象:若想要通过反射去使用一个类,首先就得获取到该类的字节码文件对象,也就是类型为Class类型的对象。

  主要有三种方式获取Class类型对象:

    

    范例:

      

  

 反射获取构造方法和使用的方式:

  获取构造方法主要有四种方式:其中两种是获取public的修饰的构造方法,另外两种是可以获取所有的构造方法(如private、default默认的等)

    

  范例:Student类中的变量、方法、构造方法都分别有public、private、default关键字修饰的。

    

  注:

    1、基本数据类型也是可以通过.class得到对应的Class类型,如int.class。

    2、私有构造方法直接new newInstance 运行时会报错,可以通过Constructor的setAccessible(传入参数为true,可以取消对是否私有的访问检查)方法进行暴力反射

反射获取成员变量和使用的方式:

  获取成员变量主要有四种方式:其中两种是获取public的修饰的成员变量,另外两种是可以获取所有的成员变量(如private、default默认的等)

    

  范例:

    

反射获取成员方法并使用:

  获取成员方法主要有四种方式:其中两种是获取public的修饰的成员方法,另外两种是可以获取所有的成员方法(如private、default默认的等)

    

  范例:

    

反射的应用:

  1、如可以往ArrayList<Integer>集合中添加String类型的数据。

  

  2、通过配置文件来运行指定的内容(巧用反射的灵活性)

  案例:通过获取配置文件class.txt中的类路径名和方法,然后调用其中的方法(想调用哪个类或方法,就配置哪个,很好的增强了代码灵活性)

    学生类:

    

    老师类:

    

    配置文件:class.txt

    

    测试类:

    

  

  

原文地址:https://www.cnblogs.com/blogofzxf/p/14726952.html