Java异常处理

天有不测风云,月有阴晴圆缺。对于程序来说也是如此。但是也要兵来将挡,水来土掩。问题最终是要处理的。
Java异常简介
异常是程序中出现的一些错误,但是错误不全是异常。比如一些语法错误,便不是异常。
Java异常处理类的层次如下:

Java异常处理_第1张图片

Throwable 类是 Java 语言中所有错误或异常的超类。
Error不应当被程序捕获,因为一旦出现error,程序就会停止运行。
受检查异常(checked异常):
除了RuntimeException及其子类以外,其他的Exception类及其子类都属于检查异常(checked异常),当程序中可能出现这类异常,要么使用try-catch语句进行捕获,要么用throws子句抛出,即编译器必须处理的。否则编译无法通过。
未检查异常(unchecked异常):
将派生于Error或者RuntimeException的异常称为unchecked异常,这类异常是应该极力避免的。
异常处理机制

  1. 第一、在方法中用try…catch语句捕获并处理异常,catach语句可以有多个,用来匹配多个异常。在写异常处理的时候,一定要把异常范围小的放在前面,范围大的放在后面,否则编译出错。捕获了异常,就不会再执行别的catch块。

  2. 第二、对于处理不了的异常或者要转型的异常,在方法的声明处通过throws语句抛出异常
public void test() throws MyException{
 ...
 if(....){
  throw new MyException();
 }
}

如果有方法的多重调用,Java虚拟机会从出现异常的方法代码块中往回找,直到找到处理该异常的代码块为止。然后将异常交给相应的catch语句处理。如果Java虚拟机追溯到方法调用栈最底部main()方法时,如果仍然没有找到处理异常的代码块,将按照下面的步骤处理:

第一、调用异常的对象的printStackTrace()方法,打印方法调用栈的异常信息。
第二、如果出现异常的线程为主线程,则整个程序运行终止;如果非主线程,则终止该线程,其他线程继续运行。

异常处理语法

  1. throw 语句抛出一个异常。
    语法:throw 异常对象名;
    ag: throw e;
    throws 是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常) 调用者必须做出处理(捕获或继续抛出)

  2. try语句不能单独存在。 可以和catch、finally组成 try…catch…finally、try…catch、try…finally三种结构。
    抛出 Exception,当 catch 体里有 return,finally 体的代码块将在 catch 执行 return 之前被执行。若 finally 代码块里有 return 或含有能够终止程序的代码,方法将在执行完 finally 之后被结束,不再跳回 try 代码块执行 return。 finally语句唯一不被执行的情况是方法执行了System.exit()方法。System.exit()的作用是终止当前正在运行的 Java 虚拟机。

  3. 有些异常需要延迟捕获,比如读文件,需要传递文件名参数,如果文件名是空,则需要提示用户指定其他文件或者使用默认文件,而不是直接捕获异常
    异常捕获的目的是最终处理异常,所以对于能够及时处理的的异常,不要随意抛出。

你可能感兴趣的:(java基础,Java,基础知识)