挑战中,Java面试题复习第5天,坚持就是胜利。

41 阅读3分钟

java反射

  1. 定义

    1. 运行时动态获取类信息和调用方法的特性。
  2. 应用场景

    1. JDBC数据库连接。
    2. 框架如Hibernate和Struts等。
  3. 实现方式

    1. 通过四种方法获取Class对象:

      • Class.forName("类的路径")
      • 类名.class
      • 对象名.getClass()
      • 基本类型的包装类通过Type属性获取Class对象。
  4. 核心类

    1. Class:获取类和接口信息。
    2. Field:获取属性信息和动态访问权限。
    3. Constructor:获取构造方法信息和访问权限。
    4. Method:获取方法信息。
  5. 优缺点

    1. 优点

      • 运行时动态获取实例,提高灵活性。
      • 可与动态编译结合。
    2. 缺点

      • 性能较低,因为需要解析字节码。
      • 破坏封装性,可以访问私有方法和属性。
  6. 性能优化方案

    1. 使用setAccessible(true)关闭安全检查。
    2. 缓存Class对象以加快多次实例化速度。
    3. 使用ReflectASM工具类通过字节码生成加速反射。

List Set Map 区别

  1. List

    1. 存储元素的顺序是有序的。
    2. 可以包含重复的元素。
    3. 允许元素引用相同的对象。
  2. Set

    1. 不允许重复元素。
    2. 元素自动去重,不会有多个元素引用相同的对象。
    3. 无序的,但某些实现如LinkedHashSetTreeSet可以保持元素的插入顺序或自然排序顺序。
  3. Map

    1. 使用键值对存储数据。
    2. 每个键最多只能映射到一个值。
    3. 键不能重复,但值可以重复。
    4. 键通常使用String类型,但也可以使用任何对象。
    5. Map不保证元素的顺序,但某些实现如LinkedHashMap可以保持插入顺序。

Object 常用方法

  1. clone 方法

    1. 保护方法,用于实现对象的浅复制。
    2. 只有实现了Cloneable接口的类才能调用此方法,否则会抛出CloneNotSupportedException
    3. 实现深拷贝需要成员变量也为引用类型并实现Cloneable,同时重写clone方法。
  2. finalize 方法

    1. 与垃圾收集器相关,用于判断对象是否可以被回收。
    2. 当对象即将被垃圾回收器回收时,由垃圾回收器调用此方法。
  3. equals方法

    1. 用于比较对象的等价性。
    2. 默认行为与==相同,即比较对象的内存地址,通常需要在子类中重写。
  4. hashCode 方法

    1. 用于哈希查找,通常在重写equals方法时也需要重写此方法。
    2. JDK 1.6和1.7默认返回随机数,而JDK 1.8使用Marsaglia's xorshift scheme算法生成随机数。
  5. notifyAll方法

    1. synchronized关键字配合使用,唤醒在此对象上等待的所有线程。
  6. toString和getClass方法

    1. toString方法用于返回对象的字符串表示,通常需要在子类中重写。
    2. getClass方法用于获取对象的运行时类信息,通常不需要讨论。