Java零基础 - try-catch-finally和throw语句

哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  在Java开发中,异常处理是一个非常重要的概念。当代码运行时,可能会发生各种各样的错误,如输入错误、网络连接问题等。为了使程序更加健壮和可靠,Java提供了try-catch-finally和throw语句来处理异常情况。本文将介绍这些关键字的使用方法和相关概念。

摘要

  本文将详细解析Java中的try-catch-finally和throw语句,包括其语法、应用场景、优缺点等。通过具体的案例和代码解析,帮助读者理解和掌握异常处理的基本原理和写法。

简介

  在Java中,try-catch-finally和throw语句用于处理异常。异常是程序在运行时可能遇到的错误情况,如除零错误、空指针引用等。通过使用try-catch-finally块,可以捕获并处理这些异常,保证程序的正常运行。throw语句用于手动抛出异常,使得程序可以主动处理错误情况。

源代码解析

以下是一个简单的示例代码,演示了try-catch-finally和throw语句的基本用法:

package com.example.javase.ms.txy;

/**
 * @Author ms
 * @Date 2023-12-21 18:44
 */
public class ExceptionExample {
    public static void main(String[] args) {
        try {
            // 可能引发异常的代码块
            int result = divide(10, 0);
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            // 捕获并处理异常
            System.out.println("Error: " + e.getMessage());
        } finally {
            // 无论是否发生异常,都会执行的代码块
            System.out.println("Finally block executed.");
        }
    }

    public static int divide(int dividend, int divisor) {
        if (divisor == 0) {
            // 手动抛出异常
            throw new ArithmeticException("Divisor cannot be zero.");
        }
        return dividend / divisor;
    }
}

  在上述代码中,try块包含了可能引发异常的代码,在这里是一个除法计算。如果除数为零,则会抛出一个ArithmeticException异常。catch块用于捕获并处理异常,这里只是简单地打印出错误信息。finally块是无论是否发生异常都会执行的代码块,用于释放资源或执行一些必要的清理工作。

测试结果如下:

在这里插入图片描述

代码分析:

  该代码定义了一个名为ExceptionExample的类,其中包含一个名为main的静态方法。

  在main方法中,try-catch-finally结构用于处理可能发生异常的代码块。在try块中,调用了一个名为divide的静态方法,并将返回结果赋值给result变量。如果在divide方法中发生了除零异常,即divisor为0,那么将会抛出一个ArithmeticException异常。在catch块中,捕获并处理了ArithmeticException异常,将异常的错误消息打印输出。无论是否发生异常,finally块都会执行,打印输出"Finally block executed."。

  divide方法接受两个参数dividend和divisor,如果divisor为0,则会手动抛出一个带有错误消息"Divisor cannot be zero."的ArithmeticException异常。如果divisor不为0,则计算dividend除以divisor的结果并返回。

  总结:该程序演示了异常的捕获和处理机制。在可能引发异常的代码块中使用try块,通过catch块捕获异常并进行处理,最后使用finally块确保一定会执行的代码。

应用场景案例

  try-catch-finally和throw语句可以应用于各种异常处理场景。以下是一些常见的使用案例:

  • 文件操作:当读取或写入文件时,可能会发生文件不存在、读写权限受限等异常情况,可以使用try-catch-finally来处理这些异常并进行适当的处理。
  • 网络通信:在网络通信中,可能会发生连接超时、数据传输错误等异常,使用try-catch-finally来捕获并处理这些异常,可以保证程序的稳定性。
  • 用户输入验证:当用户输入不符合要求时,可以抛出自定义异常并使用try-catch语句来验证输入是否合法,从而提高程序的健壮性。

优缺点分析

  try-catch-finally和throw语句的使用有以下优点和缺点:

优点:

  • 提高程序的健壮性:通过捕获和处理异常,可以防止程序崩溃或产生不可控的错误。
  • 方便调试和定位问题:通过try-catch块捕获异常后,可以输出详细的错误信息,便于开发人员定位和解决问题。
  • 灵活处理异常情况:可以根据具体的业务需求,自定义异常类型并抛出,从而实现个性化的异常处理逻辑。

缺点:

  • 增加代码复杂性:使用try-catch-finally和throw语句会增加代码量和阅读难度,尤其是在多层嵌套的情况下。
  • 可能影响性能:由于异常的捕获和处理需要额外的开销,可能会对程序的性能产生一定的影响。

类代码方法介绍

  在上述示例代码中,我们定义了一个名为ExceptionExample的类,其中包含了一个静态方法divide用于进行除法计算。

public static int divide(int dividend, int divisor) {
    if (divisor == 0) {
        throw new ArithmeticException("Divisor cannot be zero.");
    }
    return dividend / divisor;
}

  这个方法接收两个参数,分别是被除数和除数。在方法体中,首先判断除数是否为零,如果是,则抛出一个ArithmeticException异常。否则,进行除法计算并返回结果。

测试用例

  为了验证代码的正确性,我们可以编写一些测试用例。以下是一个简单的测试用例,使用main函数进行测试:

package com.example.javase.ms.txy;

import static com.example.javase.ms.txy.ExceptionExample.divide;

/**
 * @Author ms
 * @Date 2023-12-20 12:20
 */
public class ExceptionTest {

    public static void main(String[] args) {
        try {
            int result = divide(10, 2);
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            System.out.println("Error: " + e.getMessage());
        } finally {
            System.out.println("Finally block executed.");
        }
    }
}

  在这个测试用例中,我们调用了divide方法进行除法计算,并将结果打印出来。由于除数不为零,不会发生异常,所以最终会打印出正确的结果。同时,finally块也会执行并打印出相应的信息。

结果展示:

在这里插入图片描述

代码分析:

  根据给定的代码分析如下:

  1. 主函数为程序的入口,接收一个String数组作为参数。
  2. try-catch-finally是异常处理的结构,用于捕获可能发生的异常并进行相应的处理。
    • try块中的代码是可能会发生异常的代码块。
    • catch块用于捕获并处理异常,根据捕获到的异常类型进行相应的处理操作。
    • finally块中的代码是无论是否发生异常都会被执行的代码块。
  3. 在try块中,调用了divide方法并将其返回值赋给变量result。
  4. 如果divide方法执行过程中出现了ArithmeticException类型的异常,会被catch块捕获并执行其中的代码。
    • 在catch块中,打印出错误信息,即异常对象的getMessage()返回值。
  5. 无论是否发生异常,finally块中的代码都会被执行。
    • 在finally块中,打印出"Finally block executed."的信息。
  6. 如果没有发生异常,程序会继续执行try块后面的代码。
  7. 最后将结果打印出来。

  综上所述,该代码的功能是调用divide方法进行除法计算并将结果打印出来。如果发生了除以0的情况,则捕获该异常并打印出错误信息,最后无论是否发生异常,都会打印出"Finally block executed."的信息。

全文小结

  本文介绍了Java中异常处理的核心概念:try-catch-finally和throw语句。通过具体的示例代码和解析,帮助读者理解和掌握这些关键字的使用方法和原理。同时,我们还讨论了异常处理的应用场景、优缺点和相关注意事项。通过合理地使用异常处理机制,可以使程序更加健壮和可靠。

总结

  异常处理是Java开发中不可或缺的一部分,通过使用try-catch-finally和throw语句,可以捕获和处理各种可能发生的错误情况。合理地处理异常可以提高程序的健壮性和可靠性,同时也方便调试和定位问题。当然,过度使用异常处理机制可能会增加代码复杂性和影响程序性能,因此需要在具体的开发场景中合理地选择使用。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

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

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

相关文章

语义化与自动化——第三代指标平台两大核心能力详解(内含QA)

【作者简介】杜雪芳,Aloudata 合伙人兼首席业务架构师。12 年数据业务从业经验,3 年管理咨询经验。历任阿里集团淘宝商业分析负责人、阿里音乐商业智能中心负责人、蚂蚁集团用户增长分析与洞察产品负责人。在数据体系搭建、数据分析、用户标签建设、用户…

百度给程序员发放京东购物卡,注册即送30元购物卡

活动真实有效: 添加图片注释,不超过 140 字(可选)https://comate.baidu.com/?inviteCodeexf818mt 活动参与流程说明:点击下面的邀请链接进行登陆,注意一定要邀请链接,因为通过链接注册可以获…

windows使用sarama往kafka发送数据

首先先在本地安装好java,打开cmd,输入java -version,出现以下信息代表java安装成功。 之后依次安装zookeeper和kafka并启动,详细安装与启动步骤可参考: 【Kafka】Windows下安装Kafka(图文记录详细步骤&…

STM32采集电池电量方法实现

一、项目简介 若设备接了锂电池,可以通过STM32的ADC采集电池的电量。锂电池为3节3.7V的单节串联,整体电压大约为12V。 二、实现过程 1、由于STM32采集的电压范围为0-3.3V,所以无法直接采集锂电池的电压,这里可以用外接分压电阻的…

新建Flutter工程修改配置

由于国内 网络环境原因, 新建 flutter工程的 配置文件 需要修改几个地方, 1. gradle-wrapper.properties 问题:Exception in thread "main" java.net.ConnectException: Connection timed out: connect: 解决方法&#…

已解决(亲测可行):pycharm打开项目、关闭项目进度缓慢或者卡住

1.问题描述 pycharm打开项目、关闭项目进度缓慢或者卡住,自己体会。 2. 解决方案 方案一 在帮助里面 更改内存设置里面将最大堆大小调大。并保存重启。如果还卡,请看方案二。 方案二 安装下述顺序进行操作:帮助 -> 查找操作 -> 输入 注册表 -> 不勾选 ide.…

应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控

作者:古琦 在现代软件架构中,微服务已成为构建可扩展和灵活应用程序的流行方式。每个微服务负责应用程序的一部分功能,它们共同工作以提供完整的服务。由于微服务架构的分散特性,监控变得至关重要,有效的微服务监控是…

3.4日java作业---华为手机小米手机入库问题

​​​​​​​ ​​​​​​​ ​​​​​​​ 【案例】 任务描述 现要对华为和小米两种手机产品进行入库,本案例要求编写一个模拟商品入库的程序,可以在控制台输入入库商品的数量,最后打印出仓库中所有商品详细信息…

去除PDF论文行号的完美解决方案

去除PDF论文行号的完美解决方案 1. 遇到的问题 我想去除论文的行号,但是使用网上的Adobe Acrobat裁剪保存后 如何去掉pdf的行编号? - 知乎 (zhihu.com) 翻译时依然会出现行号,或者是转成word,这样就大大损失了格式&#xff0c…

day13_微服务监控Nginx(微服务集成SBA)

文章目录 1 微服务系统监控1.1 监控系统的意义1.2 SBA监控方案1.3 SBA实战1.3.1 创建SBA服务端1.3.2 微服务集成SBA 1.4 微服务集成logback1.5 配置邮件告警 2 Nginx2.1 Nginx简介2.2 下载和安装2.2.1 方式1:window本地安装2.2.1.1 下载2.2.1.2 安装2.2.1.3 目录结构…

扫地机器人

题目描述 小明公司的办公区有一条长长的走廊,由N个方格区域组成,如下图所示。 R r 走廊内部署了K台扫地机器人,其中第台在第A,个方格区域中。已知扫地机器人每分钟可以移动到左右相邻的方格中,并将该区域清扫干净。 请…

Java 学习和实践笔记(29):super关键字的作用

1. super“可以看做”是直接父类对象的引用。可通过super来访问父类中被子类覆盖的方法或属性,这就是super关键字的作用。 在Java 学习和实践笔记(24):方法重写(override)-CSDN博客中提到,子类可以重写父类…

虚拟机中已经设置好了共享文件夹却不显示

参考链接: 小知识:ubuntu设置共享文件夹之后却找不到的解决方法_ubuntu共享文件夹设置后找不到-CSDN博客 1、输入以下指令,确定共享文件夹是否设置成功 vmware-hgfsclient 若是设置成功,会输出贡献文件夹的名字 2、如果已经设置…

设计模式之策略模式实践

设计模式之策略模式实践 先了解一下策略模式的定义是什么?解决什么问题 策略模式是一种行为设计模式,它定义了一系列算法,将每个算法封装成一个类,并使它们可以互相替换。策略模式允许客户端在运行时从可互换的算法中选择一个&a…

Jetpack Room

增删改查实战代码 1.先导入依赖 val roomVersion "2.6.1"implementation("androidx.room:room-runtime:$roomVersion")annotationProcessor("androidx.room:room-compiler:$roomVersion")2.创建实体类 package com.tiger.chapter06.entity;imp…

vulhub中ThinkPHP 多语言本地文件包含漏洞复现

ThinkPHP是一个在中国使用较多的PHP框架。在其6.0.13版本及以前,存在一处本地文件包含漏洞。当多语言特性被开启时,攻击者可以使用lang参数来包含任意PHP文件。 虽然只能包含本地PHP文件,但在开启了register_argc_argv且安装了pcel/pear的环…

腾讯云轻量服务器Windows系统使用IIS实现公网直链访问文件

windows方便所以服务器装的windows系统,windows默认不能分享文件直链,只要用IIS建个站点就行了 先弄一台有公网ip的windows系统服务器打开服务器管理器,添加这个 打开IIS右键添加网站 程序池默认,路径选个文件夹作为网站根目录 …

JavaSE(上)-Day1

JavaSE(上)-Day1 CMD终端的常见命令配置环境变量的作用?高级记事本安装(略,正版收费)各个语言的运行方式区别为什么Java可以实现跨平台?JDK和JRE的认识JDK是什么?由什么组成JRE是什么?由什么组…

C++ 基础专题容器(list)

前言 本文主要是总结常用容器&#xff0c;加深理解以及实际使用。相关完整网站参考&#xff1a;C函数和容器网站 本文主要是关注C11中的定义和用法。 list 一、类和定义 template < class T, class Alloc allocator<T> > class list; List containers are imp…

HarmonyOS NEXT应用开发案例——滑动页面信息隐藏与组件位移效果

介绍 在很多应用中&#xff0c;向上滑动"我的"页面&#xff0c;页面顶部会有如下变化效果&#xff1a;一部分信息逐渐隐藏&#xff0c;另一部分信息逐渐显示&#xff0c;同时一些组件会进行缩放或者位置移动。向下滑动时则相反。 效果图预览 使用说明 向上滑动页面…