Java中的异常处理

Java中的异常处理

一、异常简介

1.定义:程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。

2.异常结构图及分类
Java中的异常处理

2.1按照Java中异常的顶层父类Throwable类划分

2.1.1Error:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理----通过代码无法处理

2.1.2Exception:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心—通过代码可以处理

2.2按照运行—编译划分

2.2.1运行时异常:可以通过编译,包括RuntimeException的异常

2.2.2编译时异常:不能通过编译,包括Error及除RuntimeException以外的异常

二.Java中的异常处理手段—针对运行时异常

1使用try…catch…finally语句块处理

1.1基本用法

try{

可能发生异常的代码

注意:1.如果没有异常直接去执行finally代码块

  2.如果发现异常,则去匹配catch中代码块,如果在catch中未匹配到处理该异常代码块,则程序直接去执行finally代码块,然后抛出异常,从发生异常的代码语句处停止运行程序

}catch(异常类型+变量){

匹配某类异常,根据需求可视化异常

注意:1.一个catch代码块只捕获一种类型的异常

  2.一个try…catch…finally语块可以有多个catch语句块,用 来捕获不同类型的异常

  3.如果没有捕获到任何异常,所有的catch语句块将被忽略

} finally {

收尾善后性质的代码

注意:1. 一个try至少要有一个catch块,否则,至少要有1个finally块

  2. 当至少有一个catch块时,finally块可以没有

  3.无论是否发生异常,finally块中的代码都会执行

}

1.2注意事项

1.2.1try块、catch块、finally块三者之中的局部变量不共享

1.2.2多个catch块中捕获的异常会存在父子类关系,应先将子类放在前面,父类放在后面,保证每个catch出现的意义,否则父类已经捕获的异常,子类是捕获不到的

2使用throws声明异常

2.1基本用法

2.1.1原理:如果一个方法内部的代码会抛出异常,而方法自己又没有完全处理掉,则javac保证你必须在方法的签名上使用throws关键字声明这些可能抛出的异常,否则编译无法通过

2.1.2与try…catch…finally比较:throws仅仅声明异常,并不捕获处理,而是把异常交给调用方法的人处理,可以根据一层一层反给调用方法的人

三.throw关键字

1.定义:throw是用来抛出异常的,后面必须跟一个异常对象

2.使用:throw必须在方法内部使用,执行throw的地方就是一个异常抛出点,它和由JRE自动形成的异常抛出点没有任何差别

四.自定义异常

1.定义:根据实际需求,自己定义的异常,根据自定义异常的类型继承Java提供的异常类

2.自定义异常包含的构造方法

2.1无参数构造方法

2.2带String参数的构造方法,并传递给父类的构造方法

2.3带String参数和Throwable参数的构造方法,并传递给父类构造方法

2.4带Throwable参数的构造方法,并传递给父类构造方法

***对于finally和return的小总结:

1.finally会中的return会覆盖try
或者catch中的返回值

  1. finally中的return会导致catch块中的异常无法抛出,直接返回finally中的返回值

***常见笔试题

如下方法,最后此方法的返回值是几?

答案是:2

public int get(){

try{

System.out.println(10/0);

return
1;

}catch(Exception e){

 System.out.println("捕获异常");

}finally{

}

return 2;

}