• 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

        

        测试类:

        

      

      

  • 相关阅读:
    插件开发遇到的坑------final 型变量,编译过程被优化
    java.lang.NoClassDefFoundError 错误解决思路
    Android stadio bug
    android去掉button默认的点击阴影
    Andrid 打印调用堆栈
    Gradle 设置本地meaven
    Android log 里面快速搜索错误堆栈 ( 关键字)
    java doc 编写
    android 怎么判断activity 从哪里启动的
    Android Stadio调试gradle 插件 || Android Stadio 远程调试 || Anroid APT调试
  • 原文地址:https://www.cnblogs.com/blogofzxf/p/14726952.html
Copyright © 2020-2023  润新知