【Java异常处理完全指南】从崩溃到优雅恢复的实战技巧

一、异常类型区别

Error:系统级错误 ,不可恢复

Exception:叫做异常,代表程序可能出现的问题。

我们通常会用Exception以及他的子类来封装程序出现的问题。

运行时异常: RuntimeException及其子类,编译阶段不会出现异常提醒。

运行时出现的异常(如:数组索引越界异常)

编译时异常:编译阶段就会出现异常提醒的。(如:日期解析异常)


二、异常处理方式

1.JVM默认的处理方式

1)把异常的名称,异常原因及异常出现的位置等信息输出在了控制台

2)程序停止执行,异常下面的代码不会再执行了

示例:

System.out.println(2/0);//算术异常ArithmeticException

输出形式:

Exception in thread "main"

java.lang.ArithmeticException

2.自己处理(捕获异常)

格式:

      try{
        可能出现异常的代码;

        }catch(异常类名 变量名){

        异常的处理代码;

         }

异常处理执行流程:

1)try 块正常执行:

   - 如果 try 中没有遇到问题,会执行完 try 中所有代码

   - 不会执行任何 catch 块中的代码

2)try 块中出现异常:

   - 立即跳转到对应的 catch 块

   - try 中剩余的代码不会执行

   - 如果没有匹配的 catch 块,异常会交给 JVM 处理(程序终止)

3)多个异常处理:

   - 可以编写多个 catch 块处理不同类型的异常

   - 异常不会同时发生,每次只会处理一个异常

   - 父类异常需要写在子类异常的后面(否则会编译错误)


三、Throwable

方法名称说明
public String getMessage()返回此throwable的详细消息字符串
public String toString()返回其可抛出的简单描述
public void printStackTrace()把异常的错误信息输出在控制台
int[] arr = {(1,2,3,4,5,6};

try{
System.out.println(arr[10]);
} catch (ArrayIndexOutOfBoundsException e) {
 String message= e.getMessage();
 System.out.println(message);       //Index 10 out of bounds for length 6
 

String str= e.toString();
System.out.println(str);                  //java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 6

e.printStackTrace();
}

四、抛出处理

throws:

public void 方法()throws 异常类名1,异常类名2...{

}

throw :

public void 方法(){

throw new NullPointerExcertion();

}

说明

编译时异常:必须要写

运行时异常:可以不写

int[] arr= null;
int max = 0;
try {
max= getMax(arr);
} catch (NullPointerException e) {
System.out.println("空指针异常");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("索引越界异常");
System.out.println(max);
}
public static int getMax(int[] arr)/* throws
NullPointerException,ArrayIndexOutOfBoundsException*/
{if(arr == null){

//手动创建一个异常对象,并把这个异常交给方法的调用者处理
//此时方法就会结束,下面的代码不会再执行了

throw new NullPointerException();

if(arr.length == 0){

//手动创建一个异常对象,并把这个异常交给方法的调用者处理
//此时方法就会结束,下面的代码不会再执行了

throw new ArrayIndexOutOfBoundsException();
}

版权声明:本文由Hygge-star原创,转载需注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值