java异常处理

异常处理

异常的概述

  • 异常:指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM非正常停止
  • java中把不同的异常用不同的类表示,一旦发生某种异常,就创建该异常类型的对象,并且抛出(throw)。然后程序可以捕获(catch)到这个异常对象,并处理;如果没有捕获(catch)这个异常,那么这个异常对象将会导致程序终止
  • 异常类层次结构:Java中的异常类形成了一个层次结构,Throwable是所有异常类的根类,分为Error和Exception两大类。Error通常表示严重的问题,程序一般无法处理;Exception则分为受检异常(checked exception)和非受检异常(unchecked exception)。
  • java.lang.Error:错误。Java虚拟机无法解决的严重问题,一般不编写针对性的代码进行处理
  • java.lang.Exception:异常。我们可以编写针对性的代码进行处理

常见的异常

  • 受检异常:
    • IOException(输入输出异常):处理文件或网络操作时可能发生的异常。
    • FileNotFoundException(文件未找到异常):尝试打开或读取一个不存在的文件时抛出的异常。
    • SQLException(SQL异常):与数据库交互时可能出现的异常。
    • ClassNotFoundException(类未找到异常):尝试加载一个不存在的类时抛出的异常。
  • 非受检异常:
    • NullPointerException(空指针异常):当代码尝试访问一个空对象的属性或调用空对象的方法时抛出的异常。
    • ArrayIndexOutOfBoundsException(数组越界异常):尝试访问数组中不存在的索引位置时抛出的异常。
    • IllegalArgumentException(非法参数异常):方法接收到一个不合法的参数时抛出的异常。
    • IllegalStateException(非法状态异常):对象处于不允许执行当前操作的状态时抛出的异常。

异常处理方式一:try-catch-finally块

  • 在Java中,可以使用try-catch-finally块来处理异常。
  • 在try块中编写可能会引发异常的代码,如果异常发生,程序会跳转到对应的catch块进行异常处理,然后继续执行后续代码。
  • 无论是否发生异常,finally块中的代码都会被执行,通常用于资源释放等操作。
  • 若声明了多个catch结构,且多个异常类型满足子父类关系,则必须将子类声明放父类结构上面;
try {
    // 可能会引发异常的代码
} catch (ExceptionType e) {
    // 异常处理代码

    //打印异常的详细信息
    printStackTrace();

    //获取发生异常的原因
    getMessage();

} finally {
    // 无论是否发生异常都会执行的代码
}

异常处理方式二:throws

  • throws关键字:在方法声明中使用throws关键字声明可能会抛出的异常,让调用该方法的代码处理异常。
public void someMethod() throws IOException {
    // 可能会抛出IOException的代码
}


使用throw手动抛出异常

  • throw关键字:通过throw关键字可以手动抛出异常。可以抛出Java内置的异常类,也可以自定义异常类。
if (someCondition) {
    throw new Exception("Some error message");
}

自定义异常类

  • 可以通过继承Exception类或RuntimeException类来创建自定义异常类,用于特定的异常情况。
public class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}

开发中选择异常处理的方式

  • 如果程序代码中,涉及到资源的调用(流、数据库连接、网络连接等),则必须考虑使用try-catch-finally来处理,保证不出现内存泄漏
  • 如果父类被重写的方法没有throws异常类型,则子类重写方法中如果出现异常,只能考虑使用try-catch-finaly进行处理,不能throws
  • 开发中,方法a依次调用了方法b,c,d等方法,方法b,c,d之间是递进关系。此时,如果方法b,c,d中有异常,我们通常选择throws,而方法a中通常使用try-catch-finally
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值