在Java中处理异常

每个程序员都希望编写一个完美的程序。 也就是说,程序运行时没有任何障碍。

好吧,如果希望是马,乞g就会骑。 除了程序员的所有愿望之外,有时还会发生无法预料的情况。

这些不可预见的情况在Java中通常被归类为“例外”。 异常会干扰我们的代码的平稳运行,并在不处理的情况下终止程序。 处理异常涉及在异常发生时编写另一组代码来管理这些异常。

有两种例外,一类是我们无能为力的,另一类是我们可以做的。 对于第二类,正确处理异常非常重要,因为我们不希望代码因异常而终止。

当我们的代码以意外的方式运行时,就会发生异常(这就是为什么可以将异常视为一种错误)。 这些意外的方法可能是将数字除以零,尝试以不存在的索引访问数组或试图访问不存在的对象。 所有这些方式都会导致生成异常代码,这些代码不遵循正常路径或处理程序设计。

发生异常时,将向用户报告说明,以解释引起异常代码的原因。 报告此异常的行为称为引发异常。

异常处理是Java不可或缺的一部分。 每个Java开发人员都需要了解如何处理异常,以便他们可以编写干净,优美的代码 。

抛出异常

一辆使用劣质燃油的汽车会散发出烟,以便我们知道出了点问题– Java程序中引发的异常等效于该烟。 当Java程序中发生异常时,需要将异常报告给系统用户,以便用户确切了解出了什么问题。 通过向用户报告此异常,我们引发了异常。

程序员可以导致引发异常,或者Java语言引发异常。 当程序的用户执行某些已明确启动为程序中的非法或错误操作时,程序员可能引发异常。 同样,如果程序的输入违反了一些基本的算术或编程原理(例如,将数字除以零),并且程序运行的环境出现了内存不足等问题,则Java语言可能会引发一些异常。

因此,当Java程序引发异常时,会发生什么? 创建任何Throwable子类的对象,该对象根据异常的类型来解释异常的性质。 例如,可以引发ArithmeticException对象,这表明发生了算术错误。

可以从Java程序引发的任何异常都被视为Throwable类的对象,该类分为两个子类: Exception类和Error类。

程序员无法处理的异常在Error类中。 您可以修复的异常在Exception类中。

错误类别

有些例外就像自然灾害一样,它们会发生,而您只需要接受它们的发生即可。 属于Error类的异常是您无法修复的事情。 它们也只是发生,您必须接受它们的发生。

Error类异常通常用于表明您的代码运行环境存在问题。 这些类型的问题可能包括内存不足-内存不足的情况不是您编写代码来处理的事情,因此您不能简单地对其进行处理。 这些异常只会终止您的程序。

错误类异常是通过重新启动程序来修复的,但是只有在导致程序终止的环境中的问题得到解决之后,才能解决。 在我们的示例中,对该错误的修复可能包括手动恢复用于执行程序的空间。

只是知道Java不能解决Error类的异常。 程序所有者必须在代码终止后执行某些操作,以确保程序可以再次运行。

例外类别

在Exception类下发生时可以处理的异常。 Java编程语言具有多种异常,可以在子类RuntimeException下进行处理

这些例外包括被零除的例外,当您尝试将数字除以零时会发生。

之所以能够处理Exception类的异常,是因为它们表示某些问题发生在代码内部,而不是在运行代码的环境中。

您可以通过编写代码来确保此类异常不会首先发生,从而避免此类异常;如果确实发生此类异常,则可以编写代码以确保这些异常不会终止您的程序执行。 为了处理异常,将它们放置在try块中稍后我们将介绍它。

错误类和异常类之间的基本区别在于,错误类将导致程序终止并且无法对其进行处理,但是如果正确处理了异常,则可以使异常类不导致程序终止。

涉及异常的重要关键字

Java中的异常处理可以通过使用一些关键字(例如try,catch,throw,throwsfinally)来实现 。 这些关键字用于管理如何引发和处理异常。

任何可能导致引发异常的代码都写入try块中。 可能引发异常的代码通常处理输入值,但不能保证始终是程序员想要的方式。

想象一个试图走路的婴儿。 您只需将手放在婴儿周围,以确保婴儿不会跌落并受伤。 同样,try块用于包围在运行时可能引发异常的代码。

在try块之后紧接着是catch块, finally块或两者。

catch块完全按照其名称的含义执行操作:它捕获try块中引发的异常。 由于可以引发许多异常,因此catch块必须指定要处理的异常类。

在catch块之外,还有finally块,当try块完成时, finally起作用。 因此,finally块等待try块执行。 请注意,try块之后可以是catch块,finally块或两者的组合。 如果try块具有catch块,则最后在catch后面运行,否则,finally块在try块之后立即运行。

因此,将finally块想象为try块的最终手段。 finally块通常用于处理try块可能未正确利用的资源。

通过使用方法标题中的throws关键字,方法或一段用Java执行特定功能的代码可以抛出一种异常。

Error或RuntimeException及其子类中的异常无需包含在throws语句中。 它们被归类为“未经检查的异常”,这些异常应以任何可能的方式加以阻止,并且不得有意识地允许其发生。

程序中可能发生的未经检查的异常数量如此之大,以至于我们无法将所有未经检查的异常都扔进一个方法中。 这将导致该方法失去其清晰度,因此Java假定运行程序的程序员没有故意抛出这些类型的异常。

发生问题时,每种方法都可能引发未检查的异常,因此无需在throws语句中添加未检查的异常。

throw关键字用于专门在方法中引发异常。 它只是用于动词throw中的常规用法:它抛出Throwable Class的对象。 您不能抛出不在Throwable类或其任何子类中的对象。 注意不要使用throw关键字抛出Unchecked Exceptions。 使用throw关键字引发Checked Exception。

为什么要处理异常?

因为我们编写的每个程序都会在某一时刻抛出异常,所以了解如何处理它们很重要,这样一来,异常不会总是在程序中每次发生时都终止 。

了解属于错误类或异常类的异常之间的区别可以帮助您确定是否可以解决问题。

在编写用于处理异常的代码时,请确保您理解并正确使用了try,catch和finally块,并记住尽力防止抛出未经检查的异常。

学习如何在异常发生之前进行处理将有助于您编写简洁,优雅的代码。

翻译自: https://www.javacodegeeks.com/2017/12/handling-exceptions-java.html

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

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

相关文章

通信系统的组成

数字通信模型: http://blog.csdn.net/yaosiming2011/article/details/44280797 进程和线程

存储卡显示0字节怎么办?恢复0字节的存储小技巧

存储卡显示0字节是一个常见的故障现象,可能由多种原因引起。本文将详细分析存储卡出现此类问题的各种原因,并提供针对性的解决方法。通过深入了解这些原因和解决方案,读者可以有效地应对存储卡显示0字节的故障,从而恢复存储卡的正…

OSI模型和TCP/IP协议族

1、协议分层 两个实体之间要进行通信就需要有一个协议。而当通信比较复杂时就有必要将这个复杂的任务划分为多层,就需要有多个协议,每一层都有自己的协议。 2、ISO 国际标准化组织(International Standard Organization , ISO&…

在PhotoShop中改像素m*n

快捷键:CtrlAlti,如图,改为28*28

Spring Boot Redis简介

1.概述 在本文中,我们将通过Spring Data Redis库回顾如何将Redis与Spring Boot结合使用的基础知识。 我们将构建一个应用程序,演示如何通过Web界面执行CRUD操作Redis 。 Github上提供了该项目的完整源代码。 2.什么是Redis? Redis是一个开源…

Dijkstra-解决最短路径问题

1、从A开始(也可以从其他点,此处选择从A) 将A 加入树,A被圈红 列出最短路径数组: 2、 确定从A到其他顶点的最短距离为50,A-->B 将B加入树: 更新最短路径数组: 比较到C的距离&a…

简单排序--冒泡排序

冒泡排序&#xff1a; public void sort(){int out,in;//out指向已经排好序的前一个for( outnElements-1;out>1;out--){for(in0;in<out;in){if(arr[in]>arr[in1]){swap(in,in1);//相邻的两个元素比较&#xff0c;交换}}}}//实现冒泡排序相邻的元素两两比较&#xff0c…

简单排序--选择排序

选择排序&#xff1a; public void sort(){int out,in,min;for(out0;out<nElements-1;out){min out;for(inout1;in<nElements;in)if(arr[in]<arr[min])min in;swap(out,min);//将min放在out位置&#xff0c;out始终指向最小值的下一个位置&#xff0c;即下一个min要…

Java 9模块服务

接线与查找 Java长期以来都有一个ServiceLoader类。 它是在1.6中引入的&#xff0c;但是自Java 1.2以来就使用了类似的技术。 一些软件组件使用了它&#xff0c;但是使用并不广泛。 它可以用于模块化应用程序&#xff08;甚至更多&#xff09;&#xff0c;并提供一种使用应用程…

简单排序--插入排序

插入排序&#xff1a; public void sort(){int in,out,temp;for(out1;out<nElements;out){temp arr[out];in out;while(in>0&&arr[in-1]>temp){arr[in] arr[in-1];//待插入的数据比其之前的数字大的右移&#xff0c;从小到大排序--in;//依次左移}arr[in] …

一些工厂实例

我时不时地发现自己摸索了一些旧的代码&#xff0c;以找到示例“我在哪里做过工厂一样的事情”。 上周再次发生这种情况时&#xff0c;我决定只查找所有示例&#xff0c;并创建一个示例项目和有关它的博客文章。 所以在这篇文章中&#xff0c;我&#xff1a; 从简单的“原始…

eclipse工程导入Android Studio

在eclipse中选中要导出的工程&#xff08;此工程在eclipse中最好不要有错误&#xff09;&#xff0c;右键选择Export->Generate Gradle build files 在本地工程里生成了一个build.gradle文件。 在AS中选择 导入成功后会生成一个import-summary.txt 导入成功。

idea中drl文件_得分DRL:在OptaPlanner中更快,更轻松

idea中drl文件对于OptaPlanner &#xff08; Drools Planner&#xff09;6.0.0.Beta1&#xff0c;我已经用更优雅的ConstraintMatch系统替换了ConstraintOccurrence。 结果是您的DRL评分文件为&#xff1a; 快多了 更容易读写 错误的发生率要低得多&#xff0c;因为它们使得…

超棒的Glide图片加载

GitHub开源&#xff1a;https://github.com/bumptech/glide 超棒的工具&#xff0c;竟然还可以加载.gif !!Glide完全基于Picasso&#xff0c;沿袭了其简洁风格&#xff0c;并在其基础上做了大量优化与改进。 1、Glide默认的Bitmap格式是RGB_565&#xff0c;而Picasso默认ARGB_…

开源GraphView的使用--数据统计

最近做室内定位需要绘出加速度传感器输出的三个方向的加速度曲线&#xff0c;找到了开源https://github.com/jjoe64/GraphView-Demos&#xff0c;省去了要重新学MatLab **。 在http://www.android-graphview.org/download--getting-started.html下载.jar包。 1、GraphView的使…

我的对象命名

这是最常见的辩论之一。 大多数人对此主题有自己的见解&#xff0c;却没人能真正说出哪个是正确的。 我当然不能&#xff0c;但是尽管如此&#xff0c;我还是决定与大家分享我的想法&#xff0c;投入两美分&#xff0c;也许对某人会有帮助。 当我创建一个新类时&#xff0c;我…

netbeans 定制代码_将NetBeans代码模板弯曲到我的意愿

netbeans 定制代码任何阅读过我关于NetBeans的文章的人都知道&#xff0c;我真的很喜欢NetBeans的许多功能。 但是&#xff0c;最近&#xff0c;我发现自己对NetBeans特定功能的特定问题越来越恼火。 最终&#xff0c;它使我烦恼不已&#xff0c;促使我开始研究如何根据自己的喜…

Java 9概览

对于许多Java 9来说&#xff0c;它似乎是一个维护版本&#xff0c;它推动了不能在Java 8中实现的项目Jigsaw。但是&#xff0c;随着JDK中的新模块系统以及与之相关的许多内部更改&#xff0c;Java 9也带来了开发人员工具箱中一些很棒的新内容。 以下是重点内容&#xff1a; JS…