java学习---异常

news2024/11/22 19:14:46

前言

由于被分母不能为0,所以代码到int y=n/m;会抛出异常,停止运行下去,但是如果是个庞大的代码,因为这种小错误而整个程序崩溃,会大大影响代码整体的健壮性,所以此时就需要我们得异常处理了

选中异常代码部分再使用ctrl+alt+t再选中try catch即可快捷异常处理

进行异常处理,就算出现异常也会接着执行如果不想看到报错。那么可以使用getmessage()方法接收错误然后打印出来

基本概念

Throwable实现了Serializable继承了Object,Throwable分为两类,Error和Exception,Error错误一旦发生无法使用异常处理解决,

运行异常

编译异常:

例题

try-catch处理机制

当f2方法出现异常,他就会通过throws抛出异常到调用它的f1,f1可以使用try-catch-final(没有final语法也是通过的)

处理异常,也可以抛出异常到调用它的main方法,main方法也可以选择使用try-catch-final处理异常,也可以抛出异常到JVM,如果到jvm就会到直接挂掉程序抛出错误

需要注意的是,如果没有写明是使用throws还是try-catch-final,他会磨人使用throws

try-catch异常处理

实例一

示例2

示例3

示例4

因为这段有两段异常,谁在前就报出谁的异常并且停止后面代码运行,所以此时打印出null异常信息就结束,不会到达下面的算数异常,如果,前面指针无异常那么就会到达算数异常,如果两个都异常并且想要他把异常信息都能打印出来那么就需要分开都使用catch接收一下如图

此时此刻可以都catch到异常,另外值得注意的是,父类Exception必须在其子类NUllPointerException,ArithmeticException后面,否则报错如图:

示例5:

这个发现异常,没有catch所以不会执行最后那句,执行完final就崩了

例题:

他先来到if(names[1].equals(“tom”),由于Sting数组并无赋值,随意每位元素都是null的,所以在此会报出NUllpointerException错误,然后直接来到catchNUllPointException那执行return 3,但是值得注意的是,final里的代码是必须执行的所以,必须在return 3时进入了final中运行里面的代码,最终返回了return4

该例题也是返回四,前面都是一个道理到NullPointerException,到return那不会立即返回,但是会执行++i的动作再进入final中的代码执行return++i

例题3

他到return++i;时,不会立即return出去,而是将i的值放到一个临时变量中存起来再去执行final中的代码,执行完之后再回到return那,拿上存在临时变量中的值返回回去,所以还是3

throws异常处理

示例2:

throws后除了就写该错误的异常FileNotFoundException,也可以写该错误类型的父类,Exception,也可以抛出多个异常,如图所示

示例3:如图,父类抛出的RuntimeException也是其类的子类抛出的NUllPointerException的子类,

子类抛出的要么是父类抛出的子类要么同一个

注意:

当一个方法调用了一个需要异常处理的方法且还不是运行异常,那么该方法就需要给调用的方法给出一种异常处理的方案,要么使用try-catch-final,要么使用throws。详情原因可以看到throws处理机制

如果是调用的是抛出运行异常的方法就无需在该方法中也要给一种处理方法,因为会默认处理

自定义异常

步骤:

新建一个类继承运行异常/编译异常,最后继承运行异常,因为运行异常会自己处理异常很方便

然后创建构造器,按要求自己选择

zai再然后就是去使用了,我们新建一个我们刚创建得自定义异常类,然后传入报错后需要前提的东西,然后再throw抛出就可以实现自定义异常操作了,其实从构造器不难看出。就是去调运父类的异常处理方式罢了

例题

先输出进入方法a然后他又抛出异常,但因为有final的原因没所以我们需要先执行final的代码再到外部去,那么这时就会被main中调用该方法时的异常处理中的catch接收并执行打印,后面同理可得

package com.abnormal.test02;

/*
@author:我与java相爱相杀---c语言梦开始的地方
今天又是努力学习的一天!!!!
编写应用程序EcmDef.java,接收命令行的两个参数(整数),计算两数相除。
计算两个数相除,要求使用方法cal(int n1,int n2)
对数据格式不正确(NumberformatException)、缺少命令行参数
(ArraylndexOutOfBoundsException)、除0进行异常处理(ArithmeticException)。
*/public class calculate {
    public static void main(String[] args) {
        //我们是直接输入数给main方法的形参数组String args[]
        //所以至此,可以判断一下输入的数是否是两个,超过就用throw抛出错误
        try {
      if (args.length!=2)
      {
          throw new ArrayIndexOutOfBoundsException("参数个数不对");

      }
       //由于我们得args数组为字符串数组,所以存放的类型也是字符型的,所以需要将他们类型转换一下
            int a=Integer.parseInt(args[0]);
            int b=Integer.parseInt(args[1]);
            int red=caculate_(a,b);//调用方法
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println(e.getMessage());
        }catch (NumberFormatException e){
            System.out.println("格式不对");
        }catch (ArithmeticException e){
            System.out.println("出现除0的情况");
        }


    }
    static int  caculate_(int a,int b)
    {

        return a/b;

    }
}

例题;

因为o向下转型为字符串了当然无法强转成Integer

因为,final必须执行所以输出了B,然后因为调用的方法他抛出了异常,。所以后面的那句代码不再执行,直接来到打印C的代码,输出C然后又因为这段代码已经通过try-catch异常处理了。所以程序会继续执行,最后输出D

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

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

相关文章

正则采集器——前端搭建

前端使用有名的饿了么管理后台,vue3版本vue3-element-admin,首先从gitee中克隆一个vue3-element-admin模板代码vue3-element-admin: Vue3 Element Admin开箱即用的中后台管理系统前端解决方案,然后在此基础上进行开发。 1、修改vite.config.…

【深入理解SpringCloud微服务】深入理解Ribbon原理并手写一个微服务负载均衡器

深入理解Ribbon原理并手写一个微服务负载均衡器 负载均衡器理解Ribbon原理手写一个微服务负载均衡器总体设计LoadBalanceClientHttpRequestFactorySimpleLoadBalanceClientSimpleLoadBalancerLoadBalanceRulespring.factories与LoadBalanceConfig 负载均衡器 在微服务架构里面…

应用层_计算机网络

文章目录 应用层HTTP用户与服务器的交互:cookieWeb缓存HTTP/2 SMTPDNS:因特网的目录服务P2P文件分发BitTorrentCDN内容分发网 应用层 应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文。应用层协议定义了以下内容: 交换的…

结构性设计模式-外观模式

一、外观模式 有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许…

算力共享:如何理解、标识与调控多层次算力资源的异构性和复杂性,实现智能算力网生态诸要素有效互操作?

目录 鹏程云主机和NPU计算服务器关系 NPU计算服务器 两者关系 结论 两种不同类型的处理器或计算单元 FPGA MLU NS3(Network Simulator version 3) 一、基本属性 二、主要功能与特点 三、应用与前景 对象存储和HDD存储 一、定义与特点 二、应用场景 三、总结 对…

培养前端工程化思维,不要让一行代码毁了整个程序

看《阿丽亚娜 5 号(Ariane 5)火箭爆炸》有感。 1、动手写项目之前,先进行全局性代码逻辑思考,将该做的事情,一些细节,统一建立标准,避免为以后埋雷。 2、避免使用不必要或无意义的代码、注释。…

把 网页代码 嵌入到 单片机程序中 2 日志2024/7/26

之前不是说把 网页代码 嵌入到 单片机程序中 嘛! 目录 之前不是说把 网页代码 嵌入到 单片机程序中 嘛! 修改vs的tasks.json配置 然后 测试 结果是正常的,可以编译了 但是:当我把我都html代码都写上去之后 还是会报错!!! 内部被检测到了,没辙,只有手动更新了小工具代码 …

低功耗单声道音频编解码器ES8311中文规格书介绍

特征 具有ADC和DAC的低功耗单声道音频编解码器ES8311。 ES8311 QFN20封装的外形和丝印 系统 • 高性能、低功耗多位 delta-sigma 音频 ADC 和 DAC • I2S/PCM 主站或从站串行数据端口 • 256/384Fs、USB 12/24 MHz 和其他非标准音频系统时钟 • I2C 接口 模数转换器 • 24…

28 列表创建与删除

使用 “” 直接将一个列表赋值给变量即可创建列表对象。 my_list [a, #, 128, [12], [], {2, }, {a: 1, b: 2}] print(my_list) print(type(my_list)) print(id(my_list[0]), id(my_list[-1]))可以使用 list() 函数把元组、range对象、字符串、字典、集合或其他可迭代对象转换…

PDF管理器和查看器PdfDing

什么是 PdfDing ? PdfDing 是一款自托管 PDF 管理器和查看器,可在多种设备上提供无缝用户体验。它设计精简、速度快,并且易于通过 Docker 设置。 功能特点 在多种设备上无缝基于浏览器的 PDF 查看使用标签整理 PDF干净且响应迅速的用户界面暗…

photoshop学习笔记——选区3

从窗口面板可以打开历史记录面板,历史记录面板保存了所有的操作 可以点击历史记录中某一条,回到当时的操作状态,也可以通过编辑中的 还原、重做、切换到最终状态逐步调整或直接跳到最终状态 回退之后,如果有新的操作,历…

GEE:设置ui.Map.Layer上交互矢量边界填充颜色为空,只显示边界

一、目标 最近在GEE的交互功能鼓捣一些事情,在利用buffer功能实现了通过选点建立一个矩形后,需要将该矩形填充颜色设为空,只留边界。 然而通过正常设置layer的可视化参数并不能实现这一目的。因此只能另辟蹊径,改为定义矢量边界…

项目开发实战案例 —— Spring Boot + MyBatis + Hibernate + Spring Cloud

作者简介 我是本书的作者,拥有多年Java Web开发经验,致力于帮助更多开发者快速掌握并运用Java Web技术栈中的关键框架和技术。本书旨在通过实战案例的方式,带领读者深入理解并实践Spring Boot、MyBatis、Hibernate以及Spring Cloud等热门技术…

reshape函数介绍及应用

reshape 函数在 MATLAB 中是一个非常有用的函数,通过重新排列现有元素来重构数组。它允许你重新调整数组(或矩阵)的尺寸,而不改变其数据。这个函数特别适用于当你需要将一个矩阵或数组从一种结构转换为另一种结构时,只…

【计算机网络】TCP负载均衡实验

一:实验目的 1:了解TCP负载均衡的配置。 2:学会使用NAT技术处理和外部网络的连接。 二:实验仪器设备及软件 硬件:RCMS交换机、网线、内网网卡接口、Windows 2019操作系统的计算机等。具体为:二层交换机1…

Redis:RDB持久化

1. 简介 实现类似照片记录效果的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是 快照。这样一来即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。 这个快照文件就称为RDB文件(dump.rdb)&#xff0c…

黑马头条Day10-定时计算热点文章、xxl-job

一、今日内容 1. 需求分析 目前实现的思路:从数据库直接按照发布时间倒序查询 问题: 如果访问量比较大,直接查询数据库,压力较大新发布的文章会展示在前面,并不是热点文章 2. 实现思路 解决方案:把热点…

Android 列表或网格形式展示大量数据:RecyclerView(二):缓存复用

一、缓存复用 为什么要了解这个呢?当我们rv出现卡顿,出现闪烁的时候,你应该如何优化呢? 为什么有时候onCreateViewHolder会被调用?onBindVilewHolder会被调用呢? visiable的使用,会导致重新绘制…

《“王栎鑫变张艺兴”?娱乐圈乌龙背后梦幻联动与未来合作遐想》

在这个充满惊喜与欢笑的娱乐圈里,每一个不经意的瞬间都可能成为网友热议的焦点,而《快乐老友记》的最新花絮,无疑为这个多彩的世界又添上了一抹亮丽的色彩。当“王栎鑫被路人认成张艺兴”这一话题如春风般拂过网络,不仅让两位才华…

【初阶数据结构】复杂度算法题篇

旋转数组 力扣原题 方案一 循环K次将数组所有元素向后移动⼀位(代码不通过) 时间复杂度O(n2) 空间复杂度O(1) void rotate(int* nums, int numsSize, int k) {while (k--) {int end nums[numsSize - 1];for (int i numsSize - 1; i > 0; i--) {nums[i] num…