前言: 异常的处理是一个合格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大法文章,所以决定将自己所学所用所整理的知识分享给大家,主要还是想为了后浪们少走些弯路,多些正能量的博客,如有错漏,欢迎指正,仅希望大家能在我的博客中学到知识,解决到问题,那么就足够了。谢谢大家!(转载请注明原文出处)