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.mfbz.cn/a/800401.html

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

相关文章

Java二十三种设计模式-原型模式(5/23)

Java中的原型模式&#xff1a;深入解析与应用实践 引言 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它使用一个已有的对象作为原型&#xff0c;通过复制这个原型来创建新的实例。这种模式适用于对象的创建成本较高&#xff0c;或者对…

BL201分布式I/O耦合器连接Profinet网络

钡铼技术的BL201分布式I/O耦合器是一个用于Profinet网络的设备&#xff0c;用于连接远程输入/输出&#xff08;I/O&#xff09;设备到控制系统&#xff0c;如可编程逻辑控制器&#xff08;PLC&#xff09;&#xff0c;能够实现分布式的I/O连接和通信。 它支持标准Profinet IO …

Qt实现一个简单的视频播放器

目录 1 工程配置 1.1 创建新工程 1.2 ui界面配置 1.3 .pro配置 2 代码 2.1 main.c代码 2.2 widget.c 2.3 widget.h 本文主要记述了如何使用Qt编写一个简单的视频播放器&#xff0c;整个示例采用Qt自带组件就可以完成。可以实现视频的播放和暂停等功能。 1 工程配置 1.…

都说油车不行了,外资两款经典油车降价起量,与电动车展开决战

6月份的轿车销量数据出来了&#xff0c;数据显示电动汽车并没稳赢&#xff0c;燃油车终于发力了&#xff0c;反过来围剿电动汽车了&#xff0c;显示出消费者并非说不买油车&#xff0c;而是看价格&#xff0c;价格合适&#xff0c;消费者仍然会选择油车。 6月份的数据显示之前销…

AV1 编码标准帧间预测技术概述

AV1 编码标准帧间预测 AV1&#xff08;AOMedia Video1&#xff09;是一种开源的视频编码格式&#xff0c;它在帧间预测技术上做出了显著的改进和扩展&#xff0c;以提供比现有标准更高的压缩效率和更好的视频质量。以下是AV1帧间预测技术的几个关键点&#xff1a; 参考帧扩展&a…

VGMP(VRRP组管理协议)和HRP(华为冗余技术)

1、VGMP VGMP&#xff08;VRRP Group Management Protocol&#xff09;&#xff1a;VRRP组管理协议&#xff0c;是华为开发的一种私有协议&#xff0c;主要用于实现对多个VRRP组进行统一管理的功能 概述&#xff1a;VGMP协议是在VRRP协议的基础上开发的&#xff0c;其最主要的…

linux的学习(五):shell编程中的变量,运算符,条件判断

简介&#xff1a; shell编程的基本概念&#xff0c;定义变量&#xff0c;运算符&#xff0c;条件判断的基本使用 shell编程 把多个命令写到一个文件里&#xff0c;这个文件就是脚本&#xff0c;里面还有很多的流程控制 基本概念 脚本的后缀名是.sh 脚本的执行&#xff1a;…

Golang | Leetcode Golang题解之第235题二叉搜索树的最近公共祖先

题目&#xff1a; 题解&#xff1a; func lowestCommonAncestor(root, p, q *TreeNode) (ancestor *TreeNode) {ancestor rootfor {if p.Val < ancestor.Val && q.Val < ancestor.Val {ancestor ancestor.Left} else if p.Val > ancestor.Val && q…

【Docker】Docker 的数据管理与镜像创建

目录 一.数据管理 1.数据卷 2.数据卷容器 二.端口映射 三.容器互联 四.Docker 镜像的创建 1.基于现有镜像创建 1.1.首先启动一个镜像&#xff0c;基于镜像创建容器&#xff0c;更新容器内容 1.2.将修改后的容器提交为新的镜像&#xff0c;需要使用该容器的 ID 号创建新…

Studying-代码随想录训练营day40| 198.打家劫舍、213.打家劫舍II、337.打家劫舍III

第40天&#xff0c;动态规划part07&#xff0c;动态规划经典题型“打家劫舍”(ง •_•)ง&#xff0c;编程语言&#xff1a;C 目录 198.打家劫舍 213.打家劫舍II 337.打家劫舍III 总结 198.打家劫舍 文档讲解&#xff1a;代码随想录打家劫舍 视频讲解&#xff1a;手…

人工智能算法工程师(中级)课程13-神经网络的优化与设计之梯度问题及优化与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程13-神经网络的优化与设计之梯度问题及优化与代码详解。 文章目录 一、引言二、梯度问题1. 梯度爆炸梯度爆炸的概念梯度爆炸的原因梯度爆炸的解决方案 2. 梯度消失梯度消失的概念梯度…

按钮测试: 循环遍历 单据行明细 执行SQL

using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; using System; using System.ComponentModel;using System.Text;namespace cux.button.test {[Description("测试循环遍…

【JavaScript 算法】回溯法:解决组合与排列问题

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、回溯法的基本概念回溯法的模板 二、经典问题及其 JavaScript 实现1. 组合问题2. 排列问题 三、回溯法的应用四、总结 回溯法是一种通过尝试所有可能的解来解决问题的算法策略。它在组合和排列问题中尤为有效&#xff0c…

在 PostgreSQL 里如何处理数据的归档和恢复的权限管理?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 里如何处理数据的归档和恢复的权限管理&#xff1f;一、数据归档的重要性及方法&#x…

C语言程序设计实例1

程序设计1 问题1_1代码1_1结果1_1 问题1_2代码1_2结果1_2 问题1_3代码1_3结果1_3 问题1_1 计算如下公式&#xff1a; S 3 2 2 − 5 4 2 7 6 2 − ⋅ ⋅ ⋅ − ( − 1 ) n − 1 2 n 1 ( 2 n ) 2 , S \frac{3}{2^2}-\frac{5}{4^2}\frac{7}{6^2}--(-1)^{n-1}\frac{2n1}{(2n)^…

Mac 如何安装vscode

Mac 电脑/ 苹果电脑如何安装 vscode 下载安装包 百度搜索vscode&#xff0c;即可得到vscode的官方下载地址&#xff1a;https://code.visualstudio.com/ 访问网页&#xff0c;点击下载即可。 下载完成后&#xff0c;得到下图所示的app。 将该 app 文件&#xff0c;放入到…

【答疑篇】企业管理咨询公司的服务流程是怎样的?

在竞争激烈的商业环境中&#xff0c;企业如何保持持续的增长和竞争力&#xff1f;答案就隐藏在企业管理咨询公司的服务之中。今天&#xff0c;就让我们一起揭晓企业管理咨询公司的服务流程&#xff0c;看看这些专业团队是如何助力企业焕发新生的&#xff01; 一、需求分析 企业…

yolov5 上手

0 介绍 YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型&#xff0c;由华盛顿大学的约瑟夫-雷德蒙&#xff08;Joseph Redmon&#xff09;和阿里-法哈迪&#xff08;Ali Farhadi&#xff09;开发。YOLO 于 2015 年推出&#xff0c;因其高速度和高精确度而迅速受到…

防火墙双机热备带宽管理综合实验

拓扑图和要求如下&#xff1a; 之前的步骤可以去到上次的实验 1.步骤一&#xff1a; 首先在FW3防火墙上配置接口IP地址&#xff0c;划分区域 创建心跳线&#xff1a; 下面进行双机热备配置&#xff1a; 步骤二&#xff1a; 先将心跳线连接起来 注意&#xff1a;一定要将心跳…

勒索防御第一关 亚信安全AE防毒墙全面升级 勒索检出率提升150%

亚信安全信舷AE高性能防毒墙完成能力升级&#xff0c;全面完善勒索边界“全生命周期”防御体系&#xff0c;筑造边界勒索防御第一关&#xff01; 勒索之殇&#xff0c;银狐当先 当前勒索病毒卷携着AI技术&#xff0c;融合“数字化”的运营模式&#xff0c;形成了肆虐全球的网…