zoukankan      html  css  js  c++  java
  • 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

        

        测试类:

        

      

      

  • 相关阅读:
    Vue 事件修饰符 阻止默认事件
    vue created 生命周期
    续集---网络管理常用命令
    网络管理常用命令(6/14) -netstat命令详解
    系统OOM复位定位
    nohup- Shell后台运行
    一个linux命令(6/13):traceroute命令
    一个linux命令(6/12):cat 命令
    linux命令(6/11)--修改文件的用户组chgrp和文件所有者chown
    Linux终端快捷键
  • 原文地址:https://www.cnblogs.com/blogofzxf/p/14726952.html
Copyright © 2011-2022 走看看