JavaSE学习总结(十五)Java异常处理/Throwable/Error/Exception/异常处理/try...catch/throw和throws的区别/finally/自定义异常

本文详细介绍了Java异常处理机制,包括Throwable、Error和Exception的区别,虚拟机JVM的默认处理方式,以及try...catch、throw、throws的使用和区别。此外,还探讨了自定义异常的创建和异常处理的选择策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 异常处理

一、异常的概述和分类

(一)什么是异常?

异常就是Java程序在运行过程中出现的错误。

(二)Throwable、Error、Exception

  • Throwable: Java中所有错误(Error)和异常(Exception)的父类
  • Error:一般是指与虚拟机相关的问题,如系统崩溃,内存空间不足等。它表示不希望被程序捕获或者是程序无法处理的错误,我们不予处理,因为这类一般是很严重的问题,我们处理不了。
  • Exception:表示程序可以处理的异常,可以捕获且可能恢复。分为编译时异常运行时异常
    1. 编译时异常: 非RuntimeException及其子类(必须显式处理,否则程序就会发生错误,无法运行)
    2. 运行时异常: RuntimeException及其子类(可以显式处理,也可以不处理,不处理则是虚拟机默认处理)
    在这里插入图片描述

为了更好地理解Error、编译时异常和运行时异常,可以举个例子:
张三骑自行车去旅游
①骑车途中掉链子,但张三自己可以修好(运行时异常)
②骑车途中轮子爆胎了,张三自己解决不了(严重问题Error)
③出发前发现自行车刹闸松了(编译时异常)

(三)虚拟机JVM是如何默认处理异常的

当遇到运行时异常时,如不作处理则交给JVM处理,JVM有一个默认的异常处理机制,其将该异常进行处理,并将该异常的名称、异常的信息和异常出现的位置打印在了控制台上,同时将程序停止运行(后面的代码不执行)
  
案例演示
(1 除 0)

public class MyTest5 {
   
    public static void main(String[] args) {
   
        int a=1;
        int b=0;
        System.out.println(a/b);
        System.out.println("这句话被执行了");
    }
}

运行:
在这里插入图片描述
发生了运行时异常并且我们没有处理,默认交给了JVM处理,从运行结果来看,发生异常后,后面的代码也没有执行。
显然,这样不作处理的方式会导致异常后的代码无法执行,于是我们自己处理,下面就介绍处理异常的方法。

二、异常处理

(一)try…catch的方式处理异常

try {
   
可能出现问题的代码 ;
}catch(异常名1 变量名1){
   
对异常的处理方式 ;
}catch (异常名2 变量名2){
   
对异常的处理方式 ;
}....

可以用快捷键ctrl+alt+T生成

注意事项
1. try中的代码越少越好,放有可能出现问题的代码。try里面的代码一旦遇到相应的异常,就会执行catch里面的代码。catch里面的异常类名,就是你要对何种异常进行捕获
2. catch中要做处理,不能做空处理(不能将异常信息隐藏),哪怕是一条输出语句也可以,比如e.printStackTrace();(打印异常的堆栈信息)。
3. 如果捕获多个异常,平级关系的异常谁前谁后无所谓,如果出现了子父关系,父类异常捕获必须在后面,否则,子类异常的语句不被执行。
4. 能明确异常种类的尽量明确,不要直接用大的异常类(Exception)来处理。(如果实在无法明确,最后再来一段catch(Exception e){......})

public class MyTest4 {
   
    public static void main(String[] args) {
   
        int a = 1;
        int b = 0;
        int[] arr = {
   2, 4};
        arr = null;

      try {
   
            System.out.println(a / b);
            System.out.println(arr.length);
        } catch (ArithmeticException e) {
   
            System.out.println("除数为0了");
        } catch (NullPointerException e) {
   
            System.out.println("空指针异常");
        } catch (Exception e) {
   
            System.out.println("其他异常");
        }
        System.out.println("下面的代码执行");
        System.out.println("下面的代码执行");
        System.out.println("下面的代码执行"</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值