Java--异常

Java的异常 运行时异常是指在程序运行过程中可能会出现的异常,这些异常通常是由程序逻辑错误引起的,而不是外部环境或用户输入造成的。这些异常通常是由外部环境或用户输入造成的,程序员需要在代码中显式地处理这些异常,以确保程序的稳定性和可靠性。在这个示例中,我们展示了一个可能抛出文件未找到异常和IO异常的情况,并使用try-catch块来捕获并处理这些异常。一般在service层处理受检异常,通过创建一个自定义的异常类,在需要的地方抛出自定义异常即可。可以直接在service层的最外层进行抛出异常或者直接捕获异常并处理异常。 阅读详情

Java–异常

1 异常分类

  • 在java中,异常对象都是派生于Throwable类的一个实例;如果java内置的异常类不能满足需求,用户可以自己创建自己的异常类
    在这里插入图片描述

  • Error 层次描述的是java运行时系统的内部错误和资源耗尽错误,如果出现这样的错误,除了通告给用户,还要尽力使程序安全终止

  • Exception

    • RuntimeException 程序错误导致的异常
      • 错误的类型转换
      • 数组访问越界
      • 访问null指针
    • IOException 程序本身没有问题,IO错误导致的异常
      • 试图在文件尾部后面读取数据
      • 试图打开一个不存在的文件
  • java将派生于Error类和RuntimeException类的异常成为非受查异常(unchecked),其他的异常程序受查异常(checked)

  • 非受查异常unchecked 这种异常是运行时发生,无法预先捕捉处理的。Error也是unchecked exception,也是无法预先处理的

  • 受查异常checked 可以检查到的异常,所有checked exception都是需要在代码中处理的。它们的发生是可以预测到的。比如IOException,或者一些自定义的异常。

常见的非检查异常
avator

常见的检查异常
avator

2 异常处理

  • Java异常机制用到的几个关键字:try、catch、finally、throw、throws。
    • try – 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
    • catch – 用于捕获异常。catch用来捕获try语句块中发生的异常。
    • finally – 无论发生异常,finally语句块总是会被执行,出现在catch代码块最后。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
    • throw – 用于抛出异常。
    • throws – 用在方法后,用于声明该方法可能抛出的异常。主方法上也可以使用throws抛出。如果在主方法上使用了throws抛出,就表示在主方法里面可以不用强制性进行异常处理,如果出现了异常,就交给JVM进行默认处理,则此时会导致程序中断执行。
//try-catch 捕获异常
try {
    code;
    more code;
}
catch(ExceptionType e) {
    handler for this type;
}
catch(ExceptionType d){
    handler for this type;
}finally{
    code;
}
// 这个方法有可能抛出一个IOException
public void read(String filename) throws IOException{
    InputStream in = new FileInputStream(filename);
    ...
}

  • try-catch-finally 执行顺序
    例子1
public static void main(String[] args){
    int result = test3();
    System.out.println(result);
}

public static int test3(){
    //try 语句块中有 return 语句时的整体执行顺序
    int i = 1;
    try{
        i++;
        System.out.println("try block, i = "+i);
        return i;
    }catch(Exception e){
        i ++;
        System.out.println("catch block i = "+i);
        return i;
    }finally{
        i = 10;
        System.out.println("finally block i = "+i);
    }
}

输出

try block, i = 2
finally block i = 10
2
  • 由于finally块始终会被执行的原因就是 编译器会把finally块中的代码复制两份分别放在try和catch的后面

例子2

public static int test4(){
    //finally 语句块中有 return 语句
    int i = 1;
    try{
        i++;
        System.out.println("try block, i = "+i);
        return i;
    }catch(Exception e){
        i++;
        System.out.println("catch block i = "+i);
        return i;
    }finally{
        i++;
        System.out.println("finally block i = "+i);
        return i;
    }
}

输出
try block, i = 2
finally block i = 3
3

最终会采用 finally 代码块中的 return 语句进行返回,而直接忽略 try 语句块中的 return 指令。

最后,对于异常的使用有一个不成文的约定:尽量在某个集中的位置进行统一处理,不要到处的使用 try-catch,否则会使得代码结构混乱不堪。

【异常】JAVA常见异常 受检异常需要在编译时处理,而非受检异常通常是在运行时抛出,并且不强制要求在编译时处理。这些异常在编译时必须要处理,通常需要使用 try-catch 块或在方法签名中声明。当应用程序试图通过字符串名称加载类时,如果在类路径中找不到对应的类,则抛出此异常。当方法在不适当的时刻被调用时抛出。当试图将字符串转换为数值类型时,如果字符串的格式不正确,则抛出此异常。通常在输入输出操作失败或中断时抛出,比如文件操作、网络通信等。这些异常在编译时不强制要求处理,通常在运行时抛出。当试图将对象强制转换为不兼容的类型时抛出。 阅读详情

相关推荐

Java 异常处理 -- Java 语言的异常、异常链与断言

世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。随着编程语言和软件的诞生,异常情况就如影随形地纠缠着我们,只有正确处理好意外情况,才能保证程序的可靠性。

栗筝i的博客 5211

BigData07_08 异常Exception

/* 作业3:题意: 编写程序用于计算两个正数的加减乘除结果 自定义一个异常类:MyException,当输入的数含有负数的时候, 抛出自定义异常对象,并捕获处理 */ import java.util.Scanner; //自定义异常类 class MyException extends Exception{ public MyExceptio...

weixin_30663471的博客 142

MATLAB2022b安装

图文并茂,手把手教会你怎么安装MATLAB2022b

1万+

java 加减乘除yichang_详谈Java中BigDecimal的一个除法异常

详谈Java中BigDecimal的一个除法异常如下所示:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.说明遇到除不尽的情况了,需要指定商的小数精度和舍入模式。比如:a=b.divide(c,2,RoundingMode.HALF_UP)...

weixin_42398141的博客 352

大智慧L2实时api接口的逐笔委托功能执行代码分享

用过l2行情接口的投资者应该都了解大部分的接口都是有逐笔委托功能的,那么大智慧L2实时api接口也有着很强大的逐笔委托功能,投资者可以通过这个逐笔委托功能可以看到一个股票的每天出现的全部委托指令,那么在这个逐笔委托功能里包含了委托价格、委托时间、委托量和委托方向四个要素!那么接下来小编就分享一下大智慧L2实时api接口的逐笔委托功能执行代码!那么在这里提个醒:投资者可以在大智慧L2实时api接口进行设置过滤,在逐笔委托列表里,就仅仅只会显示超过设置委托量或委托额的委托单,而不再显示小单。

Qq_2037696191的博客 3732

银河麒麟V10SP1系统盘瘦身指南:如何制作一个只含必需软件的轻量级安装镜像

本文详细介绍了银河麒麟V10SP1系统盘瘦身的完整流程,从依赖分析到最小化镜像构建,帮助用户创建只含必需软件的轻量级安装镜像。通过智能包筛选、KickStart定制和性能优化,显著减少ISO体积和部署时间,适用于服务器批量部署等场景。

weixin_26765287的博客 404

hexo+github搭建博客(手把手超详细)

hexo+github搭建博客 hexo+github搭建博客 1. Git配置和SSH链接 2. hexo安装 3. 修改主题 4. 部署 5. 问题 1. Git配置和SSH链接 准备 首先注册github账号github 安装node.js 下载 安装Git 下载 Git配置 桌面右键 Git bash here 进行账户名和邮箱,账户名和邮箱就是你github的账户名和邮箱 格式: git config --global user.name "你的账户名“ git c

怡红院 2819

VSCode+Typst零配置写作指南:5分钟搞定论文排版环境(含实时预览技巧)

本文介绍如何利用VSCode和Typst快速搭建零配置的论文排版环境,5分钟内实现高效写作与实时预览。Typst作为轻量级排版工具,结合LaTeX的精度与现代化语法,显著提升学术写作效率,特别适合需要频繁调整格式的研究人员。

weixin_30642561的博客 109

Jersey框架:统一异常处理

为什么要统一处理异常? 在企业应用中,后端响应前端请求必须要带响应状态码,如状态码200表示请求正常响应,403代表权限认证失败,404代表资源不存在等。在Jersey框架中带响应状态码的响应一般都要通过Response对象实现,举例如下。 @Path("/book") public class Book { @Path("") @GET public Response g...

机器熊的技术大杂烩 1559

三菱FX5U气缸控制功能块(完整ST源代码+示例程序)

如果机器包含100个气缸,我们只需要修改数组的元素数量就可以了,效率非常的高。待续....博途PLC 面向对象系列之“双通气缸功能块“(SCL代码)_plc面向对象-优快云博客文章浏览阅读667次。本文介绍了博途PLC中面向对象编程的应用,重点讲解了双通气缸的功能块设计,包括双通电磁阀功能块、双通气缸的UDT数据类型以及SCL代码实现。同时,对比了双通与单通电磁阀的差异,并讨论了将单通气缸改造为双通气缸的方法,强调了双通气缸在安全性上的优势。

RXXW_Dor的博客 1028

STM32cubemx配置驱动DHT11模块

本篇文章将带大家学习使用DHT11湿温度模块,使用这个模块可以获取当前的温度和湿度数据。DHT11可以用于智能家居,蔬菜大棚等项目当中适用范围广。DHT11 是一种数字式温湿度传感器,由杜邦公司推出。它可以测量环境中的温度和湿度,并将测量结果以数字形式传输给微控制器或其他电子设备,适用于通过数字信号读取环境温湿度的应用场景。DHT11 传感器使用单总线数据交换协议,可以通过一个 I/O 引脚进行控制和数据传输。

m0_49476241的博客 5912

Unchecked Exception和Checked Exception的区别

Unchecked Exception:值得是程序的逻辑错误,程序的疵瑕,并且运行的时候无法恢复。 包括Error以及RuntimeException及其子类,如:OutOfMemoryError, UndeclaredThrowableException,IllegalArgumentException,IllegalMonitorStateException, NullPo...

weixin_30326515的博客 221

韩版传奇 2 源码分析与 Unity 重制(一)服务端 TCP 状态管理

该专题将会分析 LOMCN 基于韩版传奇 2,使用 .NET 重写的传奇源码(服务端 + 客户端),分析数据交互、状态管理和客户端渲染等技术,此外笔者还会分享将客户端部分移植到 Unity 和服务端用现代编程语言重写的全过程。本文重点介绍了服务端的启动链路、网络初始化和连接处理这三个过程,并简要分析的游戏循环的实现与数据包处理,在下一篇文章中,我们会从客户端角度分析从游戏启动、登录、游戏开始和基础游戏交互的全流程。

东方猫的博客 2497

Java异常

Java异常的讲解

熵减玩家 987

Python爬虫实战:模拟登录知乎 – 通过加密参数和验证码实现自动登录

通过本篇博客的讲解,我们学习了如何通过 POST请求 和 验证码识别,模拟登录知乎并爬取用户信息、问题数据。随着爬虫技术的发展,面对更复杂的反爬虫机制,我们可以不断调整策略,以绕过这些防护,实现数据的自动化抓取。

2201_76125261的博客 731

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【java】认识异常,理解异常,掌握异常

文章目录 1️⃣异常的背景 1.认识异常 2.避免异常的两种方式 2️⃣异常的基本用法 1.基本语法 2.多个 catch 块 3.使用共同父类 Exception 捕获异常 4.关于异常的错误输出 5.关于异常的调用链 6.关于 finally 代码块 7.使用 try 回收资源 8.一组关键字:throw 和 throws 9.异常处理流程总结 3️⃣异常体系结构 受查异常 4️⃣自定义异常类

Welcome to my blog. 1071

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【Java】认识异常

自定义异常:我们自己定义维护符合我们实际需要的异常结构。//登入if(!System.out.println("用户名错误!");if(!System.out.println("密码错误!");他的密码输入错误,结果输出如上。如果我们想要在我们输错时报出异常,这时,我们可以自己定义一个异常,用户名输入错误异常和密码输入错误异常;我们可以定义一个输入错误异常类和密码输入错误异常类来继承运行时异常super();super(m);super();super(m);

2301_80543957的博客 2258

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java——异常

在我们日常生活中,我们可能会生病,会头疼,会肚子疼,打球的时候也可能会受伤。再程序中也是一样,运行时难免会出现一些奇奇怪怪的问题。在Java中,将程序执行过程中发生的不正常行为称为异常。算数异常//算数异常数组越界异常//数组越界异常空指针异常//空指针异常在Java中不同类型的异常,都有与其对应的类来进行描述。程序先执行 try 中的代码如果 try 中的代码出现异常, 就会结束 try 中的代码, 看和 catch 中的异常类型是否匹配.

m0_74100417的博客 1550

JAVA 异常

明白异常到底是什么?—>异常就是类知道异常的体系 / 知道异常的分类在编写程序时,如果程序中出现错误,此时就需要将错误的信息告知给调用者,比如:参数检测。在Java中,可以借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者。具体语法如下:throw new XXXException(“异常产生的原因”);throw new NullPointerException("传递的数组为null");

2301_80934700的博客 1409

java java 检查型异常_Java异常——异常分类、声明检查型异常

一、异常的分类1、在Java程序设计语言中,异常对象都是派生于Throwable类的一个类的实例。如果Java的内置类不能满足需求,用户还可以创建自己的异常类。2、异常分为两支,Error和Exception。Error类层次描述了Java运行时系统的内部错误和资源耗尽错误。这种情况很少出现,如果出现了这种情况,就只能通知用户并妥善地终止程序。Exception类是应该重点关注的层次结构。3、Ex...

weixin_29688535的博客 3145

【Java异常】Java异常监控重要手段 --异常链

异常链”无论是在框架源码中还是在日常项目开发中,都是一项非常重要的对异常处理的手段。以下摘抄自《Java编程思想》对异常链的介绍:常常会想要在①捕获一个异常后抛出另一个异常②并且希望把原始异常的信息保存下来,这被称为异常链。略。

qq_43783527的博客 2136

java异常判断_Java异常类

异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。Java异常类层次结构图:在 Java 中,所有的异常都有一个共同的祖先 ...

weixin_42472941的博客 5344
上一篇: Http常见错误码你还没学会?
下一篇: Java-类加载过程
广州彭于晏
博客等级 码龄8年 10粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值