Java之异常

本文探讨了Java中的异常体系,包括编译时异常(如SAXException)和运行时异常(如NullPointerException)。讲解了JVM的默认异常处理流程,以及throws和throw关键字的用法区别,自定义异常的创建和处理方法。重点在于异常处理的try...catch...机制及其应用实例。

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

异常体系

异常

异常:就是程序出现了不正常的情况。程序在执行过程中,出现的非正常的情况,最终导致JVM的非正常停止。

注意:语法错误不在异常体系中。

异常体系

在这里插入图片描述

编译时异常和运行时异常

在这里插入图片描述

编译时异常就是在编译的时候出现的异常。举例:SAXException

运行时异常就是运行时出现的异常。举例:NullPointerException

JVM默认的异常处理方案

如果程序出现了问题,如果我们没有相应的代码对该异常进行处理,那么JVM虚拟机会做默认处理。

1.异常会被交给该方法的调用者进行处理

2.将异常的名称及异常的原因及异常出现的位置等信息输出到控制台

3.程序停止运行

异常处理方式

异常处理方式一——throws

这个格式是写在方法的定义出,表示声明一个异常。

格式:

throws 异常类名;

举例:

public static void main(String[] args) throws ParseException{
   durationMethod();
}
说明:

1.声明异常表示告诉调用者,调用该方法可能会出现异常;

2.如果该方法中没有出现异常,则正常执行;

3.如果方法中出现了异常,那么就将这个异常交给方法的调用者进行处理。

注意:

1.编译时异常因为是在编译时就会检查,所以必须要写在方法名后面进行显示声明;

public static void main(String[] args) throws ParseException{
   durationMethod();
}

2.运行时异常因为在运行时才会发生,所以在方法后面可以不写。

public static void main(String[] args) /*throws NullPointerException*/{
   durationMethod();
}

抛出异常对象——throw

说明:

1.方法内部执行,表示当前代码手动抛出一个异常,后面的代码不再执行;

2.方法中,出现了异常,没有继续运行下去的意义,采取抛出处理,让该方法结束运行。

3.告诉调用者方法出现了问题。

格式:
throw new 异常();
throws和throw的区别
throwsthrow
用在方法声明后面,跟异常类名用在方法体内,跟的是异常对象名
表示声明异常,调用该方法有可能出现这样的异常表示手动抛出异常对象,由方法体内的语句进行处理

异常处理方式二——try…catch…

不会中断程序,程序可以继续向下执行。

格式:
try{
    //可能出现的异常代码
}catch(异常类名 变量名){
    //异常的处理代码
}
问题:

1.如果try代码块中没有遇到问题,怎么执行?

—try代码块中的代码会全部执行完毕,不会进入catch,继续向下执行。

2.如果try中遇到了问题,那么try下面的代码怎么执行?

—当try中的代码执行遇到异常,会直接跳转到对应的catch代码块进行捕获处理,处理完成后继续向下执行,try 内的后面代码不再执行。

3.如果出现的问题没有被捕获,那么程序如何运行?

—没有被catch捕获,会默认处理。

4.同时有可能出现多个异常怎么处理?

—可以使用多个catch进行捕获不同类型的异常

—如果多个异常之间存在子父类关系,父类要写在下面。则就会出现,出现对应的异常,直接被父类捕获处理,且 编译时,下面的代码会报红。

Throwable成员方法

方法名说明
public String getMessage()返回此 throwable 的详细消息字符串
public String toString()返回此可抛出的简短描述
public void printStackTrace()把异常的错误信息输出在控制台

自定义异常

1.定义一个异常类,类名要见名知意

2.继承Exception或者RunTimeException

示例:
public class AgeOutOfBoundsException extends RuntimeException{
    public AgeOutOfBoundsException() {
    }

    public AgeOutOfBoundsException(String message) {
        super(message);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值