Java之异常

本文深入解析Java异常处理机制,涵盖异常类型体系结构,包括运行时异常与编译时异常的区别,以及异常处理的方法如try...catch...finally和throws。同时介绍了自定义异常的创建和使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常

异常的类型的体系结构

1、异常系列的父类:java.lang.Throwable

(1)只有它或它子类的对象,才能被JVM或throw语句“抛”出

(2)也只有它或它子类的对象,才能被catch“捕获”

2、Throwable分为两大派

(1)Error:严重错误,需要停下来解决这个问题

(2)Exception: 一般的异常,可以通过判断、检验进行避免,或者使用try...catch进行处理

3、Exception又分为两大类

(1)运行时异常:是RuntimeException或它子类的对象。

这种类型的异常,编译器不会提醒,要进行throws或try...catch进行处理,但运行时可能导致崩溃。

(2)编译时异常:

异常除了运行时异常以外的都是编译时异常。

这种类型的异常,编译器是强制要求throws或try...catch进行处理,否则编译不通过。

1)运行时异常

RuntimeException、NullPointerException,ClassCastException,ArithmeticException,NubmerFormatException,IndexOutOfBoundsException、StringIndexOutOfBoundsException、InputMisMatchException......

(2)编译时异常

FileNotFoundException、IOException、SQLException......

异常的处理

1、在当前方法中处理:try...catch...finally

//形式一:try...catch
try{
    可能发生异常的代码
}catch(异常类型  异常名e){
    处理异常的代码(一般都是打印异常的信息的语句)
}catch(异常类型  异常名e){
    处理异常的代码(一般都是打印异常的信息的语句)
}。。。


//形式二:try...finally
try{
    可能发生异常的代码
}finally{
    无论try中是否有异常,也不管是不是有return,都要执行的部分
}

//形式三:try..catch..finally
try{
    可能发生异常的代码
}catch(异常类型  异常名e){
    处理异常的代码(一般都是打印异常的信息的语句)
}catch(异常类型  异常名e){
    处理异常的代码(一般都是打印异常的信息的语句)
}
finally{
    无论try中是否有异常,也不管catch是否可以捕获异常,也不管try和catch中是不是有return,都要执行的部分
}

2、在当前方法中不处理异常,明确要抛给调用者处理,使用throws

语法格式:

【修饰符】 返回值类型  方法名(【形参列表】) throws 异常列表{
    
}

手动抛出异常:throw

throw 异常对象;
//例如:
throw new AccountException("xxx");

throw抛出来的异常对象,和JVM抛出来的异常对象一样,也要用try..catch处理或者throws。

自定义异常

1、必须继承Throwable或它的子类

比较多的是继承RuntimeException和Exception.

如果继承RuntimeException或它的子类,那么自定义的这个异常就是运行时异常。编译器不提醒处理。

如果继承Exception,那么它属于编译时异常,编译器会强制你处理。

2、建议保留两个构造器
public 自定义异常名(){
    
}
public 自定义异常名(String message){
    super(message);
}

3、自定义异常对象,必须手动抛出,用throw抛出

9.5 关于异常的方法

(1)e.printStackTrace():打印异常对象的详细信息

(2)e.getMessage():获取异常的message信息

关于异常信息的打印:

用System.err打印和用e.printStackTrace()都是会标记红色。

用System.out打印,成普通信息打印。

这两个打印是两个独立的线程,顺序是不能精确控制的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ricky_Ribbon

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值