【Java语言】异常处理

异常 

异常:在Java中程序执行过程中发生不正常行为。异常为多种,有算数异常、数组越界异常、空指针异常等(这些是比较常见的异常);

异常的体系结构

  1. 数组越界异常: ArrayIndexOutOfBoundsException。
  2. 空指针异常 : NullPointerException。
  3. 类型转换异常:ClassCastException。
  4. 迭代器遍历没有此元素异常:NoSuchElementException。
  5. 算术异常:ArithmeticException。
  6. 数字转换异常:NumberFormatException(字符串转换为数字格式错误,IllegalArgumentException的子类)。
  7. 非法线程状态异常:llegalThreadStateException
  8. 并发修改异常:java.util.ConcurrentModificationException(多线程下集合操作元素)
  9. IllegalArgumentException:参数错误(比如方法入参类型错误)
  10. SecurityException:安全错误(比如权限不够)
  11. UnsupportedOperationException:不支持的操作错误(比如重复创建同一用户)
  12. ArrayStoreException:数据存储异常(操作数组时类型不一致)
  13. java.lang.IllegalStateException{Queue full依然add()添加元素}
  14. FileSizeLimitExceededException:在SpringBoot中,文件上传时默认单个文件最大大小为1M,当上传一个较大的文件(超出1M)时,运行和后端程序报错
  15. NoSuchBeanDefinitionException:表示在应用程序中没有找到指定的Bean的定义!在Spring容器ApplicationContext中调用getBean()获取bean对象时,bean的名称填错,就会报改错,或者就跟着没有该Bean对象!
  16. UnsupportedClassVersionError:比如在JDK8上面运行JDK11环境下的程序!
  17. java.lang.UnsupportedOperationException异常:使用Collections.unmodifiableCollection(Collection c)方法来创建一个只读集合,这样改变集合的任何操作都会抛出该异常~!

  1. Java中的所有异常都来⾃顶级父类Throwable,Throwable下有两个⼦类Exception和Error。Throwable类,是所有异常类的根类,Java异常的顶层父类,所有的异常类都是由它继承。
  2. Exception:异常,程序本身可以处理的异常。
  3. Java中异常继承的根类是:Throwable。Throwable是根类,不是异常类。
  4. Exception才是异常类,当程序出现Exception时,是可以靠程序⾃⼰来解决的,它才是开发中代码在编译或者执行的过程中可能出现的错误,它是需要提前处理的,以便程序更健壮!
  5. 异常体系的最上层父类是Exception。
  6. Exception的⼦类通常⼜可以分为RuntimeException和⾮RuntimeException两类
  • 异常分为两类:编译时异常(受检异常,必须处理)、运行时异常(非受检异常)。
  • 受检异常:就是程序必须手动处理的异常,如果不手动处理,则会编译失败。
  • 非受检异常:不强制程序处理的异常,不强制你手动处理,无需try...catch...,也无需throws,代码也能编译成功。Error也属于非受检异常。
  • 编译时异常{受检异常-Checked Exception}:没有继承RuntimeException的异常,直接继承于Exception。编译阶段就会错误提示 / 报错,必须要手动处理(如果受检查异常没有被 catch或者throws 关键字处理的话,就没办法通过编译),否则代码报错不通过。编译时异常是为了提醒程序员,比如:IOException、ClassNotFoundException、ParseException、SQLException、java.io.FileNotFoundException...
  • 运行时异常{非受检异常-Unchecked Exception}:继承了RuntimeException,RuntimeException本身和子类。编译阶段不会报错 / 出现异常提醒,运行时出现的异常。运行时异常是代码出错而导致程序出现的问题。

数组越界(非受检异常)


public class ExceptionDemo {
    public static void main(String[] args) {
        int[] arr = {10, 20, 40};
        System.out.println(arr[0]);
        System.out.println(arr[3]); //ArrayIndexOutOfBoundsException
        System.out.println("程序截止");
        System.out.println(arr[1]);//后面的程序都不执行
    }
}

受检异常和非受检异常


public class ExceptionDemo1 {
    public static void main(String[] args) throws ParseException {
        // 编译时异常(在编译阶段,必须要手动处理,否则代码报错)
        String time = "2024年11月18日";
        SimpleDateFormat s = new SimpleDateFormat("yyyy年MM月dd日");
        System.out.println(s.parse(time));
 

        // 运行时报错(在编译阶段是不需要处理的,是代码运行时出现的异常)
        int[] arr = {1, 2, 3};
        System.out.println(arr[10]); // 数组越界
    }
}

处理异常

处理异常:在Java中有两个处理异常的方式,一个是try...catch...,一个是throws。 

try...catch{ 捕获异常 }:将可能发生异常的代码放到try代码块中,然后使用catch来捕获对应的异常。

如果try代码块正常执行,那catch就不会生效;如果发生了指定的异常,则会执行对应的catch代码块,然后继续往下执行,这样我们就能避免异常影响到我们的正常逻辑。捕获异常时还可以接上finally代码块,无论有没有发生异常,finally代码块都会执行

throws{ 抛出异常 }:在方法上使用throws关键字可以声明该方法可能会抛出的异常。

当我们调用一个方法时,如果这个方法用throws关键字声明了受检异常,此时我们就必须得手动处理它声明的异常,否则就会编译失败{要么你就try...catch...,要么你就在当前方法使用throws声明同样的或其父类异常}。

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

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

相关文章

使用PSpice进行第一个电路的仿真

1、单击【开始】菜单,选择【OrCAD Capture CIS Lite】。 2、单击【File】>【New】>【Project】。 3、①填入Name下面的文本框(提示:项目名称不要出现汉字); ②选择【Analog or Mixed A/D】; ③单击【…

深度剖析C++STL:手持list利剑,破除编程重重难题(上)

前言: C 标准模板库(STL)中的 list 容器是一个双向链表结构,它提供了高效的插入和删除操 作。与 vector 不同,list 中的元素不是连续存储的,因此可以在任何位置高效插入和删除元素,而无需移动其…

uniapp微信小程序转发跳转指定页面

onShareAppMessage 是微信小程序中的一个重要函数,用于自定义转发内容。当用户点击右上角的菜单按钮,并选择“转发”时,会触发这个函数。开发者可以在这个函数中返回一个对象,用于定义分享卡片的标题、图片、路径等信息。 使用场…

Matlab实现白鲸优化算法优化随机森林算法模型 (BWO-RF)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 白鲸优化算法(Beluga Whale Optimizer, BWO)是一种受白鲸社会行为启发的新型群智能优化算法。该算法通过模仿白鲸群体中的合作和竞争机制来指导搜索过程,能够在复杂解空间中高…

c#基本数据类型占用字节长度/取值范围/对应.net类型

具体前往:c#基本数据类型占用字节数/取值范围/包装类-各基本类型.net类型,占用bit位数,默认值及取值范围

解决 IDEA 修改代码重启不生效的问题

前言 在使用 IntelliJ IDEA 进行 Java 项目开发时,有时会遇到一个令人头疼的问题:修改了代码后,重启服务却发现更改没有生效。通常情况下,解决这个问题需要通过 Maven 的 clean 和 compile 命令来强制重新编译,但这显…

React教程第二节之虚拟DOM与Diffing算法理解

1、什么是虚拟DOM 虚拟DOM 是javascript的一个对象,是内存中的一种数据结构,以树的形式存储UI的状态,树中的每个节点都代表着真实的DOM,用来描述我们希望在页面看到的 HTML结构; 现在的MVVM 框架,大多使用…

视觉SLAM相机——单目相机、双目相机、深度相机

一、单目相机 只使用一个摄像头进行SLAM的做法称为单目SLAM,这种传感器的结构特别简单,成本特别低,单目相机的数据:照片。照片本质上是拍摄某个场景在相机的成像平面上留下的一个投影。它以二维的形式记录了三维的世界。这个过程中…

【C++学习(35)】在Linux中基于ucontext实现C++实现协程(Coroutine),基于C++20的co_await 协程的关键字实现协程

文章目录 为什么使用协程协程的理解协程优势协程的原语操作yield 与 resume 是一个switch操作(三种实现方式): 基于 ucontext 的协程基于 XFiber 库的操作1 包装上下文2 XFiber 上下文调度器2.1 CreateFiber2.2 Dispatch 基于C20的co_return …

用jquery做一个websocket客户端

先看效果图&#xff1a; 功能很简单&#xff0c;就是作为客户端连接websocket&#xff0c;并实现接受和发送消息。具体代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"UTF-8"><meta name"…

本地音乐服务器(二)

4. 上传音乐模块设计 4.1 上传音乐的接口设计 请求和响应设计&#xff1a; 新建music实体类&#xff1a; Data public class Music {private int id;private String title;private String singer;private String time;private String url;private int userid; } 4.2 创建Mu…

GRPC实现

1.首先下载对应编译插件&#xff0c;这里不再提供下载 2.编写proto文件 3.编写完成用命令生成go文件 protoc --go_out. --go-grpc_out. *.proto --go_out. 其中的. 是说你要编译的 .proto 文件目录为当前目录&#xff0c;按需修改 --go-grpc_out.&#xff0c;其中的. 是说你生…

「Java EE开发指南」如何使用Visual JSF编辑器设计JSP?(一)

Visual JSF Designer的目标是使创建JSF应用程序的特定于组件的工作更容易可视化&#xff0c;在本教程中&#xff0c;您将使用可视化设计器设计JSF登录页面&#xff0c;将学习如何&#xff1a; 创建一个JSF项目创建一个新的JSF页面设计JSF页面 该功能在MyEclipse中可用。 MyE…

大模型(LLMs)RAG 版面分析——表格识别方法篇

大模型&#xff08;LLMs&#xff09;RAG 版面分析——表格识别方法篇 一、为什么需要识别表格&#xff1f; 表格的尺寸、类型和样式展现出多样化的特征&#xff0c;如背景填充的差异性、行列合并方法的多样性以及内容文本类型的不一致性等。同时&#xff0c;现有的文档资料不…

力扣(leetcode)题目总结——动态规划篇

leetcode 经典题分类 链表数组字符串哈希表二分法双指针滑动窗口递归/回溯动态规划二叉树辅助栈 本系列专栏&#xff1a;点击进入 leetcode题目分类 关注走一波 前言&#xff1a;本系列文章初衷是为了按类别整理出力扣&#xff08;leetcode&#xff09;最经典题目&#xff0c…

WebSocket实战,后台修改订单状态,前台实现数据变更,提供前端和后端多种语言

案例场景&#xff1a; 在实际的后台中需要变更某个订单的状态&#xff0c;在官网中不刷新页面&#xff0c;可以自动更新状态 在前端页面实现订单状态的实时更新&#xff08;不刷新页面&#xff09;&#xff0c;可以通过 WebSocket 的方式与后台保持通信&#xff0c;监听订单状态…

【Java 学习】数据类型、变量、运算符、条件控制语句

Java基础语法 1. 打印 Hello World !2. 变量类和数据类型2.1 什么是变量&#xff1f;什么是数据类型&#xff1f;2.2 常用的数据类型2.3 使用变量2.4 String 类数据类型2.4.1 String 类基本概念2.4.2 String 类的使用 3. 运算符3.1 算数运算符3.2 关系运算符3.3 逻辑运算符3.4 …

面试题:Kafka(一)

1. Kafka如何保证消息不丢失 生产者发送消息到Brocker丢失 设置异步发送 消息重试 消息在Brocker中存储丢失 发送确认机制acks 消费者从Brocker接收消息丢失 Kafka 中的分区机制指的是将每个主题划分成多个分区&#xff08;Partition&#xff09;topic分区中消息只能由消费者…

[Redis#1] 前言 | 再谈服务端高并发分布式结构的演进

目录 电子商务应用架构演进 概述 常见概念 架构演进 总结 总结 应用&#xff08;Application&#xff09;/ 系统&#xff08;System&#xff09; 模块&#xff08;Module&#xff09;/ 组件&#xff08;Component&#xff09; 分布式&#xff08;Distributed&#xff0…

洛谷刷题日记||基础篇9(线性表)

代码思路&#xff1a; 初始化圈&#xff1a;利用 std::list 保存编号为 1 到 n 的人。循环报数&#xff1a;利用迭代器模拟报数的过程&#xff0c;每次数到 m 时将对应的人出圈。循环处理&#xff1a;std::list::erase 删除出圈的人&#xff0c;并返回下一个人的迭代器&#x…