• 【Java基础】异常概述、try-catch、throws方式处理异常及自定义异常


    目录

    一、异常的概述

    二、try-catch方式处理异常

    三、Throwable成员方法

    四、throws方式处理异常

    五、自定义异常


    一、异常的概述

            异常就是程序出现了不正常的情况。Java是一门面向对象的编程语言,因此,异常在Java语言中也是作为类的实例的形式出现的。当某一个方法中发生错误时,这个方法会创建一个对象,并把它传递给正在运行的系统。这个对象就是异常对象。通过异常处理机制,可以将非正常情况下的处理代码与程序

    ea20eae4da274aa0a4f300c7338491d5.png

    ● Error:严重问题,不需要处理

    ● Exception:称为异常类,它表示程序本身可以处理的问题

            RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码

            非RuntimeException:编译期就必须处理的,否则程序不能通过编译,就更不能正常运行了

    JVM默认处理异常的方式:如果程序出现了问题,我们没有任何处理,最终JVM会做默认的处理,处理方式有两个步骤:

    1、如异常的名称,错误原因及异常出现的位置等信息输出在了控制台。

    2、程序终止执行

    二、try-catch方式处理异常

    定义格式:

    1. try {
    2. 可能出现异常的代码;
    3. } catch(异常类名 变量名) {
    4. 异常的处理代码;
    5. }

    执行流程:

    1、程序从try里面的代码开始执行

    2、出现异常,就会跳转到对应的catch里面去执行

    3、执行完毕后,程序还可以继续往下执行

    示例代码:

    1. public class ExceptionDemo01 {
    2. public static void main(String[] args) {
    3. System.out.println("开始");
    4. method();
    5. System.out.println("结束");
    6. }
    7. public static void method() {
    8. try {
    9. int[] arr = {1, 2, 3};
    10. System.out.println(arr[3]);
    11. System.out.println("这里能够访问到吗");
    12. } catch (ArrayIndexOutOfBoundsException e) {
    13. // System.out.println("你访问的数组索引不存在,请回去修改为正确的索引");
    14. e.printStackTrace();
    15. }
    16. }
    17. }

    三、Throwable成员方法

    常用方法

    方法名说明
    public String getMessage()返回此throwable的详细消息字符串
    public String toString()返回此可抛出的简短描述
    public void printStackTrace()把异常的错误信息输出在控制台

    示例代码:

    1. public class ExceptionDemo02 {
    2. public static void main(String[] args) {
    3. System.out.println("开始");
    4. method();
    5. System.out.println("结束");
    6. }
    7. public static void method() {
    8. try {
    9. int[] arr = {1, 2, 3};
    10. System.out.println(arr[3]); //new ArrayIndexOutOfBoundsException();
    11. System.out.println("这里能够访问到吗");
    12. } catch (ArrayIndexOutOfBoundsException e) {
    13. //new ArrayIndexOutOfBoundsException();
    14. // e.printStackTrace();
    15. //public String getMessage():返回此 throwable 的详细消息字符串
    16. // System.out.println(e.getMessage());
    17. //Index 3 out of bounds for length 3
    18. //public String toString():返回此可抛出的简短描述
    19. // System.out.println(e.toString());
    20. //java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
    21. //public void printStackTrace():把异常的错误信息输出在控制台
    22. e.printStackTrace();
    23. // java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
    24. // at com.itheima_02.ExceptionDemo02.method(ExceptionDemo02.java:18)
    25. // at com.itheima_02.ExceptionDemo02.main(ExceptionDemo02.java:11)
    26. }
    27. }
    28. }

    编译时异常和运行时异常的区别:

    编译时异常

    都是Exception类及其子类

    必须显示处理,否则程序就会发生错误,无法通过编译

    运行时异常

    都是RuntimeException类及其子类

    无需显示处理,也可以和编译时异常一样处理

    四、throws方式处理异常

    定义格式:

    1. public void 方法() throws 异常类名 {
    2. }

    示例代码:

    1. public class ExceptionDemo {
    2. public static void main(String[] args) {
    3. System.out.println("开始");
    4. // method();
    5. try {
    6. method2();
    7. }catch (ParseException e) {
    8. e.printStackTrace();
    9. }
    10. System.out.println("结束");
    11. }
    12. //编译时异常
    13. public static void method2() throws ParseException {
    14. String s = "2048-08-09";
    15. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    16. Date d = sdf.parse(s);
    17. System.out.println(d);
    18. }
    19. //运行时异常
    20. public static void method() throws ArrayIndexOutOfBoundsException {
    21. int[] arr = {1, 2, 3};
    22. System.out.println(arr[3]);
    23. }
    24. }

    注意事项:

    ● 这个throws格式是跟在方法的括号后面的

    ● 编译时异常必须要进行处理,两种处理方案:try...catch...或者throws,如果采用throws这种方案,将来谁调用谁处理

    ● 运行时异常可以不处理,出现问题后,需要我们回来修改代码

    throws和throw的区别:

    throws

    用在方法声明后面,跟的是异常类名

    表示抛出异常,由该方法的调用者来处理

    表示出现异常的一种可能性,并不一定会发生这些异常

    throw

    用在方法体内,跟的是异常对象名

    表示抛出异常,由方法体内的语句处理

    执行throw一定抛出某种异常

    五、自定义异常

    Java中通常可以通过继承Exception类自定义异常。

    自定义异常类

    1. public class ScoreException extends Exception {
    2. public ScoreException() {}
    3. public ScoreException(String message) {
    4. super(message);
    5. }
    6. }

    老师类:

    1. public class Teacher {
    2. public void checkScore(int score) throws ScoreException {
    3. if(score<0 || score>100) {
    4. // throw new ScoreException();
    5. throw new ScoreException("你给的分数有误,分数应该在0-100之间");
    6. } else {
    7. System.out.println("成绩正常");
    8. }
    9. }
    10. }

    测试类:

    1. public class Demo {
    2. public static void main(String[] args) {
    3. Scanner sc = new Scanner(System.in);
    4. System.out.println("请输入分数:");
    5. int score = sc.nextInt();
    6. Teacher t = new Teacher();
    7. try {
    8. t.checkScore(score);
    9. } catch (ScoreException e) {
    10. e.printStackTrace();
    11. }
    12. }
    13. }

     

  • 相关阅读:
    本地部署modelscope-agent
    数据库课程设计大作业大盘点【建议在校生收藏】
    Opencv源码解析(2)算法
    消灭空指针,Java 8 给我们更好的解决方案
    有一个企微运营机器人同事是一种什么体验?
    FreeRTOS学习笔记(二)
    [附源码]java毕业设计个性化新闻推荐系统
    Java程序设计-韩建平-读书笔记
    [附源码]Python计算机毕业设计白果园网上水果超市
    【Leetcode刷题】搜索插入位置
  • 原文地址:https://blog.csdn.net/m0_61961937/article/details/126747786