Java Se—异常
目录
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、异常两种处理方式

