栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 异常

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 异常

一、Throwable

所有异常类的父类,下面分为Error和Exception两个子类
Error表示系统错误或资源耗尽,由Java系统自己使用,应用程序不应抛出和处理
Exception表示应用程序错误,它有很多子类,应用程序也可以通过继承Exception或其子类创建自定义异常

二、 异常分类

未受检异常:运行时异常RunningTimeException、Error及其子类也是未受检异常

受检异常:Exception的其他子类和Exception自身,
受检异常,java会强制要求程序员进行处理,否则会编译错误,而对于未受检异常则没有这个要求。

三、自定义异常

一般是继承Exception或者它的某个子类。

四、捕获异常 1、catch捕获

1)catch可以有多个,每条对应一种异常类型;
2)找到第一个匹配的catch块,找到后,执行catch块内的代码,不在执行其他catch块,如果没有找到,会继续到上层方法中查找。

2、fianlly

finally 内的代码不管有无异常发生,都会执行。
如果异常没有发生,在try内的代码执行结束后执行;
如果发生异常且被catch捕获,在catch内的代码执行结束后执行
如果有异常发生但没有被捕获,在异常被抛给上层之前执行。
如果try或者catch语句内有return语句,则return语句在finally语句执行结束后执行,但finally并不能改变返回值。

    public static int test(){
        int ret=10;
        try{
            return ret;
        }finally {
            ret=2;
        }
    }

这里函数的返回值为10,而不是2,。执行过程:在执行到try的return语句时,会将返回值ret保存在一个临时变量中,然后执行finally语句,最后再返回那个临时变量,finally中对ret的修改不会被返回。
如果finally中有return语句,try和catch内的return会丢失,实际返回finally中的返回值。finally有return不仅会覆盖try和catch内的返回值,还会掩盖try和catch内的异常,就当异常没有发生一样。
所以应该避免在finally中使用return语句或者抛出异常。

3、try-with-resources语句

对于文件关闭、资源释放等涉及资源场景,java1.7支持try-with-resources语句,资源的声明和初始化放在try语句内,不用在调用finally,在执行完try语句后,会自动调用资源的close()方法。
对于多个资源,以分号分隔。

try(File file=new File("a.txt")){
//使用资源
}
4、throws

throw用于声明一个方法可能抛出的异常。throws跟在方法的括号后面,可以声明多个异常,以逗号分隔。

对于未受检异常,不要求使用throws进行声明,但对于受检异常,则必须进行声明,换句话说,如果没有声明,则不能抛出。
对于受检异常,不可以抛出而不声明,但可以声明抛出但实际不抛出。主要用于父类方法中声明,父类方法内可能没有抛出,但子类重写方法可能就抛出了,子类不能抛出父类方法中没有声明的受检异常,所以就将所有可能抛出的异常都写在父类上。
一个方法内调用了另一个声明抛出受检异常的方法,则必须处理这个受检异常,可以是catch,也可以继续使用throws.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/755959.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号