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

        

        测试类:

        

      

      

  • 相关阅读:
    人生如此
    微软十七道智力面试题及答案
    【Flink系列十】Flink作业提交过程的调试和诊断
    【Flink系列九】Flink 作业提交遇到的问题记录以及原理
    Jackson ObjectMapper JSON序列化工具使用笔记,由浅入深
    既有设计模式的lambda重构
    观察者模式/Observer
    函数式接口java.util.function
    面向对象世界的七个设计原则
    重构-改善既有代码设计读后灵光
  • 原文地址:https://www.cnblogs.com/blogofzxf/p/14726952.html
Copyright © 2011-2022 走看看