一、异常处理进阶

  1. 自定义异常类
  • 在Java中,我们可以自定义异常类来更好地处理特定业务场景中的错误。自定义异常类通常需要继承自Exception类或其子类。
  • 通过自定义异常类,我们可以为异常提供更具体的描述和更多的上下文信息。
  1. 异常链
  • 当一个异常是因为另一个异常导致的,我们可以使用异常链来记录这种关系。通过构造方法传递原始异常,可以在新的异常中包含原始异常的信息。
  • 这有助于更详细地了解异常发生的原因和路径。
  1. finally块
  • finally块中的代码无论是否发生异常都会执行,通常用于释放资源或进行必要的清理工作。
  • 注意,finally块中的代码在return语句执行之后、方法返回之前执行。

二、集合框架

  1. List接口
  • List是有序集合(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
  • 常见的实现类有ArrayListLinkedListVector
  1. Set接口
  • Set是一种不包含重复元素的集合。它由对象的引用集合组成,不包含重复的元素。添加、删除和检查元素存在性的时间复杂度都是O(1)。
  • 常见的实现类有HashSetLinkedHashSetTreeSet
  1. Map接口
  • Map是一种将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
  • 常见的实现类有HashMapLinkedHashMapTreeMapConcurrentHashMap

三、泛型

  1. 泛型类与泛型方法
  • 泛型允许在定义类、接口和方法时使用类型参数。类型参数在编译时会被具体的类型替换,从而实现了代码的复用和类型安全。
  • 泛型类是在类定义时声明的类型参数,而泛型方法是在方法定义时声明的类型参数。
  1. 通配符与类型擦除
  • 通配符(如?? extends Type? super Type)用于表示未知的类型或特定类型的子类/父类。
  • 类型擦除是Java泛型实现的一种方式,即在编译时将泛型信息擦除,生成普通的Java字节码。这意味着运行时泛型类型信息是不可用的。

四、多线程基础

  1. 线程与进程
  • 进程是资源分配的基本单位,它包含了一个程序的运行实例。线程是CPU调度的基本单位,是程序执行的最小单元。
  • Java中的线程是通过Thread类或其子类来实现的。
  1. 线程的创建与启动
  • 可以通过继承Thread类并重写run()方法,或者实现Runnable接口并实现run()方法来创建线程。
  • 通过调用线程的start()方法来启动线程,而不是直接调用run()方法。
  1. 线程的生命周期
  • 线程从创建到消亡要经历新建(NEW)、就绪(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)和终止(TERMINATED)等状态。

五、总结与展望

通过今天的学习,我对Java的异常处理、集合框架、泛型和多线程基础有了更深入的了解。异常处理是Java编程中不可或缺的一部分,它帮助我们更好地处理程序中可能出现的错误。集合框架提供了丰富的数据结构,使得我们可以更加高效地处理数据。泛型则增强了Java的类型安全性,并提高了代码的复用性。多线程是Java并发编程的基础,它允许我们充分利用多核CPU的资源,提高程序的执行效率。

在接下来的学习中,我将继续深入学习Java的多线程编程,包括线程同步、线程通信、线程池等高级话题。同时,我也会尝试将今天学到的知识应用到实际的项目中,通过实践来巩固和加深对这些知识点的的理解。