Exception 和Error异常大部分人都犯过的错。

先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索【程序职场】关注这个执着的职场程序员。
我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验。

1,简介

Exception 和Error 都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出或者捕获,它是异常处理机制的基本类型。

两者有什么区别呢:

Exception是java程序运行中可预料的异常情况,咱们可以获取到这种异常,并且对这种异常进行业务外的处理。(我们常做的操作就是捕获这种异常或者抛出这种异常)
 

Error是java程序运行中不可预料的异常情况,这种异常发生以后,会直接导致JVM不可处理或者不可恢复的情况。所以这种异常不可能抓取到,比如OutOfMemoryError、NoClassDefFoundError等。(这种会导致我们的程序 crash,直接导致项目的崩溃)

2,子类

 

我们来看看这两个异常都有哪些子类呢?

1,Exception

(1)RuntimeException(2)NullPointerException(3)ClassCaseException(4)SecurityException(5)IOException


2,Error

(1)OutofMemoryError(2)StackOverFlowError(3)VirtualMachineError(4)LinkageError(5)NoClasDeffoundError(6)ExceptionInInitializerError

 

我们上面知道了两个都包含了哪些子类,同事我们刚开始的时候也说了 

Exception 和Error 都是继承了Throwable类
 

 

3,Throwable


我们必须要理解 Java 语言中操作 Throwable 的元素并且知道怎么使用。
掌握最基本的语法是必须的,如 try-catch-finally 块,throw、throws 关键字等。
还要懂得如何处理典型场景。

throw是存在于方法的代码块中,而throws是存在于方法外围,一般是在方法名后边 throws XXXException;

 

我们先来看看 的使用try-catch-finally,一般我们害怕出现异常都是直接 try-catch-finally 添加,但是这种异常捕获,是有先后顺序的,下面我们通过两个实例来说说明

try{    retrun 3;}catch{    e.printStackTrace();}finally{    return 4;}
//上边情况下,实际返回的是4;
try{    int x = 3;    retrun x;}catch{    e.printStackTrace();}finally{    x++;}
//上边情况下,实际返回的3;

是不是发现finally是都要走了,所以一般我们处理异常的东西,最后消除或者释放的时候都需要在finally中。

 

1,捕获异常
捕获异常就是我们直接 处理掉异常,让异常到这里就结束。如下例:

package com.company.test;
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;
public class Exception_Error {    public static void main(String[] args) {        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        } finally {
        }    }}

2,抛出异常

package com.company.test;
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;
public class Exception_Error {    public static void main(String[] args) {        try{            throwChecked(3);        }catch(Exception e) {            System.out.println(e.getMessage());        }        throwRuntime(-3);    }    //该方法内抛出一个Exception异常对象,必须捕获或抛给调用者    public static void throwChecked(int a) throws Exception {        if(a < 0) {            throw new Exception("a的值应大于0,不符合要求");        }    }    //该方法内抛出一个RuntimeException对象,可以不理会直接交给JVM处理    public static void throwRuntime(int a) {        if(a < 0) {            throw new RuntimeException("a的值应大于0,不符合要求");        }    }}

 

throw语句用在方法体内,表示抛出异常,由方法体内的语句处理

throw是具体向外抛异常的动作,所以它是抛出一个异常实例。

throw要么和try-catch-finally语句配套使用,要么与throws配套使用 

如果抛出的是RuntimeException则既可以显示使用try…catch捕获也可以不理会它

 

3,异常处理的两大基本原则

  • 尽量不要捕获类似 Exception 这样的通用异常,而是应该捕获特定异常。

  • 不要生吞(swallow)异常。

我是一枚执着的职场程序员,微信搜索【程序职场】关注我。别忘了三连啊,点赞、收藏、留言,随意给,我不挑。
注:如果文章有任何问题,欢迎毫不留情地指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

沉默的闪客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值