深入理解Java异常处理机制 (笼统篇)

开篇

1.异常处理(Exception Handling):

  就是一种解决这一问题的机制,能够较好地处理程序不能正常运行的情况。

2.异常(Exception):

  是程序在运行时可能出现的会导致程序运行终止的错误。这种错误是不能通过编译系统检查出来的。

3.常见异常如下:

  (1)系统资源不足。例如,内存不足,不可以动态申请内存空间;磁盘空间不足,不能打开新的输出文件等。

  (2)用户操作错误导致运算关系不正确。例如,出现分母为0。数学运算溢出,数组越界,参数类型不能转换等。

4.异常例子:

  在C++中,使用trythrowcatch三个关键字来实现异常处理。

  try后面的复合语句称为受保护段,受保护段的代码有可能出现异常,因此在try部分进行异常检测。如果检测到异常,就通过throw语句抛掷这个异常。受保护段所调用的函数中也可以检测和抛掷异常。所抛掷的异常,可以是一个整数、一个字符串、一个变量,甚至是一个类的对象。也就是说,异常是有不同类型的。

  catch部分的作用是捕获异常和处理异常。每个catch后的括弧内,都要指定一个“异常类型”,表明它可以捕获哪种类型的异常。一旦捕获到异常,就通过异常处理语句来进行处理。

  程序执行的流程有两种:

    (1)没有异常:try-->受保护语句-->其他语句。

    (2)有异常:tyr-->受保护语句-->throw异常-->catch-->异常处理语句。

  在编写带有异常处理的程序时,还要注意:

    (1)try语句块和catch语句块是一个整体,两者之间不能有其他的语句。

    (2)一个try语句块后面可以有多个catch语句,但是。不可以几个try语句块后面用一个catch语句。

5.程序中的异常

  

有个疑问????     那么我们剩下的5行代码还会执行吗????

由上图可见,剩下的5行代码不会执行了,那么问题又来了!!!怎么才能让我们的代码执行完毕呢????

    使用java中的异常处理机制!!!

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

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

    一:所有异常和错误的父类--Throwable

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

  根据编译器对异常的处理要求,异常分为两类:

    01.运行时异常:在程序中运行期间产生的异常!

    02.受查异常:在程序编译期间产生的异常!

    二:异常的使用

1.异常的使用

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

    01.使用try...catch...finally

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

2.try的使用

  01.try块中放可能发生异常的代码:

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

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

  04.如果发生异常,则尝试去匹配对应异常的catch代码块

3.catch的使用

  01.每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。

   02. catch后面的括号定义了异常类型和异常参数。

   03.如果异常与之匹配且是最先匹配到的,则虚拟机将使用这个catch块来处理异常。

   04.可以书写多个catch代码块!顺序必须是按照异常类型从小到大!

   05.在catch块中可以使用异常参数来获取异常的相关信息。异常参数是这个catch块中的局部变量,其它块不能访问。

   

   06.如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally

   07.如果try中没有发生异常,则所有的catch块将被忽略。

   08.Java7中可以将多个异常声明在一个catch中

4.finally的使用  

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

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

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

    System.exit(0):正常退出

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

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

5.try..catch..finally综合注意点

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

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

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

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

6.异常的使用小案例

  需求:
       01. 让用户分别输入两个数字
         02.求两个数字的商
         03.使用异常处理机制解决可能出现的异常情况

  分析需求:

    01.输入数字=====》输入流Scanner类

    02. 求商      =====》使用算术运算符

      03.使用try...catch...finally处理异常

       Scanner input = new Scanner(System.in);
        try {
            System.out.println("请输入第一个数字:");
            int num = input.nextInt();
            System.out.println("请输入第二个数字:");
            int num2 = input.nextInt();
            System.out.println("结果:"+(num/num2));
        }catch(ArithmeticException e){
            System.out.println("除数不能为0");
            e.printStackTrace();
        }catch (InputMismatchException e){
            e.printStackTrace();
        }finally {
            System.out.println("结束!");
        }

    三:throw和throws的使用

1.异常抛出的分类  

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

  02.书写语句抛出异常
       使用throw抛出异常,throws声明异常

2.throw的使用

  语法:

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

  注意点:
    01.异常类型可以是Exception或者其子类;

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

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

    04.针对于thorw抛出的异常,有两种解决方式
         001.使用try...catch...finally代码块处理异常
         002.使用throws声明异常,把异常告诉调用者

2.throws的使用

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

  注意点:
    01.thows声明在方法名称之后;

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

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

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

    四:异常链的使用

1.什么是异常链???

  

汽车A追尾了汽车B,

汽车B追尾了汽车C。

请问:

  汽车C找谁赔偿?

找汽车B的司机赔偿,那罪魁祸首汽车A的司机呢?!

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

  好处:便于我们查找异常的根本原因。

    五:自定义异常

自定义异常的注意事项:

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

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

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

    六:使用异常的注意事项

1.异常的使用原则

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

  02.为异常提供说明文档

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

  04.保持异常的原子性

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

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

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

原文地址:https://www.cnblogs.com/lsy131479/p/9250257.html

时间: 2024-10-06 12:23:50

深入理解Java异常处理机制 (笼统篇)的相关文章

【转】深入理解java异常处理机制

深入理解java异常处理机制 1. 引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的"教训"告诉我,这个东西可不是想象中的那么简单.听话.不信?那你看看下面的代码,"猜猜"它执行后的结果会是什么?不要往后看答案.也不许执行代码看真正答案哦.如果你的答案是正确,那么这篇文章你就不用浪费时间看啦. <span style="background-color: rg

深入理解Java异常处理机制

1. 引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的"教训"告诉我,这个东西可不是想象中的那么简单.听话.不信?那你看看下面的代码,"猜猜"它执行后的结果会是什么?不要往后看答案.也不许执行代码看真正答案哦.如果你的答案是正确,那么这篇文章你就不用浪费时间看啦. <span style="background-color: rgb(255, 255, 255

理解java异常处理机制

1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话.不信?那你看看下面的代码,“猜猜”它执行后的结果会是什么?不要往后看答案.也不许执行代码看真正答案哦.如果你的答案是正确,那么这篇文章你就不用浪费时间看啦. package Test; public class TestException { public TestException() { } b

理解Java异常处理机制的机理

重看异常机制的时候觉得抓到了点机理上的精髓,所以来说一下,对初学者应该会有些帮助 JAVA中的异常机制 从机制上由[产生异常][抛出异常][捕捉异常][异常处理]组成 从形式上又分为四种: 运行时出现BUG系统产生异常.最经典的抛出异常方式 包括[产生异常][抛出异常] throw.形式是“先自己new异常对象 ,然后throw 异常对象”,在代码的任何地方都可以手动产生抛出 包括[产生异常][抛出异常] try...catch...finally.最经典的捕捉异常方式,并进行处理 包括[捕捉异

面向对象的异常处理之深入理解java异常处理机制

什么是异常? 异常是对问题的描述,将问题的对象进行封装: 异常体系的特点:异常体系中的所有类以及建立的对象: 都具有可抛性,也就是说可以被throw和throws关键字所操作,只有异常体系具有该特点: throws定义在函数上,用于抛出异常类:throw定义在函数内,用于抛出异常对象,前者可以抛出多个,用逗号隔开. 代码加注释讲解: package demo1;/* * 有一个圆形和长方形* * */class NoValueException extends Exception{ NoValu

Java异常处理机制很有意思

前言:在网络上看到一篇<深入理解Java异常处理机制>,看完感觉自己也有一点小想法,的确在很多Java学者的眼里,异常处理机制不就是try catch finally吗,有啥好理解,很多时候,我也经常忽略这方面的内容,感觉没什么有意思的,那么我们来扎个小马步吧 1.经过对原作者的例子改造 package mwq; public class T1 { public static void main(String[] args) { boolean b = true; try { b = tb1(

Java基础 -- 深入理解Java异常机制

异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常.因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的错误条件.当条件生成时,错误将引发异常. 一 异常分类 Java异常类层次结构图: 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出).Throwable 指定代码中可用异常传播机制通过 J

Java异常处理机制 —— 深入理解与开发应用

本文为原创博文,严禁转载,侵权必究! Java异常处理机制在日常开发中应用频繁,其最主要的不外乎几个关键字:try.catch.finally.throw.throws,以及各种各样的Exception.本篇文章主要在基础的使用方法上,进一步分析在开发中如何使用异常机制更合理. try-catch-finally try-catch-finally块的用法比较简单,使用频次也最高.try块中包含可能出现异常的语句(当然这是人为决定的,try理论上可以包含任何代码),catch块负责捕获可能出现的

Java 异常处理机制和集合框架

课程  Java面向对象程序设计   实验名称  异常处理机制.集合框架 班级    13级计三          学号  10503                姓名 一.实验目的 掌握面向对象程序设计技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境 三.实验内容 1.Java异常处理机制涉及5个关键字:try.catch.finally.throw.throws,请理解每个关键字的作用,并在编写程序,使用运用这5个关键字,观察效果