• 【零基础学Java】第十七篇 异常


    📄个人简介
    🔔作者简介:大家好,我是小学生!!🙈大三学生一枚,目前正在自学Java,如果大家觉得我写的还不错的话,希望大家给我点赞👍+收藏⭐+评论📢,有什么写的不对的地方还请大家多多指教🙏,共同进步。
    📝个人主页:小学生!!
    📖系列专栏
    🌕阶段一:Java基础编程
    💦目前已原创17篇

    🌕阶段二:数据结构与算法
    🌕阶段三:操作系统
    🌕阶段四:计算机网络


    🔥本文主要介绍了异常的基本概念,异常的类型,以及异常处理的方式,try-catch,throws,throws的用法


    1.基本概念

    Java语言中,将程序中的不正常情况称为“异常”。(语法错误和逻辑错误不是异常)

    2.执行所发生的异常事件可分为两大类

    1.Error(错误):Java虚拟机无法解决的严重问题。如:StackOverflowError和OutOfMemoryError。

    2.Exception:其他因编程错误或一些偶然的外在因素导致的一般性问题,可以用针对性代码进行处理。例如空指针访问,读取不存在的文件。Exception分为两大类:运行时异常和编译时异常。

    3.异常体系图

    在这里插入图片描述

    小结:

    1.运行时异常,编译器检查不出来,java.lang.RuntimeException类及其子类都是运行时异常。

    2.运行时异常很普遍,可以不做处理,但编译时异常是必须要处理的。

    4.try-catch

    快捷键:Ctrl+Alt+t

    try{
    //代码/可能有异常
    }catch(Exception e) {
        //捕获到异常
        //1.当异常发生时系统将异常封装成Exception对象e,传递给catch
        //2.得到异常对象后,程序员,自己处理
        //3.注意,如果没有发生异常catch代码块不执行
    }finally{
    //1.不管try代码块是否有异常发生,始终要执行finally
    //2.所以,通常将释放资源的代码,放在finally
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    5.throws基本介绍

    1.如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。

    2.在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

    3.throws异常处理注意事项和使用细节

    1)对于编译异常,程序中必须处理,比如try-catch或者throws
    2)对于运行时异常,程序中如果没有处理,默认就是throws的方式处理
    3)子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型
    4)在throws 过程中,如果有方法 try-catch,就相当于处理异常,就可以不必throws

    public class ThrowsDetail {
        public static void main(String[] args) {
            f2();
        }
    
        public static void f2() /*throws ArithmeticException*/ {
            //1.对于编译异常,程序中必须处理,比如 try-catch 或者 throws
            //2.对于运行时异常,程序中如果没有处理,默认就是throws的方式处理
    
            int n1 = 10;
            int n2 = 0;
            double res = n1 / n2;
        }
    
        public static void f1() throws FileNotFoundException {
            //1. 因为f3() 方法抛出的是一个编译异常
            //2. 即这时,就要f1() 必须处理这个编译异常
            //3. 在f1() 中,要么 try-catch-finally ,或者继续throws 这个编译异常
            f3(); // 抛出异常
        }
        public static void f3() throws FileNotFoundException {
            FileInputStream fis = new FileInputStream("d://aa.txt");
        }
    
        public static void f4() {
            //1. 在f4()中调用方法f5() 是OK
            //2. 原因是f5() 抛出的是运行异常
            //3. 而java中,并不要求程序员显示处理,因为有默认处理机制
            f5();
        }
        public static void f5() throws ArithmeticException {
    
        }
    }
    
    class Father { //父类
        public void method() throws RuntimeException {
        }
    }
    
    class Son extends Father {//子类
        //3. 子类重写父类的方法时,对抛出异常的规定:子类重写的方法,
        //   所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常类型的子类型
        //4. 在throws 过程中,如果有方法 try-catch , 就相当于处理异常,就可以不必throws
        @Override
        public void method() throws ArithmeticException {
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    6.throws与throw的区别

    意义位置后面跟
    throws异常处理的一种方式方法声明处异常类型
    throw产生异常对象的关键字方法体内异常对象
    public class ThrowVsThrows {
        public static void main(String[] args) {
            try {
                ReturnExceptionDemo.methodA();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
          
            try {
                ReturnExceptionDemo.f3();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
    
    class ReturnExceptionDemo {
        static void methodA() {
            try {
                System.out.println("进入方法A");
                throw new RuntimeException("制造异常");
            } finally {
                System.out.println("用A方法的finally");
            }
        }
       static void f3() throws FileNotFoundException {
            FileInputStream fis = new FileInputStream("d://aa.txt");
        }
        
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    GMM基础
    [附源码]java毕业设计高校教师教学助手系统的设计与实现
    LeetCode50天刷题计划(Day 12—— 电话号码的字母组合(8.40-10.40)
    PyTorch模型定义 | 模型容器 | 模型块 | 修改模型 | 模型读取与保存
    【愚公系列】2022年09月 微信小程序-WebGL动画的使用
    嵌入式开发:硬件在环测试
    elasticsearch 官方优化建议
    Oracle-常用权限-完整版
    计算机视觉:基于Numpy的图像处理技术(一):灰度变换、直方图均衡化
    深入Linux下的GCC编译器:从入门到精通
  • 原文地址:https://blog.csdn.net/m0_54024106/article/details/126290300