目录

1.认识异常 / 什么是异常

1.1、Java的异常体系

1.2、异常的基本处理

2、异常的作用

3、自定义异常

4、异常的处理方案

5、异常两种处理方式


1.认识异常 / 什么是异常

        异常(Exception) 指的是程序在运行过程中发生的、打断正常指令执行流程的非正常事件或错误情况。说白了异常代表程序出先了问题。(比如下标越界)。

1.1、Java的异常体系

1.2、异常的基本处理

代码:

ExceptionDemo1 类

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ExceptionDemo1 {
    public static void main(String[] args) throws ParseException {  //这里可以抛出多个异常,用逗号隔开
        //目标:认识异常的体系,搞清楚异常的基本作用
        show();
        try {
            show1();
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
//        show1();



    }
    //定义一个方法认识运行时异常
    public static void show(){
        //运行时异场特点:编译不报错,运行时异常,继承自 RuntimeException
        //案例1:数组越界
//        int[] arr = {10,20,30};
//        System.out.println(arr[3]);  //ArrayIndexOutOfBoundsException

        //案例2:
        //分母不能为0
//        System.out.println(10/0); //ArithmeticException

        //案例3:
        //空指针错误
//        String str = null;
//        System.out.println(str.charAt(0));//NullPointerException
    }

    //定义一个方法认识编译异常
    public static void show1() throws ParseException, FileNotFoundException {  //抛出多个异常,用逗号隔开。可以直接抛出Exception,抛出所有异常
        //编译异常:编译阶段报错,编译不通过,运行时异常


        String str = "2025-10-31 10:10:10";
        //把字符串时间解析成Java中的日期对象。
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse(str); //编译时异常:提醒程序员这里的程序很容易出错,请你注意!
        System.out.println(date);

        //在d盘读一个图片
        String path = "d:\\1.jpg";
        FileInputStream fis = new FileInputStream(path);

    }
}
/*
运行时异常:
 */

2、异常的作用

作用1:异常是用来定位程序bug的关键信息。

作用2:可以作为内部的一种特殊返回值以便通知上层调用者,方法的执行问题。

ExceptionDemo2 类

public class ExceptionDemo2 {
    public static void main(String[] args) {
        //目标:搞清楚异常的作用
        System.out.println("程序开始执行~~");
        try {
            System.out.println(div(10,0));
        } catch (Exception e) {
            e.printStackTrace();  //输出异常信息
        }
       //System.out.println(div(10,0));
        System.out.println("程序结束执行~~");
    }
    public static int div(int a,int b) throws Exception {
        if(b== 0){
            System.out.println("除数不能为0,你输入的参数有误~~");
            //这时候就需要结束词方法
            //return ; //如果这里直接return ;会报错。
            //我们可以返回一个异常给上层的调用者,返回的异常还能告知上层是执行成功了还是失败了
            throw new Exception("除数不能为0,你输入的参数有误~~"); //这里用throw抛出异常,
        }
        return a/b;
    }
}
/*
程序开始执行~~
除数不能为0,你输入的参数有误~~
程序结束执行~~
java.lang.Exception: 除数不能为0,你输入的参数有误~~
	at demo1_exception.ExceptionDemo2.div(ExceptionDemo2.java:21)
	at demo1_exception.ExceptionDemo2.main(ExceptionDemo2.java:8)
 */

3、自定义异常

 Java无法为这个世界上全部的问题都提供异常类来代表,如果企业自己的某种问题,想通过异常类表示,以便于用异常来管理该问题,那就需要自己来定义异常类。

自定义编译异常.

代码:定义一个异常类

AgeException类,年龄异常类

/**
 * 自定义的编译时异常
 * 1.继承Exception类(父类)
 * 2、重写Exception类中的构造器
 * 3.哪里需要这个异常返回、哪里就抛这个异常
 */
public class AgeException extends  Exception{ //继承了Exception类
    public AgeException() {
    }

    public AgeException(String  message) {
        super(message); //调用父类的带参构造器
    }
}

ExceptionDemo3类:测试异常类

public class ExceptionDemo3 {
    public static void main(String[] args) {
        //目标:认识定义自定义异常。
        try {
            checkAge(130);
        }catch (AgeException e){
           e.printStackTrace(); //输出异常信息
        }
    }
    //需求:我们公司的系统只要受到了年龄小于1岁或者大于120岁就是一个异常。
    public static void checkAge(int age) throws AgeException {
        if(age<1 || age>120){
            //自定义异常类
            throw new AgeException("年龄范围在1~120之间");
        }else{
            System.out.println("年龄范围正确");
            System.out.println("年龄:"+age);
        }
    }
}
/*
demo1_exception.AgeException: 年龄范围在1~120之间
	at demo1_exception.ExceptionDemo3.checkAge(ExceptionDemo3.java:16)
	at demo1_exception.ExceptionDemo3.main(ExceptionDemo3.java:7)
 */

运行时异常

RuntimeException类

/**
 * 自定义的运行时异常
 * 1.继承RuntimeException类(父类)
 * 2、重写RuntimeException类中的构造器
 * 3.哪里需要这个异常返回、哪里就抛这个异常
 */
public class AgeRuntimeException extends  RuntimeException{ //继承了Exception类
    public AgeRuntimeException(String s) {
        super(s);
    }
    public AgeRuntimeException() {}
}

RuntimeExceptionDemo4

4、异常的处理方案

方案一:代码

ExceptionDemo5类方案一的演示

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

public class ExceptionDemo5 {
    public static void main(String[] args) {
        //目标:掌握异常的处理方案1:底层异常都抛出去给最外层调用者,最外层捕获异常,记录异常,响应合适信息给用户观看
        System.out.println("程序开始执行~~");
        try {
            show1();
            System.out.println("程序正常结束~~");
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("程序出现异常,请稍后再试~~");
        }
        System.out.println("程序结束执行~~");
    }
    public static void show1() throws Exception{  //抛出多个异常,用逗号隔开。可以直接抛出Exception,抛出所有异常
        //编译异常:编译阶段报错,编译不通过,运行时异常


        String str = "2025-10-31 10:10:10";
        //把字符串时间解析成Java中的日期对象。
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM-dd HH:mm:ss");
        Date date = sdf.parse(str); //编译时异常:提醒程序员这里的程序很容易出错,请你注意!
        System.out.println(date);

        //在d盘读一个图片
        String path = "d:\\1.jpg";
        FileInputStream fis = new FileInputStream(path);

    }
}
/*
程序开始执行~~
java.text.ParseException: Unparseable date: "2025-10-31 10:10:10"
	at java.text.DateFormat.parse(DateFormat.java:366)
	at demo1_exception.ExceptionDemo5.show1(ExceptionDemo5.java:27)
	at demo1_exception.ExceptionDemo5.main(ExceptionDemo5.java:12)
程序出现异常,请稍后再试~~
程序结束执行~~
 */

方案二代码

ExceptionDemo6 类

import java.util.Scanner;

public class ExceptionDemo6 {
    public static void main(String[] args) {
        //目标:方案二掌握异常的处理方案二:捕获异常对象,尝试重新修复
        //接收用户输入的数字
        System.out.println("程序开始执行~~");
        while (true) {
            try {
                double price = userInputPrice();
                System.out.println("用户输入的数字是:"+price);
                break;
            } catch (Exception e) {
                System.out.println("你输入的信息有误请程序输入!");
            }
        }
        System.out.println("程序结束执行~~");

    }
    public static double userInputPrice(){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入商品价格:");
        double price = sc.nextDouble();
        return price;

    }
}

5、异常两种处理方式

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐