Java基础学习(七)

news/2025/1/12 18:59:57/文章来源:https://www.cnblogs.com/victoria6013/p/18667172

Java基础学习(七):异常机制

目录
  • Java基础学习(七):异常机制
    • 概念
    • 简单分类
    • 异常体系结构
    • 异常处理机制
    • 自定义异常

本文为个人学习记录,内容学习自 狂神说Java


概念

异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等

异常发生在程序运行期间,它影响了正常的程序执行流程


简单分类

异常 vs 错误

  • 异常(Exception)

    • 异常是开发者可以在程序中进行处理的(可以通过编写异常处理语句,在出现异常时进行处理以恢复程序的正常运行)

    • 检查性异常:在编译时由编译器强制检查的异常,开发者必须处理这些异常才能编译通过

    • 运行时异常:在编译时可以被忽略的异常,程序运行时才会出现

  • 错误(Error)

    • 错误是开发者无法在程序中进行处理的(错误发生时就无力回天了,只能避免错误的发生)
    • 当出现错误时,JVM 一般会直接终止线程

异常体系结构

  • Java 把异常当作对象来处理,并定义了一个基类 Java.lang.Throwable 作为所有异常的超类(即最顶层的类)

  • 在 Java API 中已经定义了许多异常类,这些异常类分成两大类 —— 错误和异常

  • 下图给出了一些常见错误Error和异常Exception,仅表示大体结构,例如 RuntimeException 和 ArrayIndexOutOfBoundsException 中间还省略了一些子/父类

    图7-1


异常处理机制

  • 抛出异常

    int a = 1;
    int b = 0;
    System.out.println(a/b);							// 由于0不能作为除数,程序会抛出异常
    =========================================================================================================
    输出结果:
    Exception in thread "main" java.lang.ArithmeticException: / by zero
    
  • 捕获异常

    可以通过 try-catch 语句捕获异常,从而使程序在有异常的情况下继续执行

    int a = 1;
    int b = 0;
    try {System.out.println(a/b);						// 将可能抛出异常的语句放入try修饰的代码块中
    }catch (ArithmeticException e){						// 指明想捕获的异常类型System.out.println("程序出现异常才会执行");			// 如果捕获到了指定异常会执行的语句,通常是处理语句
    }finally {											// finally代码块是可选项,无论是否捕获到异常都会执行System.out.println("无论如何都会执行");
    }
    System.out.println("继续执行");							// 就算存在异常,程序也会继续执行下去
    

    几点补充:

    1. 想捕获的异常类型也可以是具体异常类的父类,例如写 catch (Throwable e) 时能够捕获到其下所有的错误和异常
    2. catch 语句可以存在多个,类似于 else if 语句,从上往下执行当捕获到异常后就不会执行剩余的 catch 语句了
    3. 如果在 try 语句块内捕获到了指定异常,那么 try 语句块中的所有内容都不会被执行,就算是能正常执行的语句也不会被执行
  • 主动抛出异常

    注意:主动抛出异常后,剩余代码将不会继续执行,除非使用 try-catch 语句捕获异常(和程序自动抛出的异常同理)

    • 方法内抛出异常(使用 throw 关键字)

      throw new ArithmeticException();				// 主动抛出一个算术异常
      
    • 方法上抛出异常(使用 throws 关键字)

      下面这个例子中,其实不在方法上抛出异常也能在 main 方法中捕获到异常,方法上抛出异常的用法主要是在自定义异常中

      public static void main(String[] args) {int a = 1;int b = 0;try {test(a, b);} catch (ArithmeticException e) {System.out.println("");}
      }
      public static void test(int a, int b) throws ArithmeticException{		// 使用throws关键字指定异常类型System.out.println(a/b);
      }
      

自定义异常

  • 使用 Java 内置的异常类可以描述编程时出现的大部分异常情况
  • 用户自定义异常类,只需继承 Exception 类即可
  • 自定义异常类的步骤:
    1. 创建自定义异常类
    2. 在方法中通过 throw 关键字抛出异常对象
    3. 如果在当前抛出异常的方法中处理异常,可以使用 try-catch 语句捕获并处理,否则在方法的声明处通过 throws 关键字指明要抛出给方法调用者的异常类,交由方法调用者处理异常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/868294.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

24. 基于项的控件

一、基于项的控件PySide6 有专门的显示数据的控件和存储数据的模型,可以显示和存储不同形式的数据。显示数据的控件分为两类,一类是基于 项(item)的控件,另一类是基于 模型(model)的控件,基于项的控件是基于模型的控件的简便类。基于项的控件把读取到的数据存储到项中,…

杂题选记

杂题选记在网上天天划水刷面经,见到 teaser 就记下来。我的想法是,把 8L 倒入 3L,把 3L 倒入 5L,把 8L 倒入 3L,把 3L 倒入 5L,这时候三个瓶子分别有 1L(8L) 2L(3L) 5L(5L) 括号里面表示瓶子最开始的容量。这时候把 1L 水倒掉,把容积为 8L 的瓶子里面的 2L 水倒到 容积为…

pytorch算子调用过程:以rand算子为例

通过pytorch的torch.profiler带调用栈采集运行过程可以看到如下信息,通过chrome://tracing查看,图上每个小条条表示一个traceEvent, json中的信息如下图所示,其中cat表示traceEvent的类型,有cpu_op,python_function等,前者表示torch的cpp代码中定义的操作,后者表示pytorc…

Wordpress更换域名后,网站显示框架和加载问题解决

最近建立了一个站点,由于先使用ip进行网站搭建,经过一段时间备案完成后,需要转成域名。直接在Wordpress后台操作后,直接导致网页框架显示异常,排版错乱,大概就是主题的框架无法加载导致的。 搞了很久,包括恢复数据库和重新建站都是这样,最终发现是伪静态的问题。 我是使…

【Weblogic T3协议】反序列化漏洞分析(上)

免责声明 此文章中所涉及的技术、思路和工具仅供网络安全学习为目的,不得以盈利为目的或非法利用,否则后果自行承担!一、前言 在初入安全的时候,就听说过weblogic的大名,当然听说的并不是weblogic如何如何好用,而是因为其漏洞出现频率实在是有点高...于是乎,便抱着学习的…

关于安卓edge无法播放Wordpress上传的mp4视频问题

使用默认插件上传后,电脑端可以播放视频,其他手机浏览器均可播放视频,但是安卓edge无法加载视频。 大概是如下图样子:经查发现电脑打开页面会显示站点部分不安全的提示,说明edge端做了一些阻挡处理,导致视频无法播放。找了一些资料后,发现可以自行修改加载视频的代码框架…

【bt下载软件qBittorrent-增强版】下载链接

原作者github项目地址:https://github.com/c0re100/qBittorrent-Enhanced-Edition 找到当前的最新版本根据自身需要选择下载版本,这里选的是windows版本

鸟哥的Linux私房菜 基础学习篇 第四版PDF、EPUB免费下载

Linux入门书升级版,适用Linux系统应用和开发及运维的人员,涵盖linux内核,命令行,嵌入式,基于CentOS,7.x适读人群 :Linux初学者 适合Linux管理员作为参考手册 Linux入门书升级版,适用Linux系统应用和开发及运维的人员,涵盖linux内核,命令行,嵌入式,基于CentOS,7.x电…

领域驱动设计:软件核心复杂性应对之道(修订版)PDF、EPUB免费下载

本书是领域驱动设计方面的经典之作,修订版更是对之前出版的中文版进行了全面的修订和完善。全书围绕着设计和开发实践,结合若干真实的项目案例,向读者阐述如何在真实的软件开发中应用领域驱动设计。书中给出了领域驱动设计的系统化方法,并将人们普遍接受的一些实践综合到一…

JAVA之集合

1、集合集合可以存储引用数据类型; 集合不可以存储基本数据类型,若要存储,需封装成包装类;2、集合和数组的对比长度【数组长度固定,集合长度可变】 存储类型【数组可以存基本数据类型和引用数据类型,集合可以存引用数据类型,若存储基本数据类型,需封装成包装类】3、Arr…

[题目记录]P9999 [Ynoi2000] tmostnrq

当前自己写过了码量第二大的题目 , 不管怎么说对拍非常重要 .P9999 [Ynoi2000] tmostnrq 题意 给定 \(n\) 个顶点的树,顶点编号为 \(1,\dots,n\),给定长度 \(n_0\) 的序列 \(a_1,\dots,a_{n_0}\),共 \(m\) 次查询,每次查询给定 \(l,r,x\),问树的顶点 \(x\),依次向 \(a_l,…

多光谱火焰智能监测摄像机

多光谱火焰智能监测摄像机将在未来继续发展。未来的摄像机可能会更加智能化,具备更强的自主识别和决策能力,进一步提升火灾监测的灵敏度和准确性。此外,随着物联网的发展,这些摄像机还有望与其他设备和系统实现更深入的数据共享和集成应用,为整个安全监控体系增添新的可能…