java学习笔记——第九篇 异常

本文介绍了Java中的异常处理机制,包括异常的分类(Error和Exception)、异常的层次结构以及异常处理的三种方式。重点讲解了try-catch-finally语句的使用,声明抛出异常的方法,以及如何人工抛出和创建自定义异常。通过对异常的处理,可以增强程序的健壮性和安全性。

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

异常概述

  在java语言中,异常指程序运行时(非编译)所发生的非正常情况或错误。
  Java程序运行过程中所发生的异常事件可分为两类

  • Error(错误):JVM系统内部错误、资源耗尽等严重情况,程序本身无法克服和恢复的一种严重错误。
  • Exception(异常): 其它因编程错误或偶然的外在因素导致的一般性问题,还能克服和恢复。例如:数组越界问题(ArrayIndexOutOfBoundsException)、空指针异常(NullPointerException)、类转换异常(ClassCastException)、网路掉线、硬盘空间不足、IO异常。

  Exception(异常)按照性质,又分为编译异常(可检测)和运行时异常(不可检测)

  • 编译时异常:又叫可检查异常,通常时由语法错和环境因素(外部资源)造成的异常。比如输入输出异常IOException,数据库操作SQLException。其特点是,Java语言强制要求捕获和处理所有非运行时异常。通过行为规范,强化程序的健壮性和安全性。
  • 运行时异常:又叫不检查异常RuntimeException,这些异常一般是由程序逻辑错误引起的,即语义错。比如算术异常,空指针异常NullPointerException,下标越界IndexOutOfBoundsException。运行时异常应该在程序测试期间被暴露出来,由程序员去调试,而避免捕获。

  所以,java语言处理运行时错误有三种方式

  • 程序不能处理的错误;
  • 是程序应该避免而可以不去捕获的运行时异常;
  • 是必须捕获的非运行时异常。

  异常层次分类
在这里插入图片描述

异常处理机制

  • 抛出异常
  • try-catch-finally 捕获和处理异常

  当Java程序运行到某个方法发生异常时,产生一个对应异常类对象,包含异常事件类型,发生异常是应用程序的状态,和调用过程等信息,然后抛出,运行系统开始查找有没又匹配异常处理程序,没有,就中断程序,有就将控制权交个程序处理程序,处理异常。

使用try…catch…finally处理异常

  异常处理是通过try-catch-finally语句实现的。

        try{
            int i = 10;
            int j = i / 0;
        }
        catch (NullPointerException e){
            System.out.println(e.getMessage()); 
            // getMessage( ) 方法,用来得到有关异常事件的信息
            // printStackTrace( )用来跟踪异常事件发生时执行堆栈的内容
        } catch (ClassCastException e){
            System.out.println(e.getMessage());
        } catch (ArithmeticException e){   
            System.out.println(e.getMessage());
        }
        finally {
            System.out.println("finally...");
        }

        //不论在try、catch代码块中是否发生了异常事件,finally块中的语句都会被执行,哪怕在抓住异常的catch代码块中加入return。finally语句是可选的。
        System.out.println("end...");

声明抛出异常

  声明抛出异常是Java中处理异常的第二种方式
  如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显式地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
  在方法声明中用 throws 子句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。
  声明抛出异常举例:

public void readFile(String file) throws FileNotFoundException {
    ……
    // 读文件的操作可能产生FileNotFoundException类型的异常
    FileInputStream fis = new FileInputStream(file);
    ..……
}

人工抛出异常

  Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要人工创建并抛出
  首先要生成异常类对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。可以抛出的异常必须是Throwable或其子类的实例。

IOException e =new IOException();
throw e;

创建用户自定义异常类

  用户自定义异常类MyException,用于描述数据取值范围错误信息。用户自己的异常类必须继承现有的异常类

学习来源:https://www.cnblogs.com/uncleyong/p/9729206.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值