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

更多推荐
所有评论(0)