一、异常处理进阶
- 自定义异常类:
- 在Java中,我们可以自定义异常类来更好地处理特定业务场景中的错误。自定义异常类通常需要继承自
Exception
类或其子类。 - 通过自定义异常类,我们可以为异常提供更具体的描述和更多的上下文信息。
- 异常链:
- 当一个异常是因为另一个异常导致的,我们可以使用异常链来记录这种关系。通过构造方法传递原始异常,可以在新的异常中包含原始异常的信息。
- 这有助于更详细地了解异常发生的原因和路径。
- finally块:
finally
块中的代码无论是否发生异常都会执行,通常用于释放资源或进行必要的清理工作。- 注意,
finally
块中的代码在return
语句执行之后、方法返回之前执行。
二、集合框架
- List接口:
List
是有序集合(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。- 常见的实现类有
ArrayList
、LinkedList
和Vector
。
- Set接口:
Set
是一种不包含重复元素的集合。它由对象的引用集合组成,不包含重复的元素。添加、删除和检查元素存在性的时间复杂度都是O(1)。- 常见的实现类有
HashSet
、LinkedHashSet
和TreeSet
。
- Map接口:
Map
是一种将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。- 常见的实现类有
HashMap
、LinkedHashMap
、TreeMap
和ConcurrentHashMap
。
三、泛型
- 泛型类与泛型方法:
- 泛型允许在定义类、接口和方法时使用类型参数。类型参数在编译时会被具体的类型替换,从而实现了代码的复用和类型安全。
- 泛型类是在类定义时声明的类型参数,而泛型方法是在方法定义时声明的类型参数。
- 通配符与类型擦除:
- 通配符(如
?
、? extends Type
、? super Type
)用于表示未知的类型或特定类型的子类/父类。 - 类型擦除是Java泛型实现的一种方式,即在编译时将泛型信息擦除,生成普通的Java字节码。这意味着运行时泛型类型信息是不可用的。
四、多线程基础
- 线程与进程:
- 进程是资源分配的基本单位,它包含了一个程序的运行实例。线程是CPU调度的基本单位,是程序执行的最小单元。
- Java中的线程是通过
Thread
类或其子类来实现的。
- 线程的创建与启动:
- 可以通过继承
Thread
类并重写run()
方法,或者实现Runnable
接口并实现run()
方法来创建线程。 - 通过调用线程的
start()
方法来启动线程,而不是直接调用run()
方法。
- 线程的生命周期:
- 线程从创建到消亡要经历新建(NEW)、就绪(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)和终止(TERMINATED)等状态。
五、总结与展望
通过今天的学习,我对Java的异常处理、集合框架、泛型和多线程基础有了更深入的了解。异常处理是Java编程中不可或缺的一部分,它帮助我们更好地处理程序中可能出现的错误。集合框架提供了丰富的数据结构,使得我们可以更加高效地处理数据。泛型则增强了Java的类型安全性,并提高了代码的复用性。多线程是Java并发编程的基础,它允许我们充分利用多核CPU的资源,提高程序的执行效率。
在接下来的学习中,我将继续深入学习Java的多线程编程,包括线程同步、线程通信、线程池等高级话题。同时,我也会尝试将今天学到的知识应用到实际的项目中,通过实践来巩固和加深对这些知识点的的理解。