CUMT--Java复习--异常

news2024/9/25 1:20:45

目录

一、异常

1、概述

2、异常处理机制

二、捕获异常

(1)try...catch语句

(2)try...catch..finally语句

(3)自动关闭资源的try语句

(4)其他

三、抛出异常

(1)throw抛出异常对象

(2)throws抛出异常序列

四、自定义异常类


一、异常

1、概述

(1)异常类可以分为两种:

        错误:虚拟机相关问题,导致应用程序中断,程序无法自动恢复或捕获,如系统崩溃、虚拟机错误、动态链接失败。

        异常:因程序编码错误或外在因素导致的问题,能够被系统捕获并进行处理,不会产生应用程序中断,如除以0,负数开平方根,空指针访问。

(2)Throwable是所有异常类的父类,Error和Exception都继承于此父类,本章对异常的处理一般调用Exception异常类。

(3)Exception异常分为两种类型:

        非检查型异常:编译器不要求强制处置的异常,一般是因为编码或设计不当产生,异常可以避免。

        检查型异常:程序运行时因外界因素而导致的异常。

异常分类类名说明
非检查型异常ArrayIndexOutOfBoundsException数组下标越界异常
NullPointerException        空指针访问异常
NumberFormatException数字格式化异常
ArithmeticExcetion算术异常,如除以0
ClassCastException类型转换不匹配异常
SQLException        数据库访问异常
检查型异常IOException文件操作异常
FileNotFoundException文件不存在异常
ClassNotFoundException类没找到异常

2、异常处理机制

        当程序执行期间产生异常,会中断正常指令流,所以我们要对异常进行相关处理操作。

        异常处理机制有两种:

(1)使用try...catch捕获异常,将产生异常的代码放在try之后,如果遇到异常则停止执行try块的代码,跳到catch中进行处理。

(2)使用throws进行抛出异常,若当前方法不知道如何处理发生的异常,则由上一级调用者进行处理,可在上一级定义方法时使用throws声明抛出异常。

        异常处理机制优点:

(1)异常处理代码和正常的业务代码分离,提高程序的可读性,简化程序结构,保证程序的健壮性。

(2)对不同异常进行分类,保证不同情况下能够对应不同的异常类,充分发挥类的可扩展性和可重用性的优势。

(3)可以对程序产生的异常进行灵活处理,如果有能力处理异常则交给catch捕获并处理,若不然则使用throws声明抛出异常,由上一级调用者处理异常。

二、捕获异常

(1)try...catch语句

        try...catch语句中,catch可以有若干个进行捕获不同类型的异常,catch括号内的类型表示捕获的特定异常类型,而Exception代表捕获任意异常,在Java语言中当遇到一个异常时就会抛出异常并中断程序。

        如何访问异常信息?

        getMessage():返回该异常的详细描述字符串。

        printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。

        printStackTrace(printStream s):将该异常的跟踪栈信息输出到指定输出流。

        getStackTrace():返回该异常的跟踪栈信息。

        注意:try和catch语句块用大括号来限制语句。

        对于下面代码中,try语句中按顺序存在两个异常,算术异常和类型转换异常,当遇到第一个算术异常时抛出异常,并中断程序,所以输出只有算术异常的提醒。

public class test {
    public static void main(String args[])
    {
        try{
            int i=10/0;
            System.out.println(i);
            String s1="apple";
            System.out.println(Integer.parseInt(s1));
        }
        catch(ArithmeticException e)       //算术异常
        {
            e.printStackTrace();
        }
        catch(NumberFormatException e)     //类型转换异常
        {
            e.printStackTrace();
        }
        catch(Exception e)                 //任意异常
        {
            e.printStackTrace();           
        }
    }
}

输出: 

        / by zero

(2)try...catch..finally语句

        Java异常处理机制中,通过finally块,无论try块中代码是否出现异常,也不管catch块是否执行,以及是否在try...catch中存在return语句,都会调用finally语句,一般写的是回收代码,回收物理资源。

        除非在try...catch中使用sys.exit()强制退出应用程序,否则一定会执行finally代码。

//如上面代码后添加:
finally
{
    System.out.println("回收资源");
}

(3)自动关闭资源的try语句

        在Java7之后增加了这项功能,其实所谓的自动关闭资源就是隐式表达的finally语句,如何隐式表达finally语句呢,就要添加在try后面添加小括号,小括号中一般是初始化一个或多个资源,如打开文件,在try...catch语句结束后,小括号内资源会自动关闭,也就是隐式的执行了一步finally语句,用来回收资源。

        下面代码由于不存在1.txt文件,所以最后返回找不到指定的文件,fls文件输入流也会被收回。

try(FileInputStream fls=new FileInputStream("1.txt"))
{
      System.out.println(fls.read());
}
catch(IOException e)
{
      System.out.println(e.getMessage());
}

(4)其他

        对于try...catch异常语句可以进行嵌套操作,但也会降低程序的可读性。

        对于多异常捕获问题,可以在catch后面的小括号里添加若干异常类,并用 “ | ” 进行间隔。

try
{
    ...
}
catch(ArthimeticException | NumberFormatException e)
{
    ...
}

三、抛出异常

(1)throw抛出异常对象

        throw语句抛出一个异常实例对象,类似于建立一个匿名的异常实例对象,throw语句一般写在try语句的条件语句中,如果发生该条件则调用catch捕获异常,并抛出throw中的语句。

        下面程序中,如果年龄小于0,则抛出异常,输出请输入一个合法年龄。

public class age {
   public static void main(String[] args)
   {
        while(true)
        {
            Scanner sc=new Scanner(System.in);
            int age=sc.nextInt();
            try
            {
                if(age<0)
                {
                    throw new Exception("请输入一个合法年龄: ");   //若年龄小于0抛出异常
                }
                else
                    break;
            }
            
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
        System.out.println("end!");
        
   } 
}

(2)throws抛出异常序列

        一般会把可能发生异常的代码写入方法中,在该方法的方法名后面添加throws 异常类。

        下面代码为第一个实例的改编,仍然输出分母不为0的异常。

public class demo {
    public static void main(String[] args)
    {
        try{
            throwsfc();             //调用抛出异常的方法
        }
        catch(ArithmeticException e)
        {
            e.printStackTrace();
        }
        catch(NumberFormatException e)
        {
            e.printStackTrace();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    public static void throwsfc() throws NumberFormatException,ArithmeticException,Exception
    {
        int i=10/0;
        System.out.println(i);
        String s1="apple";
        System.out.println(Integer.parseInt(s1));
    }
}

四、自定义异常类

        自定义都继承Exception类或RuntimeException类,抛出异常时候为throw new 自定义异常类()的结构,而不是传统的Exception类。

public class AgeException extends Exception {
   public AgeException(String msg) 
   {
        super(msg);        //继承父类的构造方法
   }
}

        由于调用父类的构造方法,所以抛出异常输出仍然为“请输入一个合法年龄” 

throw new AgeException("请输入一个合法年龄: ");   //抛出异常

参考书籍:《Java 8 基础应用与开发》QST青软实训编

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

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

相关文章

ICC2:illegal dimension route

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 illegal dimension route DRC的违例常出现的先进工艺里&#xff0c;部分层次在水平方向和竖直方向有宽度梯度的要求。如下示例: 意思就是竖直方向&#xff08;yLegalDim&#x…

yolov5障碍物识别-雪糕筒识别(代码+教程)

简介 这是一个检测交通锥并识别颜色的项目。我使用 yolov5 来训练和检测视锥细胞。此外&#xff0c;我使用 k 均值来确定主色&#xff0c;以对锥体颜色进行分类。目前&#xff0c;支持的颜色为红色、黄色、绿色和蓝色。其他颜色被归类为未知。 数据集和注释 我使用了一个自收…

会声会影2024永久汉化中文版本百度网盘下载

会声会影2024破解版免费下载是经过修改的视频剪辑软件&#xff0c;它能够免费为您提供很多功能。会声会影2024免费下载提供超过 1500 种独特的效果&#xff0c;可让您提升自我。会声会影破解版是用于是制作独一无二的视频的最强大、功能最全的软件。 它是一个简单而快速的视频编…

漏洞复现-log4j2原理分析及CVE-2021-44228

log4j2原理分析及漏洞复现 0x01 log4j2简介 Log4j2 是一个用于 Java 应用程序的成熟且功能强大的日志记录框架。它是 Log4j 的升级版本&#xff0c;相比于 Log4j&#xff0c;Log4j2 在性能、可靠性和灵活性方面都有显著的改进。 Log4j2 特点 高性能&#xff1a;Log4j2 使用异步…

JVM垃圾收集器三色标记算法

垃圾收集算法 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法&#xff0c;这种算法没有什么新的思想&#xff0c;只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 比…

【华为OD机试真题2023CD卷 JAVAJS】加密算法

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 加密算法 知识点DFS搜索 题目描述: 有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下: 1. 明文为一段数字串由0~9组成 2. 密码本为数字0~9组成的二维数组 3. 需要…

将Abp默认事件总线改造为分布式事件总线

文章目录 原理创建分布式事件总线实现自动订阅和事件转发 使用启动Redis服务配置传递Abp默认事件传递自定义事件 项目地址 原理 本地事件总线是通过Ioc容器来实现的。 IEventBus接口定义了事件总线的基本功能&#xff0c;如注册事件、取消注册事件、触发事件等。 Abp.Events…

关键字:void关键字

在编程中&#xff0c;void 是一个关键字&#xff0c;用于表示函数没有返回值。具体来说&#xff0c;void 关键字的作用如下&#xff1a; 函数声明&#xff1a;在函数声明中使用 void 关键字可以指定函数没有返回值。例如&#xff1a; 这表示 func() 函数不返回任何值。 函数…

英国版咸鱼「Depop」,小众二手跨境电商平台如何入驻?

对标美国二手闲鱼平台Mercia,PoshMark、东南亚Etsy&#xff0c;Depop是英国的一个面向创意人群的二手时尚市场&#xff0c;类似于Instagram&#xff0c;但更专注于买卖二手服装、配饰和艺术品。 近一年来,受通胀和高利率影响,英国的经济几乎一直处于停滞状态&#xff0c;零售市…

亚信安慧AntDB数据库——助力5G计费核心替换,全面自主可控

数字经济时代&#xff0c;5G以更快、更丰富、更智能的连接方式服务于各行各业。AntDB数据库&#xff0c;源于亚信科技&#xff0c;自2008年起成功落地全国24个省份的中国移动、中国电信、中国联通和中国广电等运营商项目&#xff0c;为数字化服务和信息化基础建设提供支持。 在…

【开源软件】最好的开源软件-2023-第四名 vaadin

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

DAPLink源码固件编译与制作

DAPLink源码固件编译与制作 ✨这里以Air/stm32f103cbt6固件编译为例。&#x1f4cc;DAPLink源码地址&#xff1a;https://github.com/ARMmbed/DAPLink&#x1f516; 如果不想自己生成&#xff0c;可以使用合宙提供的现成的工程以及固件&#xff1b;https://gitee.com/openLuat/…

以太网的数据速率、互连介质和物理层规范

以太网协议连接已经广泛应用于我们周围的大量事物或设备中。过去&#xff0c;以太网用在局域网 (LAN) 和城域网 (MAN) 中&#xff0c;而如今&#xff0c;由于以太网的普及和多种优势&#xff0c;例如巨大的生态体系和日益增长的规模经济&#xff0c;它越来越多地用在存储和汽车…

手拉手全栈EasyExcel实现web上传下载

环境介绍 技术栈 springbootmybatis-plusmysqleasyexcel 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性…

思码逸签约 | 与致景科技达成战略合作,共同推动研发效能提升

此次合作旨在利用思码逸的先进度量和分析能力&#xff0c;帮助致景科技进一步完善其研发度量指标&#xff0c;从而提升整体研发效能。 本次合作的核心&#xff0c;是致景科技对思码逸在代码当量价值评估方面的高度认可。合作将专注于两个主要方面&#xff1a;一方面&#xff0…

(数据结构)单链表的插入删除

代码实现 #include<stdio.h> #include<stdlib.h> typedef struct LNode {int data;struct LNode* next; }LNode, * LinkList; //创建头结点 LNode* InitList(LinkList L) {L (LNode*)malloc(sizeof(LNode));if (L NULL){printf("申请头结点失败\n");…

鸿道(Intewell)工业操作系统推动新型工业化时代下的产教融合

为进一步落实推进粤港澳大湾区建设的国家战略&#xff0c;加速新一代信息技术与制造业深度融合&#xff0c;提升控制科学与工程学科建设水平&#xff0c;华南理工大学自动化科学与工程学院召开粤港澳大湾区机器智能产教融合论坛暨控制学科建设研讨会。作为国内新型工业操作系统…

SpringSecurity深度解析与实践(1)

目录 引言1. SpringSecurity1.1 SpringSecurity简介1.2 SpringSecurity工作原理1.3.特点 2. SpringSecurity的快速使用总结 引言 SpringSecurity作为Spring框架中的一个重要组成部分&#xff0c;扮演着保护应用程序安全的重要角色。本文将深入探讨SpringSecurity的原理、使用方…

比例导引(PNG)-Matlab 程序

本文提供比例导引的matlab程序&#xff0c;想要看理论的可以看书《导弹飞行力学》或者我的博客 比例导引详解 代码 %% 三维比例导引末制导clc;clear; close all;%% 设置导弹初始参数和目标参数% 总步长 length 1000000; x_m zeros(length,1); y_m zeros(length,1); z_m z…

【UML】第9篇 类图

目录 一、类图的概念 二、类图的主要作用 三、类图的构成 3.1 类的名称 3.2 抽象类&#xff08;Abstract Class&#xff09; 一、类图的概念 类图是UML模型中静态视图。它用来描述系统中的有意义的概念&#xff0c;包括具体的概念、抽象的概念、实现方面的概念等。静态视…