本文仅解释概念,无示例代码。
异常处理
错误和异常
- Throwable是所有异常的共同祖先,异常都是从Throwable继承而来的。Throwable有两个子类,Error和Exception。
- Error是错误,表示运行应用程序中出现了严重的错误,都是通过Error抛出的,一般是程序不能处理的系统错误。
- Exception是异常,表示程序运行时,程序本身可以捕获并且可以处理的错误。
- 异常和错误的区别是,异常是可以被处理的,而错误是没法处理的。
错误Error分类:
- Error类包括一些不能被程序员处理的严重的系统错误类,共有12个直接子类,一般表示代码运行时 JVM(Java 虚拟机)出现的问题,如内存溢出、虚拟机错误、栈溢出等。
- 这类错误与硬件有关,大多数错误与代码编写者执行的操作无关,通常由系统进行处理,程序本身无法捕获和处理。如:当JVM耗完可用内存时,将出现OutOfMemoryError。如Java虚拟机运行错误,将出现VirtualMachineError、类定义错误将出现NoClassDefFoundError等。
- 这些错误是不可查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。
异常Exception分类:
- 运行时异常(不受检异常) – RuntimeException类及其子类:表示JVM在运行期间可能出现的错误。编译器不会检查此类异常,并且不要求必须处理异常。如:空值对象的引用(NullPointerException)、数组下标越界(ArrayIndexOutBoundException)。此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理。
- 非运行时异常(受检异常) --除RuntimeException及其子类之外的异常,如果程序中出现此类异常,如IOException,必须对该异常进行处理,要么使用try-catch捕获,要么使用throws语句抛出,否则编译不通过。
常用异常:
- 输入输出异常:IOException
- 算术异常类:ArithmeticExecption
- 空指针异常类:NullPointerException
- 类型强制转换异常:ClassCastException
- 操作数据库异常:SQLException
- 文件未找到异常:FileNotFoundException
- 数组负下标异常:NegativeArrayException
- 数组下标越界异常:ArrayIndexOutOfBoundsException
- 违背安全原则异常:SecturityException
- 文件已结束异常:EOFException
- 字符串转换为数字异常:NumberFormatException
- 方法未找到异常:NoSuchMethodException
处理异常关键字
try-catch-finally
异常的捕获处理:
- try:将可能出现错误的程序代码放在try块中,对try块中的程序代码进行检查,可能会抛出一个或多个异常。因此,try后面可跟一个或多个catch。
- catch:其功能是捕获异常,参数ExceptionObject是由try语句生成的。ExceptionType是Throwable类中的子类,它指出catch语句中所处理的异常类型。catch捕获异常的过程中,要将Throwable类中的异常类型和try语句抛出的异常类型进行比较,若相同,则在catch中进行处理。
- Finally:是这个组合语句的统一出口,一般用来进行一些“善后”操作,例如释放资源、关闭文件等。它是可选的部分。
- 运行时异常只有运行时才会出现,将出现异常的语句使用try- catch-finally结构包裹即可。
- 非运行时异常,是必须进行处理的异常,要么使用try-catch捕获,要么使用throws语句抛出,否则编译不通过。
多线程
- 程序:是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。
- 进程:是程序的一次执行过程,是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。
- 线程:是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。
也就是说:
- 简而言之,一个程序至少有一个进程,一个进程至少有一个线程。
- 线程的划分尺度小于进程,使得多线程程序的并发性高。
- 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
- 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
- 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。