java异常处理简介_【自学java】异常处理简介

第四章 异常处理

学习 java 、刷算法题时,很少有人会在乎异常处理, 要不 try catch 、 要不就 throw 。但在做项目时候, 异常处理混乱会导致程序可维护性降低。异常本身也是程序的一部分。

第一节 简介

4.1.1 分类

Throwable 接口又分为“异常”、“错误”。异常是程序可以自己处理的, 错误一般是程序无法处理。

40f064695884

2020-07-22_210628.png

一旦捕获了异常,该段程序进入异常处理流程,不会在执行。try 后的代码还是会继续执行的。

public static void main(String[] args) {

try {

System.out.println(13/0);

}catch (Exception e){

e.printStackTrace();

}

System.out.println("会往下执行码?");

}

out

会往下执行码?

java.lang.ArithmeticException: / by zero

at com.awork.common.utils.Test.main(Test.java:6)

4.1.2 检测性异常

异常的另一种分类 : 受检异常 checked、 非受检异常 unchecked。

区别: 在编译的过程中, 非受检异常不会提示,只有当程序运行到异常位置触发异常, 程序寻找异常是否被处理。

非受检异常: RuntimeException 、 Error

受检异常: IOException 、 SQL …

注:

jvm 认为受检异常是可修复的,在编译时会提出, 不会通过编译。诸如 RuntimeException 之类的非受检异常,可以通过编译。 但 jvm 认为程序本身有问题,应该本身捕获异常并处理,再重新运行程序。

第二节 异常与错误

4.2.1 区别

异常是程序可以自己处理的, 错误一般是程序无法处理。 异常处理是程序的一部分,处理过后程序依然可以继续执行流程 。 错误可能需要重新分配 jvm 资源,(如爆栈) 程序已经无法通过 try catch 处理了 。

第三节 异常的处理方式

4.3.1 处理

常规 try ... catch ... finally ...

public static void main(String[] args) {

try {

System.out.println(13/0);

}catch (Exception e){

e.printStackTrace();

} finally {

System.out.println("finally");

}

System.out.println("会往下执行码?");

}

out :

finally

java.lang.ArithmeticException: / by zero

会往下执行码?

可见 , 即使抓到异常, finally 代码块还是会执行 , 并且先于后续代码。

throws

声明在方法中 ,表示方法可能会抛出异常,上层调用者需要捕获异常。

throw

手动抛出异常 : throw new MyException(params);

4.3.2 自定义异常

便于对一类异常进行自定义分类, 遵循 java 封装原则。 便于捕获异常迅速定位。(比如, 是某类 service 出错)

继承 Exception , 重写构造方法 , 例如:

public class MyException extends Exception {

public MyException() {

super();

}

public MyException(String str) {

super(str);

}

}

4.3.3 获取异常信息的常用方法

方法1

e.printStackTrace();

方法2

StackTraceElement[] stackTrace = e.getStackTrace();

for (StackTraceElement stackTraceElement : stackTrace) {

String className = stackTraceElement.getClassName();

System.out.println(className);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值