异常处理(程序健壮性→功能→性能)

异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况。许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象。
例如:数组越界和被0除。

try{
   //可能发生运行错误的代码;
  }
  catch(异常类型     异常对象引用){
   //用于处理异常的代码
  }
  finally{
   //用于“善后” 的代码
  }

①把可能会发生错误的代码放进try语句块中。
②当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。

    catch语句块中的代码用于处理错误。

③当异常发生时,程序控制流程由try语句块跳转到catch语句块。
④不管是否有异常发生,finally语句块中的语句始终保证被执行。
⑤如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。

异常的“多态”特性:

①可以有多个catch语句块,每个代码块捕获一种异常。在某个try块后有两个不同的catch 块捕获两个相同类型的异常是语法错误。
②使用catch语句,只能捕获Exception类及其子类的对象。因此,一个捕获Exception对象的catch语句块可以捕获所有“可捕获”的异常。
③将catch(Exception e)放在别的catch块前面会使这些catch块都不执行,因此Java不会编译这个程序。

finally:

①资源泄露:当一个资源不再被某应用程序使用,但此程序并未向系统声明不再使用此资源时发生这种情况。
②finally语句块主要用于解决资源泄露问题,它位于catch语句块之后,JVM保证它们一定执行。
③注意:finally语句块中也可能发生异常,如果这种情况发生,先前的异常被放弃。

④当有多个嵌套的try…catch…finally时,要特别注意finally的执行时机。
⑤特别注意:
当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。

THROWS语句:

①throws语句表明某方法中可能出现某种(或多种)异常,但它自己不能处理这些异常,而需要由调用者来处理。
②当一个方法包含throws子句时,需要在调用此方法的代码中使用try/catch/finally进行捕获,或者是重新对其进行声明,否则编译时报错。

③throws语句中声明的异常称为受控(checked)的异常,通常直接派生自Exception类。
④RuntimeException(其基类为Exception) 和Error(基类为Throwable)称为非受控的异常。这种异常不用在throws语句中声明。//程序声明

⑤一个子类的throws子句抛出的异常,不能是其基类同名方法抛出的异常对象的父类。//程序声明

Java 7 及以后的版本,允许在一个catch块中捕获多个异常。//程序

原文地址:https://www.cnblogs.com/sengzhao666/p/9941664.html

时间: 2024-07-31 04:43:43

异常处理(程序健壮性→功能→性能)的相关文章

程序健壮性之“异常处理”

定义 异常处理(Exceptional Handing)是代替Error Code的新法,分离了接收和处理错误代码. 基本模型 终止模型:将假设错误非常关键,将以致于程序无法返回到异常的地方继续执行,一旦异常被跑出就    表明错误已无法挽回,不能再继续执行. 恢复模型:异常处理程序的工作是修正错误,然后重新尝试调动出问题的方法,并认为第二次能够成功. 异常处理原则 反面示例: 1 OutputStreamWriter out = ... 2 java.sql.Connection conn =

程序try-catch的绝对健壮性之嵌套

写程序的过程中,我们对try-catch在熟悉不过了,捕获异常进行处理,以保证程序的健壮性. 今日突发一想,如果我们catch中的代码异常了怎么办?我们做以下一种假设 static void Main(string[] args) { try{ //Code A } catch{ //Code B } finally{ //Code C } } 按照我们平时经常用的,我们在Code A的位置执行出错之后,我们最后可能在Code B进行错误处理,然后可能在Code C处写错误日志. 那么问题来了,

关于提高代码质量的思考之提高代码健壮性

接着上期的拓展性之后,今天谈谈代码的健壮性.代码的健壮性又称鲁棒性,是高质量代码的一个重要指标. 有人分析了印度软件行业比中国好的一个原因:印度的一个老程序员,月代码量在一千行左右,这一千行代码,算法平实,但都是经过仔细推敲,实战检验的代码,不会轻易崩溃的代码.我们的程序员,一天就可以写出一千行代码,写的代码简短精干,算法非常有技巧性,但往往是不安全的,不完善的.印度人的程序被称作:傻壮.但程序就得这样! 那么如何写出一个代码简短精干,算法非常有技巧性,而又非常安全的代码呢?我逛了很多论坛,发现

[渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序使用高级功能

这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第十二篇:为ASP.NET MVC应用程序使用高级功能 原文:Advanced Entity Framework 6 Scenarios for an MVC 5 Web Application 译文版权所有,谢绝全文转载--但您可以在您的网站上添加到该教程的链接. 在之前的教程中,您已经实现了继承.本教程引入了当你在使用实体框架Code

用ORACHK自动化检查数据库系统的健壮性

1.orachk工具主要用途 (1)主动检查您的整个软件在操作系统.CRS.数据库.高可用等层面中的严重问题,以便于IT部门整改,提升系统的稳定性 (2)对于您系统中存在的风险提供简单化和合理化的诊断和分析建议. (3)对系统中存在的健康风险提供汇总信息,并且能够向下钻取到特定的问题和对应的解决方案 (4)对检查结果进行量化评分(100分制),内容非常的全面,通过得分直观判断健康程度 2.运行注意要点 (1)orachk不支持在root用户下运行,需要在oracle或grid用户下运行 (2)如

代码健壮性是真的好吗?

我在看一个视频,这个视频里写的代码有这个特点,那就是它把代码写的一个方法可以多次被调用或者说叫利用也可以;同时视频也在一致强调这一点;那我就疑惑了,代码健壮性就那么好吗? 首先,你要写的一个方法能实现不同的功能,在开始设计它的时候就要考虑到各个问题的方方面面,这个对精力应该也是一个很大的消耗吧:这些代码也许写的人能轻松的能读懂,但是如果是别人来读的话,那耗费的时间和精力应该是更大的:如果是更大型的软件,恐怕程序员都要白头了吧:这难道是炫耀技术吗?这个代价也太大了! 其次,现在电脑运算速度是很快的

【软件构造】第七章第一节 健壮性和正确性的区别

第七章第一节  健壮性和正确性的区别 第七章:进入软件构造最关键的质量特性 --健壮性和正确性. 本节在1-2节的基础上,重申了Robustness and Correctness的重要性,澄清了二者之 间的差异,并指明了在软件构造中处理二 者的典型技术(防御式编程.异常处理. 测试.调试等) Outline 健壮性(Robustness)和正确性(correctness) 如何测量健壮性和正确性 Notes ## 健壮性(Robustness)和正确性(correctness) [健壮性] 定

软件构造 7-1 健壮性与安全性

健壮性与安全性 什么是健壮性与安全性? 如何衡量健壮性与安全性? 健壮性:系统或组件在存在无效输入或压力环境时一颗正确运行的程度. 健壮性编程关注异常终止和异常活动的处理. 健壮性原则:严于律己(满足specification),宽以待人(接受各种输入) 健壮性编程原则(把用户当做小孩) 1.用户会修改代码,而且自己写的还不对 2.用户不会看specification(所以我们应该在他操作错误时返回明确的错误信息帮助其改正) 3.危险行为,我们不应当将信息暴露给用户,以至于产生漏洞,使用户专注于

【Java并发基础】安全性、活跃性与性能问题

前言 Java的多线程是一把双刃剑,使用好它可以使我们的程序更高效,但是出现并发问题时,我们的程序将会变得非常糟糕.并发编程中需要注意三方面的问题,分别是安全性.活跃性和性能问题. 安全性问题 我们经常说这个方法是线程安全的.这个类是线程安全的,那么到底该怎么理解线程安全呢? 要给线程安全性定一个非常明确的定义是比较复杂的.越正式的定义越复杂,也就越难理解.但是不管怎样,在线程安全性定义中,最核心的概念还是正确性,可以简单的理解为程序按照我们期望的执行. 正确性的含义是:某个类的行为与其规范完全