zoukankan      html  css  js  c++  java
  • Java 反射机制详解

    引言

      本文主要介绍Java中,有关反射机制、类的加载过程、以及控制反转方面的内容。

    Java 反射机制

    • Java创建对象的方式有哪些:new、反射、反序列化、克隆
    • class对象获取的方法有哪些:类名.class、getClassforName、classLoader.loadClass(‘包类名全路径’)---> 区别在于有没有初始化步骤(statis)

    类的加载顺序

      Class装载过程:加载、链接(验证、准备、解析)、初始化

      Class初始化的详细步骤:

      1. 如果这个类还没有被加载和链接,那就先进行加载和链接
      2. 如果这个类存在父类,并且父类还没有初始化,那就先初始化直接父类
      3. 如果类型存在初始化语句,一次执行初始化语句

      Class初始化6大时机

      1. 创建类的实例(new、class.newInstance、constructor.newInstance)
      2. 访问类中的某个静态变量,或者对静态变量进行赋值
      3. 调用类的静态方法
      4. Class.forName
      5. 完成子类的初始化
      6. 程序的引导入口

      JDBC编程为什么用Class.forName类进行加载驱动?--> 通过classforName 进行初始化statis、注册Driver

    Java反射

      优点:增加代码的灵活度、可读性更强;

      缺点:(在量大的情况下)相比较于直接调用性能会下降、封装性不好(会暴露内部安全)

      反射慢的原因:寻找class字节码的过程、判断安全机制

      Java反射中,如果需要对私有的属性进行访问,需要设置强制访问(setAccessible)。

      class.newInstance()的本质是什么?--> 该方案会首先找指定class中默认的无参数的构造函数(如果该class已经设定了一个新的有参数的抛出异常)

     Java控制反转(Spring IOC和DI)

      IOC(控制反转),把创建对象的控制权交给程序(容器):构造器、静态工厂、实例方法

      DI(依赖注入),对象创建过程中,容器动态构建所需的对象:构造器、setter函数

  • 相关阅读:
    使用SetTimer函数为Delphi的Win控件设置时钟
    关于QT版本的安装配置的一些困惑
    Linux设备驱动开发详解-Note(11)--- Linux 文件系统与设备文件系统(3)
    邪恶的C++
    TControl的主要功能研究(属性,函数,事件)
    Delphi研究,对全局变量函数与OOP编程关系的一点体会 good
    QT 相关资源(书籍、论坛、博客等。。。)整理
    VC UI界面库大集合
    .net程序员求职简历
    C++著名程序库的比较
  • 原文地址:https://www.cnblogs.com/huanghzm/p/11821747.html
Copyright © 2011-2022 走看看