【Java基础】Java中异常分类,他们之间的区别?

在这里插入图片描述

🍁Java中异常分哪两类

  • 🍁Java中异常类
    • 🍁受检异常
    • 🍁非受检异常
  • 🍁拓展知识仓
    • 🍁什么是Throwable
    • 🍁Error和Exception的区别和联系
    • 🍁 列举几个常用的RuntimeException
    • 🍁Java异常处理相关的几个关键字,以及简单用法
    • 🍁什么是自定义异常,如何使用自定义异常?


🍁Java中异常类


Java中的异常,主要可以分为两大类,即受检异常 (checked exception)和非受检异常 (unchecked exception)。


🍁受检异常


对于受检异常来说,如果一个方法在声明的过程中证明了其要有受检异常抛出:


public void test() throws Exception{
}


那么,当我们在程序中调用他的时候,一定要对该异常进行处理(捕获或者向上抛出),否则是无法编译通过的这是一种强制规范。


这种异常在 IO 操作中比较多。比如FileNotFoundException ,当我们使用 IO 流处理一个文件的时候,有一种特殊情况,就是文件不存在,所以,在文件处理的接口定义时他会显示抛出 FileNotFoundException,其目的就是告诉这个方法的调用者,我这个方法不保证一定可以成功,是有可能找不到对应的文件的,你要明确的对这种情况做特殊处理。


所以说,当我们希望我们的方法调用者,明确的处理一些特殊情况的时候,就应该使用受检异常。


看一段受检异常的demo:


import java.io.File;  
import java.io.FileNotFoundException;  
import java.util.Scanner;  
  
public class Main {  
    public static void main(String[] args) {  
        try {  
            // 尝试打开文件  
            File myFile = new File("myFile.txt");  
            Scanner myReader = new Scanner(myFile);  
              
            // 读取文件内容  
            while (myReader.hasNextLine()) {  
                String line = myReader.nextLine();  
                System.out.println(line);  
            }  
              
            // 关闭文件  
            myReader.close();  
        } catch (FileNotFoundException e) {  
            // 处理文件未找到异常  
            System.out.println("An error occurred: File not found.");  
            e.printStackTrace();  
        } catch (Exception e) {  
            // 处理其他异常  
            System.out.println("An error occurred: " + e.getMessage());  
            e.printStackTrace();  
        } finally {  
            // 确保文件被关闭,无论是否发生异常  
            try {  
                if (myReader != null) {  
                    myReader.close();  
                }  
            } catch (Exception e) {  
                System.out.println("An error occurred while closing the file.");  
                e.printStackTrace();  
            }  
        }  
    }  
}

在这个例子中,我们尝试打开一个文件并读取其内容。如果文件不存在,我们会捕获 FileNotFoundException 异常并打印出错误消息和堆栈跟踪。我们还添加了一个 finally 块来确保文件在程序结束时被关闭,无论是否发生异常。如果在关闭文件时发生异常,我们也会捕获并打印它。


🍁非受检异常


对于非受检异常来说,一般是运行时异常,继承自 RuntimeException。在编写代码的时候,不需要显示的捕获但是如果不捕获,在运行期如果发生异常就会中断程序的执行。


这种异常一般可以理解为是代码原因导致的。比如发生空指针、数组越界等。所以,只要代码写的没问题,这些异常都是可以避免的。也就不需要我们显示的进行外理。


试想一下,如果你要对所有可能发生空指针的地方做异常处理的话,那相当于你的所有代码都需要做这件事。看一个Demo:


public class Main {  
    public static void main(String[] args) {  
        try {  
            // 尝试执行可能抛出非受检异常的代码  
            int[] arr = new int[5];  
            arr[10] = 100; // 数组越界异常  
              
            // 尝试进行除法运算,可能会抛出除以零异常  
            int result = 10 / 0;  
              
            // 尝试访问一个不存在的数组元素,可能会抛出数组越界异常  
            System.out.println(arr[15]);  
        } catch (Exception e) {  
            // 捕获所有类型的异常并处理  
            System.out.println("An error occurred: " + e.getMessage());  
            e.printStackTrace();  
        } finally {  
            // 在程序结束前执行的代码,确保资源被正确释放  
            System.out.println("Cleaning up resources...");  
        }  
    }  
}

Demo中,尝试执行可能会抛出非受检异常的代码。我们执行了一个数组越界操作和除以零操作,以及访问一个不存在的数组元素。在 catch 块中,我们捕获了所有类型的异常并打印出错误消息和堆栈跟踪。我们还添加了一个 finally 块来确保在程序结束前执行一些清理操作。


🍁拓展知识仓

🍁什么是Throwable


在Java中,Throwable 是一个所有异常和错误的超级类。异常和错误都是可以抛出(throw)的异常对象,可以被捕获(catch)并处理。Throwable 包含两个主要子类:ExceptionError

  • Exception:这是程序运行期间可能出现的异常的超类。大多数运行时异常都是从 Exception 类派生的。
  • Error:这是程序无法处理的严重问题,如 OutOfMemoryErrorStackOverflowError

以下是一个简单的Java代码示例,演示了如何使用 Throwable

public class ThrowableExample {
    public static void main(String[] args) {
        try {
            // 抛出一个异常
            throw new Exception("This is an exception.");
        } catch (Exception e) {
            // 捕获并处理异常
            System.out.println("Caught an exception: " + e.getMessage());
        }
    }
}

在这个例子中,我们创建了一个新的 Exception 对象并抛出它。然后,我们使用 try-catch 块捕获并处理这个异常。这个异常对象就是 Throwable 类型的实例。我们可以通过调用 getMessage() 方法获取异常的详细信息。


🍁Error和Exception的区别和联系


error表示系统级的错误,是java运行环境内部错误或者硬件问题,不能指望程序来处理这样的问题,除了退出运行外别无选择,它是Java虚拟机抛出的。如OutOfMemoryError、StackOverflowError这两种常见的错误都是ERROR。


exception 表示程序需要捕捉、需要处理的异常,是由与程序设计的不完善而出现的问题,程序必须外理的问题.分为RuntimeException和其他异常。


🍁 列举几个常用的RuntimeException


这个题目,其实面试官考的还挺多的,主要是考察面试者实战经验是否丰富,所以常见的RuntimeException要能回答的尽量多回答一些:


在这里插入图片描述

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


throws、 throw、try、catch、 finally


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

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


自定义异常就是开发人员自己定义的异常,一般通过继承Exception的子类的方式实现。


编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程。


这种用法在Web开发中也比较常见,一般可以用来自定义业务异常。如余额不足、重复提交等。这种自定义异常有业务含义,更容易让上层理解和处理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

索引是如何提高查询性能的?

引言问:如何提高一条查询SQL的性能?答:最常用的方式就是加「索引」。问:索引为什么就能提高查询性能?答:索引就像一本书的目录,用目录查当然很快。问:为什么通过目录就能提高查询速度…

restTemplate支持https忽略证书

由于公司的某个服务器由http转为https,导致原先的接口不可用,不过网上一堆忽略ssl都可以用就不多写了,写几个奇葩的问题 首先报错都是 sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.cert…

前端开发之通过vue-office组件实现文件预览

前端开发之通过vue-office组件实现文件预览 前言效果图docx文件xlsx文件pdf文件 vue中简单案例1、安装组件2、vue中代码 前言 在实现文件预览的时候我们可以通过vue-office组件来实现文件的预览效果 效果图 docx文件 xlsx文件 pdf文件 vue中简单案例 1、安装组件 整体安装…

Intel® SGX Instruction References(五)

文章目录 前言一、Intel SGX Instruction Syntax and Operation1.1 ENCLS Register Usage Summary1.2 ENCLU Register Usage Summary1.3 ENCLV Register Usage Summary1.4 Information and Error Codes1.5 Internal CREGs1.6 Concurrent Operation Restrictions 二、Intel SGX …

腾讯云4核8G服务器三年优惠价格表

腾讯云轻量服务器4核8G12M有三年优惠价吗?有,但是不怎么优势,相对于云轻量2核2G4M带宽三年价格是540元、2核4G5M带宽3年优惠价756元,4核8G12M轻量应用服务器三年价格是5292元,怎么样?还想买吗?阿…

个性化定制的知识付费小程序,为用户提供个性化的知识服务,知识付费saas租户平台

明理信息科技知识付费saas租户平台 在当今数字化时代,知识付费已经成为一种趋势,越来越多的人愿意为有价值的知识付费。然而,公共知识付费平台虽然内容丰富,但难以满足个人或企业个性化的需求和品牌打造。同时,开发和…

FCIS 2023网络安全创新大会-核心PPT资料下载

一、峰会简介 本次会议的主题是“AI大模型、人工智能与智能制造安全、攻击面管理与供应链安全”。 1、AI大模型 会议首先探讨了AI大模型在网络安全领域的应用。AI大模型是一种基于深度学习的模型,具有强大的特征提取和分类能力,可以用于检测和防御各种…

一开始我还不信!高德导航红绿灯竟然能读秒?

高德导航红绿灯为啥能读秒? 1 内部员工吐露 每天工作其实就是负责自己片区的红绿灯,一大早就去校对时间,然后发布到后台。是的,统计出来的,而且还是人工统计,有误差请见谅[害羞] 真的是很辛苦了&#xf…

低代码平台:明年IT规划的关键

背景 在这个快速变化的世界中,企业面临前所未有的挑战。明年的经济形势预计将遭遇巨大变化,全球市场也正在经历深刻调整。在这样的环境下,企业的应用系统也面临着重新评估和调整的需求。为了保持竞争力,企业必须确保其IT系统不仅…

WAVE SUMMIT迎来第十届,文心一言将有最新披露!

10句话2分钟,挑战成功说服宿管阿姨开门,这个人群中的“显眼包”是一个接入文心大模型4.0游戏里的NPC,妥妥 “工具人”实锤~ 尝试用AI一键自动识别好坏咖啡豆,看一眼便知好坏,真正“颜值即正义”&#xff0c…

手写Promise完整介绍

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

一文看懂所有字符编码标准

文章目录 ASCII128个符号不够用欧洲国家亚洲国家 GB2312GBKGB18030UnicodeUTF-8 QA最高位b7是什么意思?UTF-8和UTF-16的区别UTF-8和UTF-32的区别 ASCII ASCII(American Standard Code for Information Interchange)是一种字符编码标准,最初…

基于业务功能级别的流量控制

之前产品线上发生过若干次因为tomcat连接池被耗尽而导致宕机的故障,而具体根源原因则各不尽相同。有因为调用和被调用的服务申请相同的分布式锁而导致死锁的,有因为发送内部或外部的JMS消息发生堵塞的,有因为某个存在性能问题的接口被较多调用…

如何使用队列处理 API 速率限制

对于遇到速率限制的应用程序来说也是一个挑战,因为它需要“放慢速度”或暂停。这是一个典型的场景: 初始请求:当应用程序发起与 API 的通信时,它会请求特定的数据或功能。API 响应: API 处理请求并响应请求的信息或执…

linxu重启网络服务失败——Failed to start LSB: Bring up/down networking.

一、出现问题的场景 在虚拟机中的Linux系统启动后,发现没有网络,执行ifconfig 发现自己配置的ens33网卡没有启动。 接着,执行systemctl restart network 重启网络服务失败 查看网络状态,执行 systemctl status network 发现报错…

有什么好用的C/C++源代码混淆工具?

​ 有什么好用的C/C源代码混淆工具? 开始使用ipaguard 前言 iOS加固保护是直接针对ios ipa二进制文件的保护技术,可以对iOS APP中的可执行文件进行深度混淆、加密。使用任何工具都无法逆向、破解还原源文件。对APP进行完整性保护,防止应用…

圣诞树(动态效果)

一、运行效果 二、制作方法 1.复制代码到Dreamweaver或HBuilder或vscode中 2.点击运行---运行到浏览器---选择你要打开的浏览器 3.打开后会出现这个界面,前四个是固定音乐,最后一个是自主选择的音乐,你可以选择你电脑上的歌曲&#xff0c…

CCF-CSP真题《202309-2 坐标变换(其二)》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号:202309-2试题名称:坐标变换(其二)时间限制:2.0s内存限制:512.0MB问题描述: 问题描述 对于平面直角坐标…

vue项目中使用axios发送http请求添加header自定义变量出现跨域问题

request代码片段: export const request (api,method,params {},config,responseType {} ) > {let apiToken localStorage.getItem("token");let headers {Authorization: ${apiToken},};if (config?.headers) {headers {...headers,...config…

java:4-7运算符优先级

运算符优先级 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。只有单目运算符(第二行)、赋值运算符(倒数3行)是从右向左运算的。一览表, 不要背&#x…