Java从入门到精通17==》异常

本文详细介绍了Java中的异常处理,包括异常的概念、分类(编译时异常和运行时异常)、throw和throws的用法、异常的作用以及捕获异常的方法。通过实例说明了如何查看异常信息和处理异常以保证程序的正常运行。
摘要由CSDN通过智能技术生成

Java从入门到精通17

2023.8.8

一、异常概述

1、什么是异常

Java代码在编译、运行时期发生的问题就是异常

2、异常继承体系

在这里插入图片描述

3、异常分类

编译时异常

Exception的直接子类中,除了RuntimeExcpetion和他的子类,其他都是编译时异常。要求程序员在编写程序阶段必须预先对这些异常进行处理,如果不处理编译器报错,因此得名编译时异常。
javac,就出现报错
示例结果:
在这里插入图片描述

运行时异常

RuntimeException本身和所有子类,都是运行时异常。在编写程序阶段程序员可以预先处理,也可以不管,都行。编译阶段不报错,是程序运行时出现的。
Java,就出现报错
示例代码:

public class Demo {
    public static void main(String[] args) {
        int [] arr=new int [4];
        System.out.println(arr[6]);
    }
}

运行结果:
在这里插入图片描述

4、异常和错误的区别

异常

指程序在编译、运行期间发生了某种异常(XxxException),我们可以对异常进行具体的处理。若不处理异常,程序将会结束运行。
在这里插入图片描述

错误

指程序在运行期间发生了某种错误(XxxError),Error错误通常没有具体的处理方式,程序将会结束运行。Error错误的发生往往都是系统级别的问题,都是jvm所在系统发生的,并反馈给jvm的。我们无法针对处理,只能修正代码。

在这里插入图片描述

总的来说,异常可以处理,错误一般是系统的错误比异常严重,因为无法处理。

5、如何查看异常

jvm抛出的异常自下而上看
1、看异常位置
2、看异常底层(可有可无)
3、看异常原因
在这里插入图片描述

二、throw和throws

1、抛出异常throw

在编写程序时,我们必须要考虑程序出现问题的情况。比如,在定义方法时,方法需要接受参数。那么,当调用方法使用接受到的参数时,首先需要先对参数数据进行合法的判断,数据若不合法,就应该告诉调用者,传递合法的数据进来。这时需要使用抛出异常(throw)的方式来告诉调用者。

格式:
throw new 异常类名(参数);

2、声明异常throws

将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理(稍后讲解该方式),那么必须通过throws进行声明,让调用者去处理。

格式:
修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }

示例图片:在这里插入图片描述

三、异常的作用

1、异常是用来查询bug的关键参考信息

2、异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

示例代码:

import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo1 {
    public static void main(String[] args) {
        String s="2023.08.08";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
        Date date= sdf.parse(s);
        System.out.println(date);
    }
}

示例图片:
在这里插入图片描述通过异常查看bug信息
在这里插入图片描述
通过异常点位查看其底层代码

四、捕获异常

1、什么是捕获异常

Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理。
出现异常我们有两种选择
1、该方法不处理,而是声明抛出,由该方法的调用者来处理(throws)。
2、 在方法中使用try-catch的语句块来处理异常。
try-catch的方式就是捕获异常。
try: 该代码块中编写可能产生异常的代码。
catch: 用来进行某种异常的捕获,实现对捕获到的异常进行处理。
注意:try与catch是配合使用的
代码示例1:

//由该方法的调用者来处理(throws)。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo1 {
    public static void main(String[] args) throws ParseException {
        String s="2023.08.08";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
        Date date= sdf.parse(s);
        System.out.println(date);
    }
}

代码示例2:

//在方法中使用try-catch的语句块来处理异常。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo1 {
    public static void main(String[] args) {
        String s="2023.08.08";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
        Date date= null;
        try {
            date = sdf.parse(s);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        System.out.println(date);
    }
}

2、如何获取异常信息:

Throwable类中定义了一些查看方法:

  • public String getMessage():获取异常的描述信息,原因(提示给用户的时候,就提示错误原因。)
  • public String toString():获取异常的类型和异常描述信息。
  • public void printStackTrace():打印异常的跟踪栈信息并输出到控制台。

示例代码:

public class Demo {
    public static void main(String[] args) {
        try {
            Student s=null;
            if(s==null) {
                throw new NullPointerException("出现空指针异常了,请检查对象是否为null");
            }
        } catch (NullPointerException e) {
            //public String getMessage()`:获取异常的描述信息,原因(提示给用户的时候,就提示错误原因。)
            //public String toString()`:获取异常的类型和异常描述信息。
            //public void printStackTrace()`:打印异常的跟踪栈信息并输出到控制台。
            System.err.println(e.getMessage());
            System.out.println(e.toString());
            e.printStackTrace();
        }
    }
}
//Student 为我创建的一个JavaBean类

在这里插入图片描述

3、catch是未雨绸缪

为何这样说,那是因为catcch的目的是让程序执行下去,try里面的内容不一定出现异常,而catch是当try里面的内容出现异常的一层保险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我头像真的只是只猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值