目录
认识异常
自定义异常
认识异常
1.异常是什么?
2.异常的代表是谁?分为几类?
Error :代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题, s u n 公司会把这些问题封装成 Error 对象给出来,说白了, Error 是给 s u n 公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。
Exception :叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用 Exception 以及它的孩子来封装程序出现的问题。
.运行时异常: RuntimeException 及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)
.编译时异常:编译阶段就会出现错误提醒的。(如:日期解析异常)
3.异常代码层面的处理有几种方式?
package com.xinbao.d3_exception;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Exception {public static void main(String[] args) throws ParseException {
// try {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d = sdf.parse("2028-11-11 10:24");System.out.println(d);
// } catch (ParseException e) {
// e.printStackTrace();
// }}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=61424:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.Exception
Exception in thread "main" java.text.ParseException: Unparseable date: "2028-11-11 10:24"at java.base/java.text.DateFormat.parse(DateFormat.java:399)at com.xinbao.d3_exception.Exception.main(Exception.java:11)进程已结束,退出代码为 1
自定义异常
. Java 无法为这个世界上全部的问题都提供异常类来代表,如果企业自己的某种问题,想通过异常来表示,以便用异常来管理该问题,那就需要自己来定义异常类了。
异常有什么作用?
1、异常是用来查寻系统 Bug 的关键参考信息!
2、异常可以作为方法内部的一种特殊返回值,以便诵知上层调用者底层的执行情况!
package com.xinbao.d3_exception;
//年龄非法运行时异常
public class AgeIllegalRuntimeException extends RuntimeException{//必须让这个类继承自RuntimeException,才能成为异常类//重写构造器public AgeIllegalRuntimeException() {}public AgeIllegalRuntimeException(String message) {super(message);}
}
package com.xinbao.d3_exception;public class ExceptionTest2 {public static void main(String[] args) {//需求:保存一个合法年龄try {saveAge(88);saveAge(188);System.out.println("底层执行成功!");} catch (java.lang.Exception e) {e.printStackTrace();System.out.println("底层出现bug");}}public static void saveAge(int age){if (age>0 && age<150){System.out.println("年龄保存成功" + age);}else {//用一个异常对象封装这个问题//throw 抛出这个异常对象throw new AgeIllegalRuntimeException("/age is illegal, yoyr age is " + age);}}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=61657:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.ExceptionTest2
年龄保存成功88
底层出现bug
com.xinbao.d3_exception.AgeIllegalRuntimeException: /age is illegal, yoyr age is 188at com.xinbao.d3_exception.ExceptionTest2.saveAge(ExceptionTest2.java:22)at com.xinbao.d3_exception.ExceptionTest2.main(ExceptionTest2.java:8)进程已结束,退出代码为 0
编译时异常
package com.xinbao.d3_exception;public class AgeIllegalException extends Exception {public AgeIllegalException() {}public AgeIllegalException(String message) {super(message);}
}
package com.xinbao.d3_exception;public class ExceptionTest2 {public static void main(String[] args) {//需求:保存一个合法年龄try {
// saveAge(88);
// saveAge(188);saveAge2(355);System.out.println("底层执行成功!");} catch (java.lang.Exception e) {e.printStackTrace();System.out.println("底层出现bug");}}public static void saveAge(int age){if (age>0 && age<150){System.out.println("年龄保存成功" + age);}else {//用一个异常对象封装这个问题//throw 抛出这个异常对象throw new AgeIllegalRuntimeException("/age is illegal, yoyr age is " + age);}}public static void saveAge2(int age) throws AgeIllegalException{if (age>0 && age<150){System.out.println("年龄保存成功" + age);}else {//用一个异常对象封装这个问题//throw 抛出这个异常对象//throws 用在方法上 抛出方法内部的异常throw new AgeIllegalException("/age is illegal, yoyr age is " + age);}}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=61734:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.ExceptionTest2
com.xinbao.d3_exception.AgeIllegalException: /age is illegal, yoyr age is 355at com.xinbao.d3_exception.ExceptionTest2.saveAge2(ExceptionTest2.java:34)at com.xinbao.d3_exception.ExceptionTest2.main(ExceptionTest2.java:9)
底层出现bug进程已结束,退出代码为 0
异常的常见处理方法
捕获异常,记录异常并相应合适的信息给用户
package com.xinbao.d3_exception;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Exceptiontest3 {public static void main(String[] args) {
// try {
// test1();
// } catch (ParseException e) {
//
// e.printStackTrace();//打印出这个异常对象的信息,记录下来
// System.out.println("日期异常");
// } catch (FileNotFoundException e) {
// System.out.println("文件读取异常");
// e.printStackTrace();
// }try {test1();} catch (Exception e) {System.out.println("您当前操作有问题~");e.printStackTrace();}}//public static void test1() throws ParseException, FileNotFoundException {public static void test1() throws Exception {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");Date d = sdf.parse("2023-10-27 21:59");//如果有异常,直接抛出异常,不会再往下执行System.out.println(d);test2();}//public static void test2() throws FileNotFoundException {public static void test2() throws Exception {//读取文件InputStream is = new FileInputStream("E:\\社会实践\\社会实践报告(1).docx");}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=35733:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.Exceptiontest3
Fri Oct 27 21:59:00 CST 2023进程已结束,退出代码为 0
捕获异常,尝试重新修复
package com.xinbao.d3_exception;import java.util.Scanner;public class ExceptionTest4 {public static void main(String[] args) {//需求:调用一个方法,让用户输入一个合适的价格返回为止//重新修复while (true) {try {getMoney();break;} catch (Exception e) {//e.printStackTrace();}}}public static double getMoney(){Scanner sc = new Scanner(System.in);System.out.println("put in money:");while (true) {double money = sc.nextDouble();if (money >= 0){return money;}else {System.out.println("input again:");}}}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=35800:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\api-app3-3 com.xinbao.d3_exception.ExceptionTest4
put in money:
-89
input again:
joaj
put in money:
vnmio
put in money:
24123进程已结束,退出代码为 0