java 异常体系(超全超详细)try, catch,finally,throw,throws详解

异常概念

异常就是有异于常态,和正常情况不一样,有错误出现。在java中,阻止当前方法或作用域的情况,称之为异常
THRESS

Throwable体系:
Error (错误)
   表示 错误Error,无法通过处理的错误,只能事先避免。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题
Exception(异常)
 表示异常,异常产生后程序员可以通过代码的方法纠正,是程序继续运行,是必须处理的。

异常分为两大类:运行时异常和非运行时异常(编译异常)

异常分类

运行时异常
       是RuntimeException类及其子类异常,表示JVM在运行期间可能出现的错误。
       编译器不会检查此类异常,并且不要求处理异常,比如用空值对象的引用(NullPointerException)、数组下标越界(ArrayIndexOutBoundException)。此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理。
非运行时异常(编译异常)
   Exception中除RuntimeException极其子类之外的异常。编译器会检查此类异常,如果程序中出现此类异常,比如说IOException,必须对该异常进行处理,要么使用try-catch捕获,要么使用throws语句抛出,否则编译不通过。

异常的处理

异常处理的五个关键字: try, catch,finally,throw,throws;
抛出异常:throw,throws
捕获异常:try,catch,finally

throw关键字
1.作用

可以用throw关键字在指定的方法中抛出指定的异常。

2.使用格式

throw new XXXException(“异常原因”)

3.注意事项

1.throw 关键字必须写在方法内部
2.throw 关键字后面 new 的对象必须是Exception或它的子类对象
3 throw 关键字抛出指定的异常,我们就必须处理这个异常对象
(1)throw 关键字后面创建的是RuntimeException类及其子类异常对象,我们可以不处理,默认交给JVM处理。
(2)throw 关键字后面创建的是编译异常(写代码时候报错),我们就必须处理这个异常,要么用throws,要么用try…catch 处理。
实例:
public class NullpointExceptionTest {
static void testNull()throws NullPointerException{
String s = null;
if(s==null){
throw new NullPointerException();
}
}
public static void main(String []args){
try {
testNull();
} catch (NullPointerException e) {
// TODO: handle exception
System.out.println(“testNull()中抛出的异常是”+e);
}
}
}

throws关键字
1.作用

throws关键字处理异常对象,会把异常对象声明抛给方法的调用者处理(自己不处理,交给别人处理),最终交给JVM处理 ----->中断处理

2.使用格式

修饰符 返回值类型 方法名(参数列表) throws AAAException,BBBException…{
thrwo new AAAException(“产生原因”);
thrwo new BBBException(“产生原因”);

}

3.注意事项

1.throws 关键字 必须卸载方法声明处。
2.throws 关键字 后边声明的异常对象必须是Exception或Exception的子类对象
3.方法内部抛出多个异常对象,那么throws后面必须也声明多个异常对象,如果对个对象有父子关系,直接可以声明父类异常
4.调用了一个声明抛出异常的方法,我们就必须处理声明的异常。要么用throws,要么用try…catch 处理。

实例:
public static void count(int x) throws MyException{
if(x>0) {
throw new MyException(“发生了自定义的异常”);
}
}

public static void main(String[] args) {

// 自己定义的异常如下
try {
count(3);
} catch (MyException e) {
e.printStackTrace();
}
}

try…catch关键字
1.作用
try..catch 关键字处理异常对象,直接自己处理
2.使用格式
   try{

可能产生异常的代码
}catch( 定义一个异常变量,用来接收try中抛出的异常对象){
异常的处理逻辑,一般会把异常记录在日志中。
}

catch(异常类名 变量名){

}

3.注意事项

1 try 中抛出多个异常对象时,可以使用多个catch 处理异常对象。
2 如果try 中产生异常,就会执行 catch里面的异常处理逻辑,执行完成后,会继续执行try…catch之后的代码。如果try 中没有产生异常 就不会执行catch里面的 处理逻辑,直接执行try…catch之后的代码。

实例:

public static void main(String[] args) {
//捕获异常
try {
//可能产生异常的代码
int = 3/0;
} catch (FileNotFoundException e) {
//异常的处理逻辑,将异常记录日志,异常封装后显示
System.out.println(“系统找不到指定的路径”);
}
System.out.println(“后续代码”);

}
public static  void readFile() throws FileNotFoundException {
    InputStream is = new FileInputStream("E:/iodemo/ch01.txt");
}
finally关键字
1.作用

finally和final是不一样的哦,final是声明常量的,而finally是做异常处理的。

2.使用格式

try{

可能包含异常的代码

}catch( 定义一个异常变量,用来接收try中抛出的异常对象){
异常的处理逻辑,一般会把异常记录在日志中。
}

catch(异常类名 变量名){
可以有多个catch
}

finally{

无论是否出现异常都会执行

}

3.注意事项

1 finally 不能单独使用,必须个try…catch结合使用
2 finally一般用于资源释放(资源回收),程序无论是否出现异常都要释放资源(IO)
实例:

public static void main(String[] args) {
try {

  int i=3/0;

}catch (RuntimeException e){

    e.printStackTrace();

}finally {

    System.out.println("finally");

}

}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值