根据给定文件的信息,我们可以提炼出以下几个重要的JAVA面试知识点:
### 1. 访问修饰符:`public`, `private`, `protected`, 和 默认访问权限(`friendly`)
#### 重要概念:
- **`public`**:对于任何类都是可见的。
- **`protected`**:对同一包内的类或子类是可见的。
- **`private`**:仅对当前类内部是可见的。
- **默认访问权限**(通常称为`friendly`):仅在同一包内的类是可见的。
### 2. 集合类对比:`ArrayList` vs `Vector`;`HashMap` vs `Hashtable`
#### `ArrayList` 与 `Vector` 的比较:
- **线程安全性**:`Vector` 是线程安全的,而 `ArrayList` 不是。
- **性能**:由于 `Vector` 提供了线程安全性,因此在多线程环境中它的性能可能会低于 `ArrayList`。
- **初始化容量**:`Vector` 的默认初始容量为 10,而 `ArrayList` 的默认初始容量为 0。
#### `HashMap` 与 `Hashtable` 的比较:
- **历史背景**:`Hashtable` 最早出现在 Java 1.0 中,而 `HashMap` 是在 Java 1.2 中引入的。
- **线程安全性**:`Hashtable` 是线程安全的,而 `HashMap` 不是。
- **允许 null 值**:`HashMap` 允许键和值为 `null`,而 `Hashtable` 不允许。
### 3. 字符与 Unicode
- **字符表示**:在 Java 中,一个 `char` 类型占用 16 位(2 字节),这足以表示 Unicode 编码中的基本多语言平面(BMP)中的所有字符。
- **字符编码**:Java 使用 Unicode 编码来存储字符,这意味着它可以处理全球几乎所有语言的文字。
### 4. 同步机制与线程安全
- **同步关键字**:`synchronized` 关键字用于确保在多线程环境下对共享资源的独占访问。
- **等待与通知**:`wait()` 和 `notify()` 方法用于实现线程间的通信,通常与 `synchronized` 一起使用。
### 5. 构造函数调用顺序
考虑以下代码示例:
```java
package test;
public class FatherClass {
public FatherClass() {
System.out.println("FatherClassCreate");
}
}
public class ChildClass extends FatherClass {
public ChildClass() {
System.out.println("ChildClassCreate");
}
public static void main(String[] args) {
FatherClass fc = new FatherClass();
ChildClass cc = new ChildClass();
}
}
```
运行结果:
```
FatherClassCreate
FatherClassCreate
ChildClassCreate
```
解释:子类构造函数会隐式调用父类的无参构造函数。当创建 `ChildClass` 实例时,首先调用了父类 `FatherClass` 的构造函数。
### 6. 内部类的使用
#### 示例代码:
```java
public class OuterClass {
private class InterClass {
public InterClass() {
System.out.println("InterClassCreate");
}
}
public OuterClass() {
InterClass ic = new InterClass();
System.out.println("OuterClassCreate");
}
public static void main(String[] args) {
OuterClass oc = new OuterClass();
}
}
```
输出结果:
```
InterClassCreate
OuterClassCreate
```
解释:内部类可以直接访问外部类的所有成员,包括私有成员。在这个例子中,内部类 `InterClass` 在外部类 `OuterClass` 的构造函数中被实例化。
#### 内部类的有效声明:
- 选项 C 是正确的,因为非静态内部类可以访问外部类的所有成员。
- 选项 E 也是正确的,因为抽象类可以用作内部类的声明。
### 7. 浮点数赋值
- 正确做法:使用类型转换 `float f = (float) 3.4;`。
### 8. Java 集合框架概述
Java 集合框架提供了多种数据结构,包括:
- **`Collection` 接口**:集合层次结构的根接口。
- **`List` 接口**:有序且可重复的集合。
- **`LinkedList`**:基于双向链表实现的 `List`。
- **`ArrayList`**:基于数组实现的 `List`。
- **`Vector`**:与 `ArrayList` 类似,但提供线程安全性。
- **`Stack`**:基于 `Vector` 实现的后进先出(LIFO)集合。
- **`Set` 接口**:不包含重复元素的集合。
- **`Map` 接口**:键值对的集合。
- **`Hashtable`**:线程安全的 `Map`。
- **`HashMap`**:非线程安全但性能更高的 `Map`。
以上是对给定文件中提到的关键知识点的详细解读和补充。