欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java异常处理机制详解-通俗易懂

程序员文章站 2022-04-19 20:54:55
...

1. 异常之结构

1.1 Throwable

说到java异常,Throwable不得不提。Throwable是所有异常的父类。它有两个重要的子类:Error(错误)和 Exception(异常),两者都包含了大量的异常处理类。

1.1.1 Error

Error一般为系统级别异常,程序本身无法处理的错误,比如OutOfMemoryError、NoClassDefFoundError等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。

1.1.2 Exception

Exception是程序本身可以处理的异常,程序中应当尽可能去处理这些异常。
Exception又分为两类:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。
如果希望自定义一个检查性异常类,则需要继承 Exception 类。
如果你想自定义一个运行时异常类,那么需要继承 RuntimeException 类。

1.1.2.1 受检异常(CheckedException)

受检异常即为编译异常,在编译的时候必须处理异常,否则编译报错。

常见的受检异常如下:
IOException:一般是在读写数据的时候会出现。常见的IOException有FileNotFoundException、EOFException等。
SQLException:一般是在与数据库交互的时候会出现。

1.1.2.2 非受检异常(Unchecked Exception)

非受检异常即为运行时异常(RuntimeException),表示JVM在运行期间可能出现的错误,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理或不处理。

常见的运行时异常如下:
NullPointerException:程序调用的对象未初始化或对象不存在。
ClassNotFoundException:指该类不存在。
IndexOutOfBoundsException:指索引下标越界。
NumberFormatException:指数字转换异常,一般为要转换的数据不符合数字格式。
NoSuchMethodError:指程序调用的方法不存在。
ArrayIndexOutOfBoundsException:指对数组进行处理的时候,数组下标取值超出了数组的范围。

2. 异常之处理

java的异常处理分为抛出异常和捕获异常。

2.1 抛出异常

java异常抛出分为throw和throws。

2.1.1 throw

throw在方法内调用将异常抛出,后面的代码将不被执行。

	public void methodName(String params){
		//do something...
		throw new ExceptionName();
	}

2.1.2 throws

throws在方法声明时抛出异常,表示该方法无法处理该异常,将异常交给调用者去处理。

	public void methodName(String params) throws Exception{
		//do something...
	}

2.2 捕获异常

java一般通过try{…}catch(){…}finally{…}来捕获异常。

	public void methodName(String params){
		try{
			//do something...
		} catch(Exception e) {
			//do something...
		} finally {
			//do something...
		}
	}

2.2.1 try

try的作用为将可能发生异常的代码进行监听,若运行出现异常,则会抛出异常。其后可以接零个或者多个catch块。

2.2.2 catch

catch的作用为捕获try中抛出的异常,对异常进行处理。

2.2.3 finally

finally的作用为在try或catch块return之前调用执行,执行完成后才return。常用于释放资源等。
仅仅在下面几种情况下不会执行finally语句 :
①.如果在try 或catch语句中执行了System.exit(0)。
②.在执行finally之前jvm崩溃了。
③.try语句中执行死循环。
④.电源断电。

3. try,catch,finally执行顺序

java异常处理机制详解-通俗易懂

  1. 首先执行try语句块,
    a.若执行出现异常,则中断try语句执行,进入执行catch语句,然后执行return表达式,但不返回结果。
    b.若执行没有异常,则接着执行try中return表达式,但不返回结果。
  2. 然后执行finally语句,
    a.当finally语句没有return,执行完finally后返回try或catch中的执行结果。
    b.当finally语句有return,则返回finally最后的执行结果。

4. 异常之输出

catch(Exception e)中的Exception是异常的异常类型,e则是形参。常用异常信息返回如下:
e.getCause():返回抛出异常的原因。
e.getMessage():返回异常信息。
e.printStackTrace():发生异常时,跟踪堆栈信息并输出。一般输出异常会利用log日志打印输出,不推荐此方法。

相关标签: java exception