JavaSE学习笔记第三弹之异常抛出

今天我们继续来学习JavaSE相关的知识,希望与大家共同努力。


目录

异常

什么是异常

运行时异常

编译时异常

​编辑

为什么需要异常处理机制

错误

异常的处理与抛出

异常处理

异常抛出

自定义异常

结语


异常

什么是异常

Java中异常是一种在程序运行时发生的特殊情况,它打断了正常的指令流程。当Java虚拟机JVM检测到这种情况时,它会抛出一个异常对象。我们之前接触的一些异常比如数组越界异常,空指针异常,算术异常等都是异常类型,我们的每一个异常也是一个类,他们都继承自Exception类。

异常主要有以下两类:运行时异常和编译时异常。

运行时异常

异常的第一种类型是运行时异常,在编译阶段无法预判代码是否会出现问题,只有在运行的时候才知道会不会出错,这样的异常称为运行时异常。所有的运行时异常都继承自RuntimeException。比如下面这个例子就是一个运行时异常:

public class Main {public static void main(String[] args) {test(1, 0);}private static int test(int a, int b){return a/b;   //没有任何的判断而是直接做计算}
}

编译时异常

编译时异常是明确会出现的异常,在编译阶段就需要进行处理的异常,如果不进行处理,将会编译失败。默认继承自Exception类的异常都是编译时异常。比如这段代码,我们直接使用未声明的变量就会报错,这就是编译时异常。

public class Main {public static void main(String[] args) {System.out.println(a+b);}
}

为什么需要异常处理机制

Java的异常机制是Java编程语言中一个重要的特性,它提供了一种结构化的方式来处理程序运行时可能出现的错误情况。我们需要异常处理机制的原因如下:

  • 错误处理:异常机制允许程序员在可能发生错误的地方通过抛出异常的方式来标识这些错误,然后在程序的其它部分(通常是更高层次的代码)捕获并处理这些异常,从而避免了程序的突然崩溃。
  • 代码清晰
  • 增强程序的健壮性

错误

在Java中错误是程序运行过程中发生的严重问题,这些问题通常是由系统资源不足、虚拟机故障等底层问题引起的,它们超出了程序本身能够处理的范围。错误是无法通过代码来捕获或处理的,一旦发生错误,程序往往无法继续执行,而是会被终止。

常见的错误类型有内存溢出错误OutOfMemoryError、栈溢出错误StackOverflowError等,比如:

import java.util.ArrayList;  
import java.util.List;  public class OutOfMemoryErrorExample {  public static void main(String[] args) {  List<Object> list = new ArrayList<>();  while (true) {  list.add(new Object());  }  }  
}

或者我们用一个更加常见的例子:

public class Main {public static void main(String[] args) {int[] arr = new int[Integer.MAX_VALUE];}
}


异常的处理与抛出

异常处理

当程序没有按照我们想要的样子运行而出现异常时,我们希望能够自己处理出现的问题,让程序继续运行下去,就需要对异常进行捕获,此时我们可以使用try+catch的组合语句来解决问题,具体格式如下:

public class Main {public static void main(String[] args) {int[] arr = new int[5];try{    //在try块中运行代码,当代码出现异常时,异常会被捕获,并在catch块中得到异常类型的对象arr[10] = 1;}catch (ArrayIndexOutOfBoundsException e){   //捕获的异常类型System.out.println("程序有异常,请检查");  //出现异常时执行}//后面的代码会正常运行System.out.println("点赞+关注,可以吗,求求你了🥺");}
}

PS:运行时异常在编译时可以不用捕获,但是编译时异常必须进行处理

异常抛出

当别人调用我们的方法时,如果传入了错误的参数导致程序无法正常运行,这时我们就需要手动抛出一个异常来终止程序继续运行下去,同时告知上一级方法执行出现了问题。

public class Main {public static void main(String[] args) {try {test(1, 0);} catch (Exception e) {   //捕获方法中会出现的异常e.printStackTrace();}}private static int test(int a, int b) throws Exception {  //声明抛出的异常类型if(b == 0) throw new Exception("0不能做除数");  //创建异常对象并抛出异常return a/b;  //抛出异常会终止代码运行}
}

通过throw关键字抛出异常当程序运行到这一行时,就会终止执行,并出现一个异常。如果想要调用声明编译时异常的方法,但是依然不想去处理,可以同样的在方法上声明throws来继续交给上一级处理。当main方法都声明抛出异常时,出现异常就由JVM进行处理,也就是默认的处理方式。

自定义异常

在Java中,自定义异常是开发者根据特定业务逻辑或应用场景的需要,继承自Java异常体系中的某个类,创建的新的异常类。自定义异常允许开发者更精确地表达程序中可能发生的错误情况。在定义了自定义异常之后,你可以在你的业务逻辑中抛出这个异常,并在需要的地方捕获并处理它。

创建自定义异常我们通常需要以下步骤:

  1. 确定继承的基类
  2. 定义构造方法
  3. 添加额外的构造方法或方法

结语

以上就是对异常、错误和异常抛出处理的介绍与学习。希望能对大家有帮助,如果您觉得有帮助也希望您能留下点赞收藏与关注,这对我很重要,谢谢!

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

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

相关文章

PHP宠物店萌宠小程序系统源码

&#x1f43e;萌宠生活新方式&#x1f43e; &#x1f3e1;【一键直达萌宠世界】 你是否也梦想着拥有一家随时能“云撸猫”、“云吸狗”的神奇小店&#xff1f;现在&#xff0c;“宠物店萌宠小程序”就是你的秘密花园&#xff01;&#x1f31f;只需轻轻一点&#xff0c;就能瞬…

工厂方法模式java

文章目录 1. 概念2. 示例3. 代码示例 1. 概念 定义: 工厂方法模式又叫工厂模式,通过定义工厂父类创建对象的公共接口,而子类负责创建具体的对象 作用: 由工厂的子类来决定创建哪一个对象 缺点: 工厂一旦需要生成新的东西就需要修改代码,违背的开放封闭原则 2. 示例 3. 代码示…

Go语言并发编程-Context上下文

Context上下文 Context概述 Go 1.7 标准库引入 context&#xff0c;译作“上下文”&#xff0c;准确说它是 goroutine 的上下文&#xff0c;包含 goroutine 的运行状态、环境、现场等信息。 context 主要用来在 goroutine 之间传递上下文信息&#xff0c;包括&#xff1a;取…

rabbitmq简介与布署

rabbitMQ 常见的消息队列产品 rocketMQ&#xff08;火箭&#xff09; 阿里出品开源 kakfa 较少的核心提供超高的吞吐量&#xff0c;高可用高可靠高可扩展&#xff0c;但是建议支持较少的topic来保证其高吞吐量&#xff0c;适合大数据计算与日志收集。 rabbitMQ 基于erlang语言…

Chromium CI/CD 之Jenkins实用指南2024- 发送任务到Ubuntu(五)

1. 引言 在前一篇《Chromium CI/CD 之 Jenkins - 创建任务&#xff08;四&#xff09;》中&#xff0c;我们详细介绍了如何在Jenkins中创建和配置新任务&#xff0c;包括设置任务名称、选择运行节点、配置触发器、编写执行脚本以及添加文件收集步骤。通过这些步骤&#xff0c;…

COD论文笔记 Deep Gradient Learning for Efficient Camouflaged 2022

动机 这篇论文的动机在于解决伪装目标检测(COD)中的一个关键问题&#xff1a;在复杂背景下&#xff0c;伪装目标与背景的边界模糊&#xff0c;使得检测变得极其困难。现有的方法&#xff0c;如基于边界或不确定性的模型&#xff0c;通常仅响应于伪装目标的稀疏边缘&#xff0c…

最新Qt6的下载与成功安装详细介绍

引言 Qt6 是一款强大的跨平台应用程序开发框架&#xff0c;支持多种编程语言&#xff0c;最常用的是C。Qt6带来了许多改进和新功能&#xff0c;包括对C17的支持、增强的QML和UI技术、新的图形架构&#xff0c;以及构建系统方面的革新。本文将指导你如何在Windows平台上下载和安…

使用小波分析实现文字种类自动识别

文章目录 数据简介开始实验小波分解得出结果结果分析误差分析 数据简介 各找一篇中文&#xff0c;日文&#xff0c;韩文&#xff0c;英文&#xff0c;俄文较长的学术论文。将论文转化为JPG格式。拆分每张JPG生成更多小的JPG。最终获得很多5个不同语言的JPG并且自带标签。数据链…

VPN以及GRE和MGRE

VPN VPN — 是虚拟专用网络 通俗地说&#xff0c;就是通过虚拟的手段&#xff0c;将两个独立的网络&#xff0c;穿越一个公共网络进行连接&#xff0c;实现点到点专线的效果&#xff08;可以理解为&#xff1a;一个分公司通过公网和总公司建立点到点的专线连接&#xff09; 现…

Jupyter notebook如何快速的插入一张图片?如何控制插入图片的缩放、靠左展示(ChatGPT)

在Jupyter Notebook中&#xff0c;你可以使用Markdown语法快速插入图片&#xff0c;并且可以通过HTML标签来控制图片的展示方式和缩放。 注意&#xff1a;以下所有操作都有一个前提&#xff0c;即选择Cell-CellType-Markdown 1. 快速插入图片 要在Jupyter Notebook中插入图…

docker安装好了,但是启动失败

新项目要用docker部署,但是docker安装完后,启动失败,服务器用的是国产化的(之前的服务器非国产化,之前也没任何问题),国产化的使用起来问题一大堆,还是bclinux 安装好后重启一直显示 使用journalctl -xe也没任何报错 使用systemctl status docker查看docker状态是灰…

白话大模型微调(Fine-tune)

吾名爱妃&#xff0c;性好静亦好动。好编程&#xff0c;常沉浸于代码之世界&#xff0c;思维纵横&#xff0c;力求逻辑之严密&#xff0c;算法之精妙。亦爱篮球&#xff0c;驰骋球场&#xff0c;尽享挥洒汗水之乐。且喜跑步&#xff0c;尤钟马拉松&#xff0c;长途奔袭&#xf…

专业学习|系统建模与仿真的基础概念知识合集

学习笔记来源&#xff1a;http://tup.tsinghua.edu.cn/upload/books/yz/086457-01.pdf 一、系统 系统按照事物发展的连续性又可分为连续系统和离散系统。连续系统是指状态变量随 时间连续变化的系统,如图1-1所示;离散系统则是指状态变量只是在某个离散的时间点集合上发生变化…

Problems retrieving the embeddings data form OpenAI API Batch embedding job

题意&#xff1a;从OpenAI API批量嵌入作业中检索嵌入数据时遇到问题 问题背景&#xff1a; I have to embed over 300,000 products description for a multi-classification project. I split the descriptions onto chunks of 34,337 descriptions to be under the Batch e…

Linux--线程互斥(加锁)

目录 0.对原生线程封装的代码 1.为什么需要线程互斥 2.加锁 2.1.认识加锁和它的接口 2.2用一下接口 2.2.1 解决抢票问题 2.2.2设置局部锁 2.3从原理角度理解锁 2.4锁是如何实现的**** 0.对原生线程封装的代码 方便后续对锁的理解&#xff1a;Thread.hpp 详情请看&#…

mybatis-plus LambdaQueryWrapper条件构造器使用apply查询含有逗号‘,‘分隔的字段

mybatis-plus LambdaQueryWrapper apply自定义SQL条件使用 真实业务开发使用场景 数据库:postgreSQL 开发场景:SpringBoot2.5.7 数据库中数据如下 需求 查找, bingBdNumber字段为422875,要求数据库中bind_bd_number这一栏中只要有422875的就返回. 根据上图查422875需要返回…

【python】导入serial模块,读写串口数据(嵌入式软件自动化测试)

目录 环境准备安装pyserial硬件连接 基本函数使用获取串口设备列表初始化串口对象发送数据读取数据 环境准备 安装pyserial 1、python 3.6.7 2、pyserial模块封装了python对串口的访问 pip install serialpip install pyserial如果代码报错卸载掉serial 硬件连接 1、将串口…

Android 10.0 SystemUI下拉状态栏固定展开QsPanel不收缩功能实现

1. 前言 在10.0的系统ROM产品定制化开发中,在systemUi的原生下拉状态栏中,首次下拉展开quickQsPanel,第二次展开就显示 QsPanel,在产品开发中,需要下拉状态栏固定展开QsPanel,不需要二次展开,接下来分析下相关功能的实现,如图: 2.SystemUI下拉状态栏固定展开QsPanel不收…

Python和C++行人轨迹预推算和空间机器人多传感融合双图算法模型

&#x1f3af;要点 &#x1f3af;双图神经网络模型&#xff1a;最大后验推理和线性纠错码解码器 | &#x1f3af;重复结构和过约束问题超图推理模型 | &#x1f3af;无向图模型变量概率计算、和积消息传播图结构计算、隐马尔可夫模型图结构计算、矩阵图结构计算、图结构学习 |…

基于Java技术的致远汽车租赁系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;B/S模式、Java技术 工具&#xff1a;Visual Studio、MySQL数据库开发工具 系统展示 首页 用户注册…