JAVA基础笔记四——异常处理

异常:就是不正常,是指程序在运行时出现的不正常情况。其实就是程序中出现的问题。这个问题按照面向对象思想进行描述,并封装成了对象

**异常的体系**Throwable

Error:

通常指JVM出现重大问题如:运行的类不存在或者内存溢出等。
不需要编写针对代码对其处理,程序无法处理

Exception :

在运行时运行出现的一些情况,可以通过try,catch,finally处理

异常处理两种方式:

1、捕获异常:try catch 直接处理可能出现的异常!
2、声明异常:throws 声明告诉调用者可能的异常,暴露问题,调用者自己处理,如果调用者向外抛不处理,则交给JVM处理!

**异常处理格式:**5个关键字(try ,catch,finally ,throw, throws)

try{
//可能出异常的代码
} catch(异常类 对象){
//处理该异常类型的语句
}
[finally] {
//一定会执行的代码
//catch块使用System.exit(1);除外
}

注意:

当try语句块出现异常,程序会自动跳到catch语句块去找匹配的异常类型,并执行异常处理语句,finally语句块是异常的统一出口

多异常处理:

1.声明异常时尽可能声明具体异常类型,方便更好的处理
2.方法声明几个异常就对应有几个catch块
3.若多个catch块中的异常出现继承关系,父类异常catch块放在最后
4.在catch语句块使用Exception类作为异常类型时,所有子类实例都可以使用父类接收(向上转型),即所有的异常对象都可以使用Exception接收

异常的分类:
1.编译时被检测的异常

特点:
Java编译器会检查它,也就说程序中一旦出现这类异常,要么是没有try-catch语句捕获,或throws语句没有声明抛出它,编译就不会通过,也就说这种异常,程序要求必须处理

2.编译时不被检测的异常,即运行时异常(RuntimeException以及其子类)

    **RuntimeException异常:**是指因设计或实现方式不当而导致的问题.说白了,就是程序员造成的,程序员小心谨慎是完全可以避免的异常.比如,事先判断对象是否为null就可以避免NullPointerException异常,事先检查除数不为0就可以避免ArithmeticException异常

    特点:
    这种异常Java编译器不会检查它,也就说程序中出现这类异常的时候,即使不处理也没有问题,但是一旦出现异常,程序将异常终止,若采用异常处理,则会被相应的程序执行处理

throws:用于声明异常

1.在可能出现异常的方法上声明抛出可能出现异常的类型
2.声明的时候尽可能声明具体的异常,方便更好的处理
3.当前方法不知道如何处理这种异常,可将该异常交给上一级调用者来处理(非RuntimeException类型的异常)
4.方法一旦使用throws声明抛出方法内可能出现的异常类型, 该方法就可以不再过问该异常了
5.一个方法调用另一个使用throws声明抛出的方法,自己要么try…catch , 要么也throws

格式:

public 返回值类型 方法名(参数列表…)
throws 异常类A,异常类B… {

}

throw:用于抛出异常类的对象

    若throw抛出的是Runtime异常,程序可以显示使用try...catch来捕获并处理,也可以不管,直接交给方法调用者处理
    若throw抛出Checked异常,要么放在try里自己处理,要么放在一个throws声明的方法里面,交给调用者处理

throws与throw:

区别:

thorws用在方法上,后面跟异常类名,可以是多个异常类
throw用在方法内,后面跟异常对象,只能是一个具体异常类的对象

*finally:*异常的统一出口

1.不管try块程序是否异常,也不管哪个catch执行,finally块总会执行(除非JVM执行 System.exit(0))
2.try块必须和 catch块或和finally同在,不能单独存在,二者必须出现一个
3.不要在finally中使用return 或throw语句,否则将会导致try、catch中的return或throw失效

异常在子父类覆盖中的体现:

1.子类在覆盖的父类时,子类只能抛出父类的异常或者异常的子类,或者不抛
2.如果父类抛出多个异常,子类在覆盖时只能抛出异常的子类
3.如果父类或者接口没有抛出异常,那么子类在覆盖时也不能抛
如果子类发生了异常,必须对其进行处理,绝对不能抛

自定义异常:定义异常继承Exception或者RunTimeException

1.让该自定义类具有可抛性
2.让该类具有异常的共性方法

异常的好处:

1.将问题进行封装
2.将正常代码和问题处理代码分离,便于阅读

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值