• 异常---


    目录

    认识异常

    自定义异常


    认识异常

    1.异常是什么?
    2.异常的代表是谁?分为几类?
    Error :代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题, s u n 公司会把这些问题封装成 Error 对象给出来,说白了, Error 是给 s u n 公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。
     Exception :叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用 Exception 以及它的孩子来封装程序出现的问题。
    .运行时异常: RuntimeException 及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)

    .编译时异常:编译阶段就会出现错误提醒的。(如:日期解析异常)
    3.异常代码层面的处理有几种方式?

    1. package com.xinbao.d3_exception;
    2. import java.text.ParseException;
    3. import java.text.SimpleDateFormat;
    4. import java.util.Date;
    5. public class Exception {
    6. public static void main(String[] args) throws ParseException {
    7. // try {
    8. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    9. Date d = sdf.parse("2028-11-11 10:24");
    10. System.out.println(d);
    11. // } catch (ParseException e) {
    12. // e.printStackTrace();
    13. // }
    14. }
    15. }

    1. 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
    2. Exception in thread "main" java.text.ParseException: Unparseable date: "2028-11-11 10:24"
    3. at java.base/java.text.DateFormat.parse(DateFormat.java:399)
    4. at com.xinbao.d3_exception.Exception.main(Exception.java:11)
    5. 进程已结束,退出代码为 1
    自定义异常

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

    异常有什么作用?
    1、异常是用来查寻系统 Bug 的关键参考信息!

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

    1. package com.xinbao.d3_exception;
    2. //年龄非法运行时异常
    3. public class AgeIllegalRuntimeException extends RuntimeException{
    4. //必须让这个类继承自RuntimeException,才能成为异常类
    5. //重写构造器
    6. public AgeIllegalRuntimeException() {
    7. }
    8. public AgeIllegalRuntimeException(String message) {
    9. super(message);
    10. }
    11. }
    1. package com.xinbao.d3_exception;
    2. public class ExceptionTest2 {
    3. public static void main(String[] args) {
    4. //需求:保存一个合法年龄
    5. try {
    6. saveAge(88);
    7. saveAge(188);
    8. System.out.println("底层执行成功!");
    9. } catch (java.lang.Exception e) {
    10. e.printStackTrace();
    11. System.out.println("底层出现bug");
    12. }
    13. }
    14. public static void saveAge(int age){
    15. if (age>0 && age<150){
    16. System.out.println("年龄保存成功" + age);
    17. }else {
    18. //用一个异常对象封装这个问题
    19. //throw 抛出这个异常对象
    20. throw new AgeIllegalRuntimeException("/age is illegal, yoyr age is " + age);
    21. }
    22. }
    23. }
    1. 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
    2. 年龄保存成功88
    3. 底层出现bug
    4. com.xinbao.d3_exception.AgeIllegalRuntimeException: /age is illegal, yoyr age is 188
    5. at com.xinbao.d3_exception.ExceptionTest2.saveAge(ExceptionTest2.java:22)
    6. at com.xinbao.d3_exception.ExceptionTest2.main(ExceptionTest2.java:8)
    7. 进程已结束,退出代码为 0

    编译时异常

    1. package com.xinbao.d3_exception;
    2. public class AgeIllegalException extends Exception {
    3. public AgeIllegalException() {
    4. }
    5. public AgeIllegalException(String message) {
    6. super(message);
    7. }
    8. }
    1. package com.xinbao.d3_exception;
    2. public class ExceptionTest2 {
    3. public static void main(String[] args) {
    4. //需求:保存一个合法年龄
    5. try {
    6. // saveAge(88);
    7. // saveAge(188);
    8. saveAge2(355);
    9. System.out.println("底层执行成功!");
    10. } catch (java.lang.Exception e) {
    11. e.printStackTrace();
    12. System.out.println("底层出现bug");
    13. }
    14. }
    15. public static void saveAge(int age){
    16. if (age>0 && age<150){
    17. System.out.println("年龄保存成功" + age);
    18. }else {
    19. //用一个异常对象封装这个问题
    20. //throw 抛出这个异常对象
    21. throw new AgeIllegalRuntimeException("/age is illegal, yoyr age is " + age);
    22. }
    23. }
    24. public static void saveAge2(int age) throws AgeIllegalException{
    25. if (age>0 && age<150){
    26. System.out.println("年龄保存成功" + age);
    27. }else {
    28. //用一个异常对象封装这个问题
    29. //throw 抛出这个异常对象
    30. //throws 用在方法上 抛出方法内部的异常
    31. throw new AgeIllegalException("/age is illegal, yoyr age is " + age);
    32. }
    33. }
    34. }
    1. 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
    2. com.xinbao.d3_exception.AgeIllegalException: /age is illegal, yoyr age is 355
    3. at com.xinbao.d3_exception.ExceptionTest2.saveAge2(ExceptionTest2.java:34)
    4. at com.xinbao.d3_exception.ExceptionTest2.main(ExceptionTest2.java:9)
    5. 底层出现bug
    6. 进程已结束,退出代码为 0
    异常的常见处理方法

    捕获异常,记录异常并相应合适的信息给用户

    1. package com.xinbao.d3_exception;
    2. import java.io.FileInputStream;
    3. import java.io.FileNotFoundException;
    4. import java.io.InputStream;
    5. import java.text.ParseException;
    6. import java.text.SimpleDateFormat;
    7. import java.util.Date;
    8. public class Exceptiontest3 {
    9. public static void main(String[] args) {
    10. // try {
    11. // test1();
    12. // } catch (ParseException e) {
    13. //
    14. // e.printStackTrace();//打印出这个异常对象的信息,记录下来
    15. // System.out.println("日期异常");
    16. // } catch (FileNotFoundException e) {
    17. // System.out.println("文件读取异常");
    18. // e.printStackTrace();
    19. // }
    20. try {
    21. test1();
    22. } catch (Exception e) {
    23. System.out.println("您当前操作有问题~");
    24. e.printStackTrace();
    25. }
    26. }
    27. //public static void test1() throws ParseException, FileNotFoundException {
    28. public static void test1() throws Exception {
    29. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    30. Date d = sdf.parse("2023-10-27 21:59");//如果有异常,直接抛出异常,不会再往下执行
    31. System.out.println(d);
    32. test2();
    33. }
    34. //public static void test2() throws FileNotFoundException {
    35. public static void test2() throws Exception {
    36. //读取文件
    37. InputStream is = new FileInputStream("E:\\社会实践\\社会实践报告(1).docx");
    38. }
    39. }
    1. 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
    2. Fri Oct 27 21:59:00 CST 2023
    3. 进程已结束,退出代码为 0

    捕获异常,尝试重新修复

    1. package com.xinbao.d3_exception;
    2. import java.util.Scanner;
    3. public class ExceptionTest4 {
    4. public static void main(String[] args) {
    5. //需求:调用一个方法,让用户输入一个合适的价格返回为止
    6. //重新修复
    7. while (true) {
    8. try {
    9. getMoney();
    10. break;
    11. } catch (Exception e) {
    12. //e.printStackTrace();
    13. }
    14. }
    15. }
    16. public static double getMoney(){
    17. Scanner sc = new Scanner(System.in);
    18. System.out.println("put in money:");
    19. while (true) {
    20. double money = sc.nextDouble();
    21. if (money >= 0){
    22. return money;
    23. }else {
    24. System.out.println("input again:");
    25. }
    26. }
    27. }
    28. }
    1. 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
    2. put in money:
    3. -89
    4. input again:
    5. joaj
    6. put in money:
    7. vnmio
    8. put in money:
    9. 24123
    10. 进程已结束,退出代码为 0

     

  • 相关阅读:
    一文学会JavaScript
    【Loadrunner】学习loadrunner——性能测试基础篇(一)
    劳动节福利~ 我给大家写了个博客园快速发文工具
    什么是Web组件(Web Components)?它们的主要部分有哪些?
    matlab 神经网络 ANN 分类
    SpringMVC 程序开发
    『Halcon与C#混合编程』009_利用PictureBox实现窗体
    【gazebo要素9】 SDF制作Model文件(2)
    docker-elasticsearch集群
    【案例实践】HEC-RAS 1D/2D水动力与水环境模拟、HEC-RAS与HEC-FDA耦合、桥梁分析、泄洪道设定
  • 原文地址:https://blog.csdn.net/2301_77045416/article/details/134066327