【Java笔试题】知识点详解
1. **访问修饰符的区别**
Java中的访问修饰符有`public`, `private`, `protected`以及缺省(默认)。它们决定了类成员(包括字段和方法)的可见性。
- `public`: 所有类都可以访问,无论在哪个包。
- `private`: 只能在同一类中访问,不可被其他类访问。
- `protected`: 在同一类、同一包以及不同包的子类中可访问。
- 缺省(默认): 只能在同一包内访问,不能跨包访问。
2. **集合框架的区别**
- `ArrayList`和`Vector`都是`List`接口的实现,主要区别在于:
- **同步性**:`Vector`是线程安全的,所有操作都进行了同步处理;而`ArrayList`是非线程安全的,效率相对较高。
- **容量增长策略**:当需要增加容量时,`ArrayList`的容量增长为其原来的50%,而`Vector`增长为其原来的100%。
- `HashMap`和`Hashtable`都是`Map`接口的实现,主要差异在于:
- **历史背景**:`Hashtable`是早期Java版本的遗留,基于`Dictionary`类;`HashMap`是Java 1.2引入的新实现,实现了`Map`接口。
- **同步性**:`Hashtable`是线程安全的,而`HashMap`不是,因此在多线程环境下,需要手动同步。
- **值**:`HashMap`允许null键和值,而`Hashtable`不允许。
3. **字符型变量与中文存储**
Java中,`char`类型使用Unicode编码,每个`char`占用16位(2个字节),因此可以存储包括中文在内的各种Unicode字符。
4. **多线程实现**
多线程在Java中有两种基本实现方式:
- **继承Thread类**:创建一个新的类,该类继承自`Thread`,重写`run()`方法,然后创建该类实例并调用`start()`启动线程。
- **实现Runnable接口**:创建一个新的类,实现`Runnable`接口,重写`run()`方法,然后将该类实例传递给`Thread`类的构造器,并启动线程。
**同步控制**:
- **synchronized关键字**:用于方法或代码块,提供互斥访问,确保同一时间只有一个线程执行特定代码。
- **wait(), notify()和notifyAll()**:这些方法用于线程间的通信,必须在同步代码块或同步方法中使用。
5. **构造器的执行顺序**
当创建子类对象时,先执行父类的构造器,再执行子类的构造器。在给定的例子中,首先输出“FatherClass Create”,然后创建子类对象,再次输出“FatherClass Create”和“ChildClass Create”。
6. **内部类**
内部类是定义在另一个类中的类,分为:
- **成员内部类**:可以访问外部类的所有成员,包括私有成员。
- **局部内部类**:定义在方法或代码块内,只能在该方法或代码块中使用。
- **匿名内部类**:没有名字,通常用于快速实现接口或抽象类的一个简单实例。
- **静态内部类**:静态内部类不持有对外部类的引用,可以独立于外部类实例存在。
以上是Java基础笔试题中常见的知识点,涵盖了访问控制、集合框架、字符编码、多线程、构造器执行顺序以及内部类等内容。对于准备Java笔试的人员,理解和掌握这些知识点是至关重要的。同时,不断学习和实践,结合具体题目进行分析,有助于提升Java编程技能。