type
status
date
slug
summary
tags
category
icon
password
前言:
“快乐的秘诀就是停止胡思乱想”——Poze
📝 双体Java高级部分内容考前复习
前言
记忆的方法
- 被动输入 --记忆的起点 10%的效果 但必不可少
- 主动输出 --记忆的深化和构建 80%的效果 只比教学他人低10%
- 教学他人 --记忆的化为己有
- 总结:*多动嘴巴,就会调动各种感官。越大声效果越好
押题/运用
面向对象
1. final+
- 判断
- String类是使用final修饰的,不能被继承。
- Object类中getClass使用final修饰的,无法被覆盖。
- 选择
public static final double PI = 3.14159265358979323846; public static void main(String[] args) { PI = 3.14; System.out.println(PI); }
- 执行上面代码,结果是(?)
- 答案
特性/功能 | 抽象类(Abstract Class) | 接口(Interface) |
关键字 | abstract | interface |
方法 | 可以有抽象方法和具体方法 | 只能有抽象方法(Java 8之前),可以有默认方法和静态方法(Java 8及以后) |
变量 | 可以有各种类型的变量 | 只能有常量( public static final ) |
构造函数 | 可以有构造函数 | 没有构造函数 |
实例化 | 不能被实例化 | 不能被实例化 |
继承 | 只能继承一个抽象类 | 可以实现多个接口 |
访问修饰符 | 可以有各种访问修饰符 | 默认是 public |
ㅤ | ㅤ | ㅤ |
ㅤ | ㅤ | ㅤ |
2. 抽象类
- 选择
- 下面哪个说法是正确的? A. 抽象类可以被实例化。 B. 抽象类必须包含抽象方法。 C. 抽象类可以有构造函数。 D. 抽象类不能有构造函数。
- 如果一个类继承了抽象类但没有重写其抽象方法,那么这个类应该是: A. 具体类 B. 抽象类 C. 接口 D. 枚举类
- 答案
3. 接口
- 选择
- 下面哪个说法是正确的? A. 接口可以有构造函数。 B. 接口中的变量默认是public、static和final的。 C. 接口可以包含具体方法。 D. 接口只能实现一个。
- 在Java中,一个类可以实现多少个接口? A. 一个 B. 两个 C. 多个 D. 不能实现接口
- 答案
4. 枚举和内部类
- 选择
- 下面哪个说法是正确的? A. 枚举值可以定义在类中的任何位置。 B. 枚举类型的构造函数可以设置为public。 C. 内部类不能访问外部类的私有成员。 D. 枚举类型的实例变量可以在构造函数中初始化。
- 填空
- 枚举类型的构造函数默认是__的。
- 内部类可以分为四种类型:成员内部类、__、和****。
- 答案
综合题
- 选择
- (多选)下面哪个不能被实例化? A. 具体类 B. 抽象类 C. 接口 D. 枚举类
- 答案
IO流
1.字节输入输出流
- 选择题
- 下面哪个方法属于字节输入流的操作? A. read() B. write(int) C. read(char[]) D. write(byte[])
- 答案
- 判断题
InputStream
和OutputStream
是抽象类,不能被实例化。InputStream
的read()
方法可以读取多个字节。- 答案
2. 字符输入输出流
- 选择题
- 下面哪个方法属于字符输入流的操作? A. write(int) B. read(char[]) C. write(char[]) D. read(byte[])
- 答案
- 判断题
Writer
的write(String)
方法可以向输出流写入一个字符串。- 答案
3. 文件流
- 选择题
- 以下哪个方法用于创建文件夹? A. createNewFile() B. delete() C. mkdir() D. listFiles()
- 答案
4. 异常处理
- 选择题
- 下面哪个异常通常由 IO 类库的方法抛出? A. NullPointerException B. IOException C. ArithmeticException D. IndexOutOfBoundsException
- 答案
- 判断题
IOException
是所有 IO 操作相关异常的父类。- 所有的
IOException
都必须被捕获或声明抛出。 - 答案
综合题
- 选择题
- 下面哪个流可以用于处理字符? A. InputStream B. OutputStream C. Reader D. File
- 答案
总结
InputStream/OutputStream
用于处理字节
Reader/Writer
用来处理字符
InputStream/OutputStream
可转换为Reader/Writer
,转换流可以指定读文件或者写文件所需的编码
- 以上所提类均为抽象类,不能实例化,需要
new
其子类如FileXXXX
类、BufferedXXXX
类
- 向下转型是将父类对象转换为其子类类型,有可能会导致不安全
- 字节输入输出流的末位是
1
,字符输入输出流的末位是null
集合框架
1. 泛型
- 选择题
- 关于 Java 泛型,以下说法正确的是: A. 泛型可以用于基本类型,如 int、char。 B. 泛型信息在运行时仍然保留。 C. 泛型的主要目的是在编译时进行类型检查。 D. 泛型不可以使用增强for循环。
- 判断题
- 泛型在编译后会进行类型擦除。
- 泛型可以用于方法的返回类型。
- 答案
2. Collection接口
- 选择题
- 关于
Collection
接口,以下说法正确的是: A.Collection
是一个具体类。 B.Collection
可以直接实例化。 C.Collection
是一个接口,表示一组对象。 D.Collection
没有提供基本的集合操作方法。 - 答案
- 判断题
Collection
接口提供的方法包括add
、remove
、contains
等。- 答案
3. List接口
- 选择题
- 关于
List
接口,以下说法正确的是: A.List
中的元素是无序的。 B.List
中的元素可以重复。 C.List
中的元素不可以重复。 D.List
接口不能实现ArrayList
和LinkedList
。 - 答案
- 判断题
ArrayList
使用数组实现,不适合随机访问。LinkedList
使用链表实现,适合频繁插入和删除操作。- 答案
- 代码题
- 使用
ArrayList
实现一个列表,并向列表中添加元素 "A"、"B"、"C",然后使用增强 for 循环遍历并打印所有元素。
4. Set接口
- 选择题
- 关于
Set
接口,以下说法正确的是: A.Set
中的元素是有序的。 B.Set
中的元素可以重复。 C.Set
中的元素不可以重复。 D.Set
接口不能实现HashSet
和TreeSet
。 - 答案
- 判断题
HashSet
基于HashMap
实现,元素无序且不重复。TreeSet
基于TreeMap
实现,元素有序且不重复。- 答案
5. Map接口
- 选择题
- 关于
HashMap
类,以下说法正确的是: A.HashMap
不能存储键为 null 的键值对。 B.HashMap
是线程安全的。 C.HashMap
基于哈希算法实现Map 接口。 D.HashMap
是有序的。 - 答案
- 判断题
HashTable
中的键和值都不可以为 nullHashMap
中的值可以为 null,可以有多个值为 null。- 答案
综合题
- 选择题
- 以下哪个集合类保证元素的顺序?
A.
HashSet
B.TreeSet
C.LinkedList
D.HashMap
- 答案
- 判断题
TreeSet
保证元素的自然顺序或根据提供的比较器排序。LinkedList
只实现了List接口。- 答案
多线程
1. 进程
- 判断
- 进程是资源管理的最小单位。
- 进程包含一个或多个线程。
- 选择
- 下面哪个说法是正确的? A. 进程共享内存空间。 B. 进程是程序执行的最小单位。 C. 进程有独立的内存空间。 D. 进程没有独立的内存空间。
- 答案
2. 线程
- 判断
- 线程是程序执行的最小单位。
- 线程不拥有独立的栈空间。
- 选择
- 下面哪个说法是正确的? A. 线程有独立的地址空间。 B. 同一个进程之间的线程共享堆上的内存空间。 C. 线程是资源管理的最小单位。 D. 线程不能有自己的堆栈和局部变量。
- 答案
3. 实现多线程的第一种方式
- 填空
- 实现多线程的第一种方式是继承 __ 类,重写 __ 方法,并调用 __ 方法启动线程。
- 答案
4. 实现多线程的第二种方式
- 填空
- 实现多线程的第二种方式是实现 __ 接口,创建 __ 类对象,并调用 __ 方法启动线程。
- 答案
5. 线程的静态方法
- 填空
- 使用 __ 方法返回当前线程实例。
- 使用 __ 方法使当前线程休眠。
- 使用 __ 方法暂停当前线程的执行。
- 使用 __ 方法打印当前线程的调用栈。
- 答案
6. 多线程同步控制
- 填空
- 线程不安全:当多个线程需要对___变量进行读写操作时,可能会发生冲突。
- 同步的常见方式是 __。
- 判断
- Vector 是线程安全的。
- HashTable 是线程不安全的。
- 选择
- 下面哪个说法是错误的? A. Vector 用 ArrayList 替代。 B. HashTable 用 HashMap 替代。 C. Vector 是线程安全的。 D. HashMap是线程安全的。
- 答案
7. 同步块与同步方法
- 选择
- 下面哪个说法是不正确的? A. 同步块使用synchronized 关键字放在代码块前定义。 B. 同步方法锁定调用该方法的对象。 C. 同步块中的对象称为监视器对象。 D. 同步方法使用synchronized 关键字在方法声明中定义。
- 答案
8. 死锁
- 判断
- 死锁是指多个线程相互等待对方释放资源,从而都无法继续执行。
- 简答
- 描述造成死锁的原因
- 答案
9. 线程的通信状态
- 填空
- 线程有五种状态:创建、__、执行、__、死亡。
- 选择
- 下面哪个说法是不正确的? A. 线程在创建状态时没有分配资源。 B. 线程在就绪状态时分配了所有资源。 C. 线程在阻塞状态时等待用户输入。 D. 线程在死亡状态时结束。
- 答案
10. 线程优先级
- 填空
- Thread 类中定义的常量有 NORM_PRIORITY(值为 __),MAX_PRIORITY(值为 __),MIN_PRIORITY(值为 __)。
- 选择
- 下面哪个说法是不正确的? A. 线程优先级的范围是 1 到 10。 B. 线程优先级越高越先被调用,然后才调用优先级低的线程。 C. 优先级相同的线程会被随机调用。 D. 优先级相同的线程总是并发执行。
- 答案
知识扩展
面向对象
1. final
- 概念:
final
是 Java 的关键字,用于表示某个类、方法或变量一旦定义,就无法改变。
- 扩充:
final
修饰类:该类不能被继承,如String
类。final
修饰方法:该方法不能被子类重写,如Object
类的getClass()
方法。final
修饰变量:该变量一旦赋值后不能再更改,如public static final double PI
。
2. 抽象类
- 概念:抽象类使用
abstract
关键字修饰,不能被实例化,通常用于表示抽象概念或行为。
- 扩充:
- 可以包含抽象方法(无方法体)和具体方法。
- 子类必须实现所有抽象方法,除非子类也是抽象类。
- 抽象类可以有构造函数,用于初始化其子类。
3. 接口
- 概念:接口是一个完全抽象的类,只能声明方法,而不能实现方法(Java 8 之后允许默认方法和静态方法)。
- 扩充:
- 接口中的变量默认是
public static final
,方法默认是public
。 - 接口可以被多个类实现,一个类可以实现多个接口。
- Java 8 引入了接口的默认方法和静态方法。
4. 枚举和内部类
- 概念:枚举用于定义一组固定的常量,而内部类是定义在其他类内部的类。
- 扩充:
- 枚举的构造函数默认是
private
,不能被外部实例化。 - 内部类有四种类型:成员内部类、局部内部类、匿名内部类、静态内部类。它们能访问外部类的成员变量和方法。
IO流
1. 字节输入输出流
- 概念:字节流用于处理二进制数据,
InputStream
和OutputStream
是所有字节流的抽象基类。
- 扩充:
read()
方法用于从输入流读取单个字节数据,返回值为读取的字节或1
(表示流的末尾)。write(int)
方法用于向输出流写入一个字节数据。
2. 字符输入输出流
- 概念:字符流用于处理字符数据,
Reader
和Writer
是所有字符流的抽象基类。
- 扩充:
read(char[])
方法用于从输入流中读取字符并存储到数组中。write(String)
方法用于向输出流写入字符串。
3. 文件流
- 概念:文件流用于文件的读写操作。
- 扩充:
File
类提供文件的创建、删除等功能,mkdir()
用于创建目录。
集合框架
1. 泛型
- 概念:泛型允许在编译时检查类型安全,避免类型转换异常。
- 扩充:
- 泛型的类型信息在运行时被擦除,称为“类型擦除”。
- 泛型可以用于类、方法的定义,也可以作为方法的返回类型。
2. Collection接口
- 概念:
Collection
是 Java 集合框架的根接口,表示一组对象。
- 扩充:
- 常用实现类包括
List
、Set
等,提供集合的基本操作如add()
、remove()
、contains()
等。
3. List接口
- 概念:
List
是有序的集合,允许重复元素。
- 扩充:
ArrayList
基于数组实现,适合随机访问。LinkedList
基于链表实现,适合频繁的插入、删除操作。
4. Set接口
- 概念:
Set
是不允许重复元素的集合。
- 扩充:
HashSet
基于HashMap
实现,元素无序。TreeSet
基于TreeMap
实现,元素有序。
5. Map接口
- 概念:
Map
表示键值对的集合,不能包含重复的键。
- 扩充:
HashMap
允许null
键和null
值,基于哈希算法实现。Hashtable
是线程安全的,不允许null
键和值。
多线程
1. 进程与线程
- 概念:
- 进程是资源分配的最小单位,每个进程有独立的内存空间。
- 线程是程序执行的最小单位,同一进程的线程共享进程的内存空间。
2. 实现多线程的方式
- 扩充:
- 第一种方式:继承
Thread
类,重写run()
方法,调用start()
启动线程。 - 第二种方式:实现
Runnable
接口,创建Thread
对象,并调用start()
启动线程。
3. 线程同步
- 概念:多线程环境下,为了防止线程间的资源冲突,常使用同步机制。
- 扩充:
- 同步块通过
synchronized
关键字定义,确保某段代码同一时间只能被一个线程执行。 Vector
和Hashtable
是线程安全的类。
4. 死锁
- 概念:多个线程相互等待对方持有的资源,导致所有线程都无法继续执行。
- 扩充:
- 解决死锁的办法包括资源有序分配、避免锁嵌套等。
5. 线程优先级
- 概念:线程的优先级范围从 1 到 10,默认优先级是 5。
- 扩充:
- 优先级较高的线程会被优先调度,但不保证绝对的优先执行。
- 作者:poze624
- 链接:https://poze624.top/notes/20240621205859
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章