Java-异常机制

news2024/10/6 22:22:48

异常机制

正常情况下,程序按照我们希望的样子和步骤去执行,但是,代码就像人生,要是一帆风顺了,就要想想是不是哪里出事了。程序若是有报错还好,就怕没有报错。

实例


public class Test {
    public static void main(String[] args) {
        test(1, 0);
    }

    public static  int test(int a,int b){
        return a / b;
    }
}

如上,除数等于0时会发生算数异常错误,程序直接中止。


除数错误

异常是个什么样的

程序运行时,出现我们没有考虑的情况时,会出现异常,因为计算机是比较死板的,要严格遵守规则。

异常种类

运行时异常

数组越界、空指针异常等。

编译时异常

明确会发生的异常,必须要在编译阶段处理,不处理无法通过编译。

都是继承自父类异常类

错误和异常不是一个东西,有相似之处。 ERROR,错误等级高于异常。但是都继承于Throwable类。

异常处理有三种,不处理,立即处理(try-catch-finally结构处理),抛给调用处解决(throws),但是在main函数抛出会给JVM,这样是不行的,JVM会直接中断程序。

抛出异常

调用方法出现异常程序终止时,这时我们可以手动抛出一个异常来终止程序运行,同时告知上一级调用方法出现问题,有异常,终止程序。

public class Test {
    public static void main(String[] args) {
        test(1, 0);
    }

    public static  int test(int a,int b){
        ArithmeticException ae = new ArithmeticException("除数不能为0");
        if (b == 0){
            throw ae;
        }
        return a / b;
    }
}

异常抛出

在构造方法可以写入原因,遇到异常未处理时,不会往后执行,直接结束程序。

运行结果指明异常种类,发生异常的地方,行数。从结构可以看出时堆栈的形式打印的。

有些不能直接抛出

必须指明异常具体种类,给出对应解决方案,不然是不能直接抛出的。
throws 关键词,会接着抛出异常,不会对其进行处理。如果没有异常,在重写时可以不抛出异常。

异常处理

自行处理异常需要捕获,使用 try-catch-finally结构。
try中写可能出现异常的语句,catch负责匹配异常对象并进行相应处理。


public class Test {
    public static void main(String[] args) {
        try{
            test(1, 0);
        }catch (ArithmeticException ae){
            System.out.println("除数不能为0");
        }
    }

    public static  int test(int a,int b){
        ArithmeticException ae = new ArithmeticException("除数不能为0");
        if (b == 0){
            throw ae;
        }
        return a / b;
    }
}

异常捕获
在对异常进行处理后,程序可以正常开始结束

处理可以打印出错信息,告知调用者不要进行非法操作。

捕获要有相应匹配的类来进行处理。

catch捕获处理的只能是Throwable类及其子类。但是出现错误不要去捕获,直接处理,catch一般处理异常。catch可以写多个,捕获多种不同异常。但是要注意父类写子类前的话,会导致子类变成不可达的语句。多种不同的类型也是可以合并的,类似于或运算。

finally

无论如何都会执行的语句。

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

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

相关文章

如何用 YonBuilder 构建线索管理应用

加速企业数智营销:如何用 YonBuilder 构建线索管理应用 如何用 YonBuilder 低代码开发线索管理应用? 线索管理是指通过各种渠道收集、筛选、打分、分配、跟进和培育潜在客户的信息,以便将其转化为成交客户的过程。 通过数智化手段实现良好…

ArcGIS地质图矢量化技巧

01 概述 今天以ArcGIS为例,结合多年的工作经验,来介绍一下地质图矢量化的技巧。 02 底图的配准 不同比例尺的图件,有着不同的配准精度要求: 1:20万的地质图,配准误差不能高于20米; 1:50万…

DFIG控制9: 搭建定子αβ坐标系下的电机模型

DFIG控制9: 搭建定子αβ坐标系下的电机模型。本文基于教程的第9部分(终于做完了)。主要目的是自己搭建一个DFIG的电机模型,与Simulink库中的模型做个对比。 本文基于教程的第9部分: DFIM Tutorial 9 - Analytical Mod…

Focal Loss论文解读和调参教程

论文:Focal Loss for Dense Object Detection 论文papar地址:ICCV 2017 Open Access Repository 在各个主流深度学习框架里基本都有实现,本文会以mmcv里的focal loss实现为例(基于pytorch) 简介: 本文是…

1.mybatis-plus入门及使用

1.什么是MybatisPlus MyBatis-Plus 官网 为什么要学MybatisPlus? MybatisPlus可以节省大量时间,所有的CRUD代码都可以自动化完成MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效…

Java——数组中出现次数超过一半的数字

题目链接 牛客在线oj题——数组中出现次数超过一半的数字 题目描述 给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,…

FastDFS与Nginx结合搭建文件服务器,并内网穿透实现公网访问

文章目录前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.1 …

低代码开发重要工具:jvs-flow (流程引擎)2.1.7版本更新内容

流程引擎主要包含了流程定义和编辑、任务分配和处理、流程监控和跟踪、数据模型和存储、条件和规则设置、安全性和权限管理、性能优化以及持续集成和部署等功能,以满足不同业务场景下的需求。 JVS流程引擎从V2版本开始,由flowable切换为 jvs-flow&#…

2023 年 五 大数据恢复软件帮助您找回数据

您是否刚刚丢失了一份需要数天工作才能更换的重要文件?不要恐慌!此列表中排名前 10 位的最佳数据恢复软件应用程序可以帮助您找回数据,您甚至可能不必在它们上花任何钱。 五大最佳数据恢复软件工具 以下是我们最喜欢的 10 大数据恢复软件应用…

记录-vue项目中使用PWA

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言: 梳理了一下项目中的PWA的相关用法,下面我会正对vue2和vue3的用法进行一些教程示例,引入离线缓存机制,即使你断网,也能访问页面。一旦用…

动力节点王鹤SpringBoot3笔记——第八章 文章管理模块

目录 第八章 文章管理模块 8.1 配置文件 8.2 视图文件 8.3 Java代码 第八章 文章管理模块 创建新的Spring Boot项目,综合运用视频中的知识点,做一个文章管理的后台应用。 新的Spring Boot项目Lession20-BlogAdmin。Maven构建工具,包…

VxLAN数据中心L2互连(hand-off方式)

用Arista的veos做了个DCI(hand-off)实验。模拟了VxLAN数据中心hand-off方式做L2互通。 在此分享。 实现思路 分别在DC1、DC2内配置BGP EVPN协议创建VXLAN隧道,实现各数据中心内部VM之间的通信,DC1-BL和DC2-BL通过二层接口方式接…

spring事务(注解 @Transactional )失效场景

目录标题1. 代理不生效1.1 将注解标注在接口方法上1.2 被final、static关键字修饰的类或方法1.3 类方法内部调用示例解决方案:新加一个Service方法1.4 (类本身) 未被spring管理2. 框架或底层不支持的功能2.1 非public修饰的方法2.2 多线程调用举例1举例22.3 数据库本…

C. Uncle Bogdan and Country Happiness(dfs + 回溯)

Problem - C - Codeforces 波格丹叔叔在弗林特船长的团队里待了很长一段时间,有时会怀念他的家乡。今天他告诉你他的国家是如何引入幸福指数的。有n个城市和n -1条连接城市的无方向道路。任何城市的公民都可以通过这些道路到达任何其他城市。城市编号从1到n&#xf…

【软考:软件设计师】 4 计算机组成与体系结构(三)计算机安全 | 加密技术

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于软考中级:软件设计师系列专栏,本专栏服务于软考中级的软件设计师考试,包括不限于知识点讲解与真题讲解两大部分,并且提供电子教材与电子版真题,关注私聊即可 …

服务(第二篇)LAMP

一、编译安装apache ①关闭防火墙,将安装Apache所需软件包传到/opt目录下 systemctl stop firewalld.service setenforce 0 [rootxxx opt]# ls apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2 ②安装环境依赖包 yum -y install gcc gcc-c mak…

专业排名全美top6|建筑学硕士学历CSC获批顺利赴美

E老师人文社科背景,二本院校任教,硕士毕业,没有英文文章,且申请周期只有一个月。据此我们提出,以赶上CSC申报为前提,尽量申请美国综合或者专业排名靠前的学校。最终我们助E老师获得美国专业排名TOP6的弗吉尼…

六个阶段形成CRM销售漏斗,优点有哪些

CRM销售漏斗是反映机会状态以及销售效率的重要的销售管理模型。对企业来说,CRM销售漏斗是一个必不可少的工具。通过销售漏斗,企业可以跟踪和分析客户旅程的每个阶段,并制定相应的销售战略。下面来说说,什么是CRM销售漏斗&#xff…

高频PCB电路设计常见的66个问题

随着电子技术快速发展,以及无线通信技术在各领域的广泛应用,高频、高速、高密度已逐步成为现代电子产品的显著发展趋势之一。信号传输高频化和高速数字化,迫使PCB走向微小孔与埋/盲孔化、导线精细化、介质层均匀薄型化,高频高速高…

Redis消息队列实现异步秒杀

Redis秒杀优化 改进秒杀业务,提高并发性能 需求: 1.新增秒杀优惠券的同时,将优惠券的信息保存到redis中 2.基于Lua脚本,判断秒杀库存,一人一单,决定用户是否抢购成功 3.如果抢购成功,将优惠…