异常及异常的处理机制

异常处理机制

异常和异常处理机制

异常的概念:

程序在运行时,发生了不可预测的事件,它阻止了程序按照我们程序员的预期

正常执行!

程序中的异常:

 

那么,我们剩下的5行代码九部会执行了

那么什么是异常的处理机制呢?

能让程序在异常发生时,按照代码预先设定的异常处理逻辑,针对性地处理异常,     让程序恢复正常并继续执行。

异常的分类和结构图

所有的异常错误和错误的父类=======》Throwtable

 

Throwable类是Java异常类型的顶层父类,一个对象只有是 Throwable 类的(直接或者间接)实例,他才是一个异常对象,才能被异常处理机制识别。JDK中内建了一些常用的异常类,我们也可以自定义异常。

异常又分为两种:

 

运行时异常(RuntimeException):在程序运行期间产生的异常!

受查异常  (checked  Exception) :在程序编译期间产生的异常!

异常处理方式分为两种:(5个关键字)

1.使用try..catch..finally

2.使用throw抛出异常和throws声明异常

3.try不能单独使用,必须和catch或者finally中的其中一个联合使用;

 

4.如果执行完try并且不发生异常,则接着去执行finally代码块和finally后面的代码;

     如果没有finally代码块,则直接执行catch之后的代码;

 

  1. 如果发生异常,则尝试去匹配对应异常的catch代码块。
  2. .catch后面的括号定义了异常类型和异常参数。
  3. 如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally
  4. 在Java程序中可以声明多个catch块

Finally的使用

01.无论异常是否发生,finally代码块都会执行;

02.如果try代码块中出现return,先执行finally代码块之后return;

03.遇到System.exit(int status),不会执行finally代码块

System.exit(0):正常退出

System.exit(1或者非0):非正常退出,一般放置在catch代码块中

04.主要执行一些清理工作,比如关闭流,释放数据库连接资源......

try==》catch===》finally的使用规则:

01.每个代码块中的变量都是局部变量,其他代码块不能访问;

02.try不能单独使用,必须和catch或者finally联合使用;

03.catch代码块可以有多个,书写顺序必须是按照异常类型的继承关系从小到大书写;

04.如果try代码块中出现了return,也是先执行finally之后再执行return

throw和throws的使用

异常抛出的分类

01.系统自动抛出异常

我们没有使用异常处理机制,系统默认遇到异常时,抛出的异常!

02.书写语句抛出异常

使用throw抛出异常,throws声明异常

throw的使用

语法:

throw  new  异常类型([异常提示语句]);

注意点:

01.异常类型可以是Exception或者其子类;

02.一条throw语句只能抛出一个异常;

03.throw语句只能出现在方法体中

04.针对于thorw抛出的异常,有两种解决方式

1.使用try...catch...finally代码块处理异常

2.使用throws声明异常,把异常告诉调用者

throws的使用:

语法:

方法名称  throws  异常类型1,异常类型2;

注意点:

01.thows声明在方法名称之后;

02.throws可以声明多个异常类型,每个类型之间使用 ‘逗号‘ 隔开;

03.throws声明表示当前方法可以不处理异常,而是由方法的调用者处理;

04.如果在主函数中使用throws声明异常,则由JVM处理异常!

异常和异常链的使用

异常链的概念:

异常链是指将捕获的异常包装进一个新的异常中,新异常中记录了原始异常的信息。并重新抛出的异常处理方式。

就好比汽车连撞事件

自定义异常类

1.异常类必须是Throwable的子类

2.定义受查异常,建议继承Exception

定义运行异常,建议继承RuntimeException

异常的使用规则:

1.异常只能用于非正常情况

2.为异常提供说明文档

3.尽可能的避免异常,特别是运行时异常

4.保持异常的原子性

5.避免过于庞大的try代码块

6.在catch中指定具体的异常类型

7.不要在catch块中忽略捕获的异常

原文地址:https://www.cnblogs.com/864466244qq/p/9245104.html

时间: 2024-11-05 16:37:58

异常及异常的处理机制的相关文章

C++异常以及异常与析构函数

1. 抛出异常 1.1 抛出异常(也称为抛弃异常)即检测是否产生异常,在C++中,其采用throw语句来实现,如果检测到产生异常,则抛出异常. 该语句的格式为: throw 表达式; 如果在try语句块的程序段中(包括在其中调用的函数)发现了异常,且抛弃了该异常,则这个异常就可以被try语句块后的某个catch语句所捕获并处理,捕获和处理的条件是被抛弃的异常的类型与catch语句的异常类型相匹配.由于C++使用数据类型来区分不同的异常,因此在判断异常时,throw语句中的表达式的值就没有实际意义

Python异常详解:基类、具体异常、异常层次结构

在 Python 中,所有异常必须为一个派生自 BaseException 的类的实例. 在带有提及一个特定类的 except 子句的 try 语句中,该子句也会处理任何派生自该类的异常类(但不处理 它 所派生出的异常类). 通过子类化创建的两个不相关异常类永远是不等效的,既使它们具有相同的名称. 下面列出的内置异常可通过解释器或内置函数来生成.除非另有说明,它们都会具有一个提示导致错误详细原因的“关联值”. 这可以是一个字符串或由多个信息项(例如一个错误码和一个解释错误的字符串)组成的元组.

java异常和异常体系

16.异常 16.1程序执行过程中出现的影响程序正常运行的现象. 16.2异常语法 try{ //代码块 }catch(异常类型 e){ }catch(异常类型2 e2){ }...{ }finally{ } 注意:try:表示可能出现异常的代码块 catch:抓取异常 ,并进行处理 可以抓取多个异常,异常的范围要从小到大抓取 并且只会执行第一个匹配的异常类型 finally:最终的,不管是否出现异常,finally中的代码块始终会执行. 除虚拟机停止(system.exit(1))这种情况外

C++异常之异常说明

1. 指定异常 T   funNname( parameterlist ) throw( T1, T2,····,Tn): 其中 T 是类型, parameterlist 是参数列表, 而类型 T1, T2,····,Tn 是函数会抛出的异常. 2. 不抛出异常 T   funNname( parameterlist ) throw( ): 抛出异常类型列表为空,表示的是该函数不抛出任何类型异常. 3. 抛出任意类型的异常 T   funNname( parameterlist ): 这表示该函

21、捕捉异常和异常的使用原则

package com.exception.demo; public class Take { // 创建类 /** * 1.捕捉异常( 异常处理器大致分为 try-catch 语句快 和 finally 语句块 ) * 2.以下4种情况不会执行finall语句块 * 2.1.在finally语句块发生了异常 * 2.2.在前面的代码中使用了 System.exit() 退出程序 * 2.3.程序所在的线程死亡 * 2.4.关闭CPU * 3.异常的使用原则: * 1.在当前方法中使用 try

(4.3)uboot详解——异常和异常向量

(4.3)uboot详解--异常和异常向量 中断是一个较难掌握知识,因为它是一个过程,而不是一个结果,其中的步骤都建立在理论的层面上,需要理解.比如按下按键1会使led1亮,这个"起因-结果"的操作我想小孩子也能掌握,因为它是一个现象,但是要掌握"起因-过程-结果"却需要花一些功夫,因为这个过程需要理解.如果你认真的了解了前面两节的内容,那么现在就该到了实现"过程"的时候了. 前面两节分析了外部中断和内部中断相关的内容,这篇文章将对处理器的异常情

异常——获取异常信息

当出现异常时大家都经常会想查看异常的详细信息,什么异常,异常出现在什么位置等等. 在日常的编程中,printStackTrace是一个经常被用的方法,这个方法把异常的详细信息输出到了控制台上. 但是有一些时候我们想要把这些详细的信息以其他的方式展现,网页上.日志里.报警邮件中. Exception本身的toString,getMessage方法只是对该Exception类的本身信息,并不能帮我们找出异常点. 那么就从printStackTrace着手,将这个方法要输出的信息放到一个String里

VS 尝试从数据库进行更新时,遇到类型为“Microsoft.VSDesigner.Data.Local.ConnectionStringConverterServiceException”的异常。异常消息为:“”;

最近,由于更换机器,在新机器上运行更新数据库模型,报错: 尝试从数据库进行更新时,遇到类型为"Microsoft.VSDesigner.Data.Local.ConnectionStringConverterServiceException"的异常.异常消息为:""; 这样的错误一般都是进行Edmx 从数据库中更新到模型产生的,错误截图如图: 我用的是VS2012,数据库为MySQL 解决方案一: 找到自己的Entities.edmx文件,检查ConnectionS

Python档案袋(异常与异常捕获 )

无异常捕获 程序遇到异常会中断 print( xxx ) print("---- 完 -----") 得到结果为: 有异常捕获 程序遇到异常会进入异常处理,并继续执行下面程序 try: print( xxx ) except NameError as e: print("出现错误",e) print("---- 完 -----") 抓住所有异常 try: print(xx) except Exception as e: print("-