【java开发异常篇】之搞懂 throw、throws 、error、exception和自定义异常

602 阅读3分钟

前言: 异常的处理是一个合格java开发工程师必须要掌握的知识,狐狸将自己的理解都写下来,此文章仅代表鄙人的总结和理解,如有错漏,欢迎指正...

一、异常里面的error和exception有什么区别?

Error

Error:程序无法处理的系统错误,编译器不做检查。

Error表示系统致命的错误,程序没法处理。

一般是与JVM相关的问题,如系统崩溃,内存溢出,方法调用栈溢出等,如:经常遇到的StackOverflowError、OutOfMemoryError。 这种类型的错误,编译器不做检查,都是系统运行过程中发生的。
这些错误靠我们程序本身是无法处理与预防的,遇到了建议直接程序中止、重启。

Exception

Exception:程序可以处理的异常,捕获后可处理。

Exception异常是程序能够捕获的,也可以做异常处理,我们要尽可能的去处理,使程序继续运行,而不是中止程序。

总结一下就是Error是程序无法处理的错误,Exception是可以处理的异常。

二、throw 和 throws有什么区别?

三、java代码中异常输出的逻辑是怎样的?

里氏代换原则(替换原则): 子类替换父类的方法,体现在继承

四、try catch捕捉异常

使用try catch时,在代码产生的异常可以被throw语句抛出并被catch语句捕获。(必须被抛出才能被捕获)

必须将可能存在异常的代码放在try代码块内,才能捕获可能抛出的异常。一个try类可以对应一个或者多个catch类,一但抛出的异常被一个catch捕获,其他就不会执行。

注意:使用try catch捕捉异常的时候,最好不要直接的抛出(Exception e) 大范围异常,有时候项目复杂起来,都不知道究竟是啥异常,定位异常问题就相对比较麻烦。

五、自定义异常

项目里面一般都是使用自定义异常继承RuntimeException(运行时异常),主要还是给前端返回友好的错误提示,全局自定义异常也是很常用的。

//自定义异常类
public class StockException extends RuntimeException{
    public StockException(){
        super();
    }
    public StockException(String mes ,Throwable cause , boolean  str ,boolean str1 ){
        super(mes , cause , str ,str1) ;
    }
    public StockException(String mes ,Throwable cause){
        super( mes , cause);
    }
    public StockException(String mes){
        super( mes );
    }
    public StockException(Throwable cause){
        super(  cause);
    }
}
//测试自定义异常
public static void main(String[] args) {
    try {
        submitOrder();  //提交订单方法
    } catch (Exception e) {
        String mes = e.getMessage();
        System.out.println("提示用户:"+mes);
        // TODO: handle exception
    }
}
//提交订单处理方法
public static void submitOrder(){
    int stock = 0;  //库存数量
    if(stock == 0){
        throw new StockException("库存不足");  //抛出自定义异常
    }
}

结语:以往都是看别人的博客进行学习技术,其中不乏有精华博客也有吊儿郎当的CV大法文章,所以决定将自己所学所用所整理的知识分享给大家,主要还是想为了后浪们少走些弯路,多些正能量的博客,如有错漏,欢迎指正,仅希望大家能在我的博客中学到知识,解决到问题,那么就足够了。谢谢大家!(转载请注明原文出处)