java异常处理体系

本文详细介绍了Java中的异常处理机制,包括异常与错误的区别、异常体系结构、运行时异常与非运行时异常的区别、异常处理流程等核心概念。此外,还探讨了如何自定义异常以及异常限制的相关规定。

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

一,异常的概述

异常(Exception):异常是指程序运行是发生的不正常事件;可以被异常机制处理,程序能够继续运行下去。

错误(Error):错误不能构被处理,发生错误后,程序就终止,需要修改源码才能解决。

二,异常体系结构

1,异常的顶级父类是Throwable类。

2,其下分为Exception和Error两个子类

3,异常分为运行时异常(RuntimeException)和非运行是异常(检测异常)。

4,运行期异常在编译期不会报错,但是运行会终止,所以需要对其进行控制,常见的运行时异常,
      NullPointerException 空指针异常
      ClassCastException 类型转换异常
      IndexOutOfBoundsException 索引越界异常

      ArithmeticException 算数异常

5,除去基本父类是RuntimeException(或者其子类的),都是非运行异常,在编译期会报错,必须进行处理

 如:    IOException IO流异常/输入输出异常

            SQLException SQL异常

三,异常处理流程

1,try-catch-finally

(1)try块

是一个普通的普通的作用域,try关键字开头,在其中包裹可能产生的违例。

一旦抛出异常,其后面的代码将不在执行

(2)catch块

违例控制器在try后面,并用catch捕获。用法catch(异常类型  变量){处理代码}。

catch可以有多个,如果存在父子关系,那么子类catch块需放在父类前面(否则编译错误),但try块抛出的异常与catch中的异常(包含运行是异常)匹配,匹配到谁执行谁。

catch块中声明的异常是抛出异常的父类,则也会捕获。如果几个异常处理的方式相同则可以在catch块中用

单或(|)分隔不同的异常。

(3)finally

try块后面必须跟一个catch块或者finally块。

无论是否有异常,(就算在try或者cathch块中有return;)finally块都会执行

System.exit(0),退出虚拟机,finally不执行。

2,throw和throws

(1)throws用在方法签名上,后面跟异常类型,表明可能会抛出的异常。

用法void f() throws Exception{}

使用这种方式后,在方法中就算抛出异常,也不一定需要处理,谁调用此方法,谁就需要处理此异常,或者继续向上抛出异常。

(2)throw 抛出异常后面接异常的实例。

异常不一定是程序被动产出的,也可以通过throw主动抛出异常。

或者在抓住一种异常后,处理掉然后抛出另外一种异常。

四,自定义违例

1,创建异常类型,同创建类一样,但需要继承一种异常。

class MyException extends Exception{}

2,内部创建构造器,与父类相对应,用super关键字调用父类的构造器。

五,违例限制

父类或者接口中的方法可以抛出异常。

1,方法

(1)如果子类方法不与父类或接口构成重写,则可以随意抛出异常。

(2)子类的方法与父类或者接口构成重写。

子类方法Throws后的异常不能大于父类方法的异常。

子类方法抛出的异常不能大于签名后跟的异常类型。

父类方法抛出异常,但是子类方法可以不抛出异常。

一个类实现了父类和接口的的同一种方法(其抛出的异常不同),那么子类抛出的异常必须同时属于父类和接口抛出的异常,如果不满足,则不能抛出异常。

2,构造器

父类构造器throws异常后,所有其的子类必须解决父类的异常或者throws更大的异常,
而且可以添加其他不同类型的异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值