根据给定文件中的标题、描述、标签以及部分内容,我们可以从中提炼出多个重要的Java知识点,并进行详细解释。
### 1. 访问修饰符 public, private, protected, 默认(friendly)
在Java中,类成员(包括变量和方法)的访问级别可以通过访问修饰符来控制。这些修饰符包括 `public`、`private`、`protected` 和默认访问级别(有时也称为“包私有”或“friendly”):
- **public**:最开放的访问级别,无论类是否在同一包内,任何类都可以访问该成员。
- **protected**:允许同一包内的类及不同包内的子类访问该成员。
- **默认(friendly)**:只允许同一包内的类访问该成员。当声明成员时没有指定任何访问修饰符,则该成员具有默认访问级别。
- **private**:最封闭的访问级别,只有声明该成员的类可以访问它。
例如:
```java
package com.example;
public class MyClass {
public int publicField; // 可被任何类访问
protected int protectedField; // 同一包内或子类可访问
int defaultField; // 只能被同一包内的类访问
private int privateField; // 只能被MyClass自身访问
}
```
### 2. ArrayList vs Vector, HashMap vs Hashtable
#### ArrayList vs Vector
- **共同点**:两者都实现了List接口,用于存储动态数组。
- **不同点**:
- **线程安全性**:`Vector`是线程安全的,而`ArrayList`不是。这意味着在多线程环境中,`Vector`的方法会同步,而`ArrayList`的方法不会同步。
- **性能**:由于`Vector`的同步机制,它的性能通常低于`ArrayList`。
#### HashMap vs Hashtable
- **历史背景**:`Hashtable`是基于早期的`Dictionary`类实现的,而`HashMap`是在Java 1.2版本中引入的`Map`接口的一个实现。
- **线程安全性**:`Hashtable`是线程安全的,而`HashMap`不是。`HashMap`提供了更高的性能,但在多线程环境下需要额外的同步措施。
- **null值支持**:`HashMap`允许键和值为null,而`Hashtable`不允许键或值为null。
### 3. char类型与Unicode编码
Java中`char`类型表示一个字符,其大小为16位(2个字节)。这是因为Java采用了Unicode编码系统。Unicode是一种国际化的字符编码标准,能够表示世界上大多数语言的字符集。因此,在Java中,一个`char`可以表示任何Unicode字符。
### 4. 线程的实现方式
Java中线程有两种实现方式:
- **继承Thread类**:创建一个类继承自`Thread`类,并重写其`run()`方法。
- **实现Runnable接口**:创建一个类实现`Runnable`接口并实现其`run()`方法。然后将该对象传递给`Thread`类的构造函数。
### 5. 构造器执行顺序示例
示例代码展示了在创建对象时构造器的执行顺序。父类`FatherClass`和子类`ChildClass`都有各自的构造器。当创建`ChildClass`对象时,首先会调用父类的构造器,然后再调用子类的构造器。
### 6. 内部类的实例化
内部类(nested class)可以在外部类的内部定义。创建内部类的实例有两种主要方式:
- **非静态内部类**:非静态内部类必须通过外部类的实例来访问。示例代码中,`InterClass`是一个非静态内部类,必须先创建`OuterClass`的实例才能访问`InterClass`。
- **静态内部类**:静态内部类可以通过外部类名直接访问,不需要外部类的实例。选项C是正确的,因为它是非静态内部类,可以直接访问外部类的非静态成员。
### 7. float类型赋值
在Java中,`float`类型的赋值需要显式地转换数据类型,即使赋值的数字看起来像是浮点数也不例外。例如,`float f = 3.4;` 这样的语句是不正确的,应该写成 `float f = (float)3.4;` 或者 `float f = 3.4f;`。
### 8. Collection框架概述
Java的集合框架提供了一组灵活的数据结构来存储和操作数据。其中最基础的接口是`Collection`,它有两个主要的子接口:`List`和`Set`。`List`保持元素的插入顺序,而`Set`不允许重复的元素。`Map`接口则用于存储键值对。
以上知识点是Java程序员面试中常见的考点,熟练掌握这些基本概念和技术细节对于提高面试成功率至关重要。