Java基础---异常

news2024/11/28 6:54:30

目录

典型回答

什么是Throwable

Error和Exception的区别和联系

Java异常处理相关的几个关键字,以及简单用法

什么是自定义异常,如何使用自定义异常

Java异常体系结构

以下关于异常处理的代码有哪些问题


  • 典型回答

  • Java中的异常,主要可以分为两大类,即受检异常(checked exception)和 非受检异常(unchecked exception)
  • 对于受检异常来说,如果一个方法在声明的过程中证明了其要有受检异常抛出:

  • 那么,当在程序中调用他的时候,一定要对该异常进行处理(捕获或者向上抛出),否则是无法编译通过的
  • 这是一种强制规范
  • 这种异常在IO操作中比较多
  • 比如FileNotFoundException,当使用IO流处理一个文件的时候,有一种特殊情况,就是文件不存在,所以在文件处理的接口定义时他会显示抛出FileNotFoundException,目的就是告诉这个方法的调用者,我这个方法不保证一定可以成功,是有可能找不到对应的文件的,你要明确的对这种情况做特殊处理
  • 所以说,当我们希望我们的方法调用者,明确的处理一些特殊情况的时候,就应该使用受检异常
  • 对于非受检异常来说,一般是运行时异常,继承自RuntimeException
  • 在编写代码的时候,不需要显示的捕获,但是如果不捕获,在运行期如果发生异常就会中断程序的执行
  • 这种异常一般可以理解为是代码原因导致的
  • 比如发生空指针、数组越界等
  • 所以只要代码写的没问题,这些异常都是可以避免的
  • 也就不需要我们显示的进行处理
  • 试想一下,如果你要对所有可能发生空指针的地方做异常处理的话,那相当于你的所有代码都需要做这件事
  • 什么是Throwable

  • Throwable是java中最顶级的异常类,继承Object,实现了序列化接口
  • 有两个重要的子类:Exception和Error,二者都是 Java 异常处理的重要子类,各自都包含大量子类
  • Error和Exception的区别和联系

  • error表示系统级的错误,是java运行环境内部错误或者硬件问题,不能指望程序来处理这样的问题,除了退出运行外别无选择,它是Java虚拟机抛出的
  • 如OutOfMemoryError、StackOverflowError这两种常见的错误都是ERROR
  • exception表示程序需要捕捉、需要处理的异常,是由与程序设计的不完善而出现的问题,程序必须处理的问题
  • 分为RuntimeException和其他异常
  • 异常能被程序本身处理,错误是无法处理
  • Java异常处理相关的几个关键字,以及简单用法

  • throws、throw、try、catch、finally
  • 1-try用来指定一块预防所有异常的程序
  • 2-catch子句紧跟在try块后面,用来指定你想要捕获的异常的类型
  • 3-finally为确保一段代码不管发生什么异常状况都要被执行
  • 4-throw语句用来明确地抛出一个异常
  • 5-throws用来声明一个方法可能抛出的各种异常
  • 什么是自定义异常,如何使用自定义异常

  • 自定义异常就是开发人员自己定义的异常,一般通过继承Exception的子类的方式实现
  • 编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程
  • 这种用法在Web开发中也比较常见,一般可以用来自定义业务异常
  • 如余额不足、重复提交等
  • 这种自定义异常有业务含义,更容易让上层理解和处理
  • Java异常体系结构

  • Java中所有的异常都来自顶级父类Throwable
  • Throwable继承自Object,实现了序列化接口
  • Throwable下面有两个子类Exception和Error
  • 二者都是Java异常处理的重要子类,各自都包含大量子类

  • 以下关于异常处理的代码有哪些问题

  • 1-#start 方法不会发生IOException,所以不需要throw
  • 2-RuntimeExcption不需要显式的throw
  • 3-catch的时候,要先从子类开始catch,代码中catch的顺序不对
  • 4-没有关闭流
  • 5-return之前的finally block是会被执行的
  • 上述代码,如何优化

  • try-with-resource的原理
  • javac使用了语法糖进行优化

  • Java中异常的处理方式有哪几种?一般如何选择
  • 异常的处理方式有两种
  • 1-自己处理
  • 2-向上抛,交给调用者处理
  • 异常,千万不能捕获了之后什么也不做
  • 或者只是使用e.printStacktrace
  • 具体的处理方式的选择其实原则比较简明:自己明确的知道如何处理的,就要处理掉;不知道如何处理的,就交给调用者处理
  • finally中代码一定会执行吗
  • 通常情况下,finally的代码一定会被执行
  • 但是这是有前提的:
    • 1-对应 try 语句块被执行
    • 2-程序正常运行
  • 如果没有符合这两个条件的话,finally中的代码就无法被执行
  • 如发生以下情况,都会导致finally不会执行:
  • 1-System.exit()方法被执行
  • 2-Runtime.getRuntime().halt()方法被执行
  • 3-try或者catch中有死循环
  • 4-操作系统强制杀掉了JVM进程,如执行了kill -9
  • 5-其他原因导致的虚拟机崩溃了
  • 6-虚拟机所运行的环境挂了,如计算机电源断了
  • 7-finally块即将被后台线程(deamon)执行前,其他的所有非后台线程都已执行完了

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣 62. 不同路径

文章目录 题目描述思路代码 题目描述 思路 动态规划 代码 private int UniquePaths(int m, int n) {int[][] dp new int[m][];for (int i 0; i < m; i) {dp[i] new int[n];}for (int i 0; i < m; i) {for (int j 0; j < n; j) {if (i 0 || j 0) dp[i][j] …

LLM - Baichuan7B Tokenizer 生成训练数据

目录 一.引言 二.Tokenizer 原始数据 1.原始数据样例 2.加载并 Token 原始数据 2.1 参数准备 2.2 单条样本处理逻辑 2.3 批量处理逻辑 2.4 主函数与完整代码 三.shell 执行 四.总结 一.引言 前面提到了自己在微调 Baichuan7B Lora 的过程中遇到了一些问题&#xff0c…

Cesium Token申请

一、什么是Cesium ion&#xff1f; Cesium ion是一个提供瓦片图和3D地理空间数据的平台&#xff0c;支持把数据添加到用户自己的应用程序中。 二、为什么需要access token&#xff1f; 使用Cesium ion需要申请access token,当用户将数据添加到自己的账户后&#xff0c;便可以…

Android-jar包方式连接本地sqlite并操作返回数据

背景: 数据库的创建及字段都是后端人员维护,Android端只是映射相关数据库到本地来操作。为了统一管理操作方式方法,所以提出,后端打jar包的方式封装对Android端数据库sqllite的连接、操作。 说明: 因为之前是后端打jar包,JDBC连接的驱动及方法有差异,导致连接Android…

PHP在线拨打电话的代码

这段代码包括一个HTML表单,用于收集用户的姓名,电子邮件和消息。当用户提交表单时,邮件将发送到指定的电子邮件地址,并显示一条消息,指示我们将在不久的将来拨打电话回复。请注意,在上面的代码中,电话号码硬编码为 $phone_number 变量,您需要将其更改为您想要的电话号码…

jmeter使用正则表达式匹配多个中的响应结果

目录 一、背景&#xff1a; 二、例如&#xff1a; 三、接口响应的所有结果&#xff1a; 四、正则表达式的写法&#xff1a; 五、调试的时候添加一个Debug PostProcessor 调试器 六、在Debug PostProcessor中可以查看到获取的参数结果 七、引用方式&#xff1a;${testValue…

【js前端去空格】

javascript字符串去空格 js去除字符串空格的方法 说到去除空格&#xff0c;首先都会想到的就是trim()方法&#xff0c;但是trim()只能去除字符串前后的空格&#xff0c;无法去除字符串中间的空格。 下面总结一下js去除字符串空格的几种方法&#xff1a; 1、trim() trim()是…

你应该知道的C语言干货(4)(strncpy,strncmp,strncat,strstr,strtok)

我们知道包含string.h头文件后&#xff0c;就可以使用strncpy,strncmp,strncat,strstr,strtok这些库函数&#xff0c;接下来让我们了解他们。 目录 #strncpy #strncmp #strncat #strstr #strtok #下期预告 #strncpy 该库函数作用和strcpy很相似&#xff0c;不同点在于 发现了吗…

《面试1v1》Redis分片集群

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

Redis Brpop 命令

目录 一、作用二、demo演示 一、作用 Redis Brpop 命令拥有移出并获取list右边的最后一个元素&#xff0c; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 二、demo演示 向 list1 中插入三个元素 a、b、c lpush list1 a b c查看list1中的元素 lrange lis…

操作系统13:中断处理程序和设备驱动程序

目录 1、中断处理程序 &#xff08;1&#xff09;中断和陷入 &#xff08;2&#xff09;中断处理程序的处理过程 2、设驱动程序 &#xff08;1&#xff09;设备驱动程序的功能 &#xff08;2&#xff09;设备驱动程序的处理过程 &#xff08;4&#xff09;对 I/O 设备的…

Mac 和 Win,到底用哪个系统学编程?

今天来聊一个老生常谈的问题&#xff0c;学编程时到底选择什么操作系统&#xff1f;Mac、Windows&#xff0c;还是别的什么。。 作为一个每种操作系统都用过很多年的程序员&#xff0c;我会结合我自己的经历来给大家一些参考和建议。 接下来先分别聊聊每种操作系统的优点和不…

React懒加载/动态加载lazy简单实例

两种页面嵌套的方式&#xff0c;一种是父子组件&#xff0c;一种是懒加载 1、父子组件&#xff08;可略&#xff0c;只用来做例子对比&#xff09; 原本需要用父子组件来实现页面嵌套&#xff0c;如果嵌套的组件不多&#xff0c;可以这样实现 父页面 import React,{Componen…

Android代码解读之渲染机制揭秘

问题 1.vsync如何协调应用和SurfaceFlinger配合来完成UI渲染、显示&#xff0c;App接收vsync后要做哪些工作&#xff1f; 2.requestLayout和invalidate区别&#xff1f; 3.performTraversals到底是干什么了&#xff1f; 4.surfaceflinger怎么分发vsync信号的&#xff1f; …

【Java】继承背后那些事---深扒继承基本原理|类加载、子类对象创建、方法调用、变量访问

博主简介&#xff1a;努力学习的预备程序媛一枚~博主主页&#xff1a; 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 学习了继承、多态 本节&#xff0c;将通过一个简单的例子&#xff0c;从概念上介绍原理&#xff08;实际实现的细节与此有所差别&#xff09;&#…

HuggingGPT解析:使用 ChatGPT及HuggingFace上的族系解决AI问题

HuggingGPT解析&#xff1a;使用 ChatGPT及HuggingFace上的族系解决AI问题 HuggingGPT是一个利用大型语言模型(LLMs)来解决复杂AI任务的框架。其基本理念是&#xff0c;考虑到LLMs&#xff08;例如ChatGPT&#xff09;在语言理解、生成、交互和推理方面展现出了卓越的能力&…

一个优质软件测试工程师简历的范文(答应我一定要收藏起来)

很多刚转行软件测试的小伙伴是不是不知道怎么写好一份优质的软件测试工程师的简历。今天呢&#xff0c;就给大家分享一下一个优质软件测试工程师简历的范文。记得收藏起来哦。 下面的案例&#xff1a;2-3年的软件测试工程的简历 姓 名&#xff1a;XXX 学历&#xff1a;本科 …

源码解析Collections.sort ——从一个逃过单测的 bug 说起

源码解析Collections.sort ——从一个逃过单测的 bug 说起 本文从一个小明写的bug 开始&#xff0c;讲bug的发现、排查定位&#xff0c;并由此展开对涉及的算法进行图解分析和源码分析。 事情挺曲折的&#xff0c;因为小明的代码是有单测的&#xff0c;让小明更加笃定自己写的…

第四节 配置SpringBootAdmin日志管理

本来想用一节就写完SpringBootAdmin的&#xff0c;但随着研究的深入发现一节应该是不够的&#xff0c;网上的资料也不会非常系统&#xff0c;官网的例子有些已经好几年没更新了&#xff0c;所以接下来还是系统性的来写下吧 第一节 完成基础配置&#xff0c;暴露所有端点 第二节…

uniapp App强制更新

需要使用DClound插件市场的一个插件挺好用的&#xff01;app升级、整包更新和热更新组件 支持vue3 支持打开安卓、苹果应用市场&#xff0c;wgt静默更新https://ext.dcloud.net.cn/plugin?id7286 开始贴代码 // /utils/method.js/*** 获取当前app最新版本* param number ver…