JAVA基础与集合框架面试重点

需积分: 9 0 下载量 121 浏览量 更新于2024-08-05 收藏 189KB MD 举报
"面试题.md,包含JAVA基础概念和集合框架相关问题的总结" ### JAVA基础 #### 1. final、finally、finalize的区别 - **final**:`final` 是一个修饰符,用于声明不可变的类、方法或变量。如果一个类被 `final` 修饰,那么该类不能被继承;如果一个方法被 `final` 修饰,它不能被子类重写;如果一个变量被 `final` 修饰,那么它的值一旦初始化后便不能改变。 - **finally**:通常与 `try-catch` 结构一起使用,无论是否发生异常,`finally` 块中的代码总会被执行,常用于确保资源的正确关闭等重要操作。 - **finalize**:这是 `Object` 类的一个方法,当垃圾回收器准备回收一个对象的内存时,如果该对象重写了 `finalize()` 方法,垃圾回收器会先调用这个方法,但不能依赖此方法执行特定的清理工作,因为调用时机不确定。 #### 2. 访问修饰符 - **private**:仅在当前类内部可见。 - **default**(无修饰符):在同一包内的类可见。 - **protected**:对同一包内的类和所有子类可见。 - **public**:对所有类都可见。 #### 3. JVM、JRE、JDK的关系 - **JVM (Java Virtual Machine)**:Java 虚拟机,负责执行字节码,是Java程序运行的基础。 - **JRE (Java Runtime Environment)**:Java 运行环境,包括JVM和Java核心库,用于运行已编译的Java程序。 - **JDK (Java Development Kit)**:Java 开发工具包,包含了JRE以及开发和调试Java程序所需的工具和库,如编译器`javac`和调试器`jdb`。 #### 4. Java和C++的区别 - 都是面向对象的语言,支持封装、继承和多态。 - Java 不提供直接的指针访问内存,而是通过对象引用来间接访问,更安全。 - Java 采用单继承(一个类只能继承一个父类),但支持接口的多实现;而C++ 支持多继承。 - Java 内存管理是自动的,通过垃圾回收机制进行内存回收;C++ 则需要程序员手动管理内存。 #### 5. 如何禁掉Java反射 Java中可以通过设置 `SecurityManager` 来限制反射的使用。例如: ```java SecurityManager sm = new SecurityManager(); sm.checkMemberAccess(Test.class, Member.PUBLIC); ``` `checkMemberAccess` 方法可以检查对类成员的访问权限。参数 `Test.class` 表示类,`Member.PUBLIC` 代表允许访问公共成员。如果将 `Member.DECLARED` 传入,那么尝试通过反射访问私有或受保护的成员时,程序将在运行时抛出异常。 ### 集合 #### 1. ArrayList、LinkedList、Vector的区别 - **ArrayList**:基于动态数组实现,提供了高效的随机访问,但在插入和删除元素时效率较低,因为可能需要移动大量元素。 - **LinkedList**:基于双向链表实现,插入和删除元素操作速度快,但随机访问效率低,因为它需要从头开始遍历。 - **Vector**:与 ArrayList 类似,也是基于数组实现,但它是线程安全的,即在多线程环境中可以安全地使用,但同步带来的开销使得其性能低于 ArrayList。