zoukankan      html  css  js  c++  java
  • J2SE-反射

    目录

    • 1 什么是反射?主要提供了哪些功能?
    • 2 如何通过反射获取类的信息?
    • 3 数组的特殊处理。
    • 4 反射的应用场景。
    • 5 其他。

    正文

    1 什么是反射?主要提供了哪些功能?
      1) Java的反射机制是指在程序运行期间,对于任意一个类,都可以知道这个类的属性和方法,并进行调用。
      2) 提供以下功能:
        ① 在运行时可以判断任意一个对象所属的类。
        ② 在运行时可以构造任意一个类的对象。
        ③ 在运行时可以获取任意一个类的所有成员变量和方法。
        ④ 在运行时调用任意一个对象的方法。
        ⑤ 生成动态代理。
      3) 优缺点
        ① 优点:增加灵活性。
        ② 缺点:使用不当会导致效率低、会破坏封装,且可以访问类的私有方法,不安全。

    2 如何通过反射获取类的信息?
      1) 首先获取类的Class对象:
        ① 每一个类、接口、数组、基本类型都有唯一的一个对应的Class类对象。通过Class类对象可以获取类的全部信息(包括成员变量、方法、父类、接口等)。
        ② 获得Class对象的三种方式。【参考TestLoadClass.java】
        ③ Class的常用方法:【参考TestClass.java】 

     TestLoadClass.java
     TestClass.java

      2) 对类的构造函数、方法、属性的访问和调用:
        ① Constructor类:用于构造函数。【参考TestConstrcutor.java】
        ② Method类:用于类的方法。【参考TestMethod.java】
        ③ Field类:用于类的属性。【参考TestField.java】
        ④ Modifer类:用于判断修饰符类型。【参考TestModifier.java】
        ⑤ Field、Method、Constructor类都继承了AccessibleObject类(该类用于获取和修该访问权限)【参考TestAccessible.java】,同时也实现了Member接口。

     TestConstrcutor.java
     TestMethod.java
     TestField.java
     TestModifier.java
     TestAccessible.java

     3 数组的特殊处理。

      1) 数组是没有方法和属性的对象,所以不能通过反射常用的的方法来获取或设置成员。
      2) 可以通过反射创建数组,使用两种new Instance的方法来创建。使用Array.set和Array.get来设置或获取数组元素的值。【参考TestArray.java】  

     TestArray.java

    4 反射的应用场景。

      1) 用于基础框架中,如Spring。
      2) JDBC,数据库可能使用Oracle,也可能使用Mysql,不同的数据库有不同的驱动,在运行时,再通过Class.forName()运用反射动态加载。
      3) 应用开发中,尽量避免使用反射。

    5 其他。

      1) class.getName方法返回结果
        ① 数组类型以[为前缀,后面跟着成员的类型编码,基础类型则简写如下。
        (B:byte、C:char、D:double、F:float、I:int、J:long、S:short、Z:boolean)
        ② 嵌套类型使用$符号将类型名隔开:Outer$Inner
      2) 注意这种写法是错误的:Class<Parent> c = Child.class; 因为Child.class不是Parent的子类,正确写法是:Class<? extends Parent> c= Child.class。
      3) 向上转型和向下转型:
        ① 向上转型:子类转为父类,自动转换。
        ② 向下转型:父类转为子类,需要强制转换。

  • 相关阅读:
    mysql---面试题2
    Mysql--存储过程
    MySql--锁机制
    MYsql事务
    IDEA创建新项目保存pom文件时,出现错误Cannot resolve org.openjfx:javafx.base:11.0.0-SNAPSHOP
    线程中的多线程、并行和并发、同步和异步、阻塞和非阻塞、线程安全
    Java里的Arrays.asList()返回的List不能使用add、remove方法?
    服务器可用的Socket
    MessageBox.Show
    NPOI 教程
  • 原文地址:https://www.cnblogs.com/dudadi/p/7989469.html
Copyright © 2011-2022 走看看