第五章 异常Exception

【学习笔记】


【参考:JDK中文(类 Exception)】

java.lang.Object  

【笔记】

1.异常(Exception)的定义,意义和用法

为了能优雅的处理异常情况(在出现异常情况后,程序不崩溃,还能继续优雅的运行), Sun公司设计了异常技术框架,
马克-to-win:你把可能出现问题的语句放在try块儿中,真出了问题的话,系统会把问题的信息存放在一个异常类的对象中传入到catch块中,
在catch块儿中,你可以专门根据错误信息作处理。

ZMZDBC:出现异常如果不处理,异常之后的代码不会执行。

异常发生后,输出结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero at Test.main(Test.java:4)

ArithmeticException是异常类型,所以我们就该捕获ArithmeticException:
catch(ArithmeticException e)
        {
            System.out.println(e);
        }

ZMZDBC:并不是处理了所有可能发生的异常,程序就会一路运行下去,因为和Exception相对应的,还有Error,Error(错误)表示系统级的错误和程序不必处理的异常,是JRE(java运行环

境)的内部错误或者硬件问题,比如,另外某一处地方的bug引起的内存溢出,内存资源不足等,OutOfMemoryError,对这类错误,程序基本无能为力。发生了Error,只能退出。

2.多重捕获MultiCatch

异常被引发时,每一个catch块儿被依次检查,第一个匹配异常类型的catch块儿被执行。马克-to-win:当一个catch块儿执行以后,其他的catch块儿被跳过,继续try/catch块以后的代码。

像switch一样。
即使已经捕获了很多异常,但是假如你还是少捕获了什么异常,赶上那个异常发作,你程序还是会崩溃的。那怎么办呀?我们可以求助于Exception类捕获所有的异常。
catch多重异常时,子异常类必须在它们任何父类之前。如果子类在父类后面,子类将永远不会到达。(你想写也不行,系统会报编译错误。)

public class Test {
    public static void main(String[] args) {
        int result;
        try {
            result = 12 /0; ←这里抛出“java.lang.ArithmeticException”异常
            System.out.println("try中完成finish"); ←因为上面的异常,这条语句不执行。
        }
        catch (NumberFormatException e) {
            System.out.println("输入参数必须为整数!"); ←未发生这个异常,因此不执行。
        }catch(Exception e){
            System.out.println("如有捕获不到的异常,我来! "+e); ←发生“java.lang.ArithmeticException”异常是“Exception”的子类,因此捕获成功,执行。
        }
        System.out.println("马克-to-win:优雅结束"); ←因为try{}块中发生的异常都被处理了,程序不会崩溃,因此正常执行。
    }
}

输出结果:
如有捕获不到的异常,我来! java.lang.ArithmeticException: / by zero
马克-to-win:优雅结束

5.抛出throw关键字

异常可以是JVM生成的,也可以是开发者主动生成的。
例如,当程序运行到5/0的时候,java系统JVM会在后台new出一个除0异常实例,之后把这个实例传入catch块儿供开发者使用。
而开发者也可以使用throw new Exception();主动new出一个异常实例,之后把这个实例传入catch块儿供开发者自己使用。
马克-to-win:对于catch来讲,不管谁抛的,处理起来都一样。

if (mark_to_win == 0) throw new ArithmeticException("DIVIDE BY 0!!!!");

输出结果:
Exception in thread "main" java.lang.ArithmeticException: DIVIDE BY 0!!!!
    at Test.main(Test.java:5)

6.Checked Exception(受检的异常)

异常分为2类:
1)RuntimeException和他的子类都是unchecked异常。其他的都是checked异常。
2)Checked Exception(受检的异常)这类异常,编译器检查发现到它后会强令你catch它或throws它。根本就编译不过去(编译器会报错),必须包上一个try catch块,程序才能通过编

译。
3)Unchecked Exception(不受检的异常)这类异常,都是RuntimeException或者它的子类,编译器检查发现到它以后,什么都不管(编译器不会报错),也什么都不做,直接放行(当

然导致的结果是如果开发者不处理程序就会崩溃)。

ZMZDBC:RuntimeException更可怕,因为编译器不会提示开发者处理(catch它或throws它),如果发生了问题,直接崩溃。

7.throws子句

throws只是标记,并没处理,执行到那,系统还是会崩溃!ZMZDBC:之后的语句(包括return等都不会执行,直接跳到catch)。

public class Test {
    void m1_mark_to_win() throws FileNotFoundException  { ←也可以抛出FileNotFoundException的父类IOException
        throw new FileNotFoundException(); ←FileNotFoundException是IOException 的子类
    }
}

【马克-to-win】学习笔记—— 第五章 异常Exception的更多相关文章

  1. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  2. [HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像

    [HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像 干货 JPEG.PNG.GIF有何不同 JPEG适合连续色调图像,如照片:不支持透明度:不支持动画:有损格式 PNG适合单 ...

  3. 《Spring实战》学习笔记-第五章:构建Spring web应用

    之前一直在看<Spring实战>第三版,看到第五章时发现很多东西已经过时被废弃了,于是现在开始读<Spring实战>第四版了,章节安排与之前不同了,里面应用的应该是最新的技术. ...

  4. opencv图像处理基础 (《OpenCV编程入门--毛星云》学习笔记一---五章)

    #include <QCoreApplication> #include <opencv2/core/core.hpp> #include <opencv2/highgu ...

  5. 学习笔记 第五章 使用CSS美化网页文本

    第五章   使用CSS美化网页文本 学习重点 定义字体类型.大小.颜色等字体样式: 设计文本样式,如对齐.行高.间距等: 能够灵活设计美观.实用的网页正文版式. 5.1 字体样式 5.1.1 定义字体 ...

  6. [汇编学习笔记][第五章[BX]和loop指令]

    第五章[BX]和loop指令 前言 定义描述性符号“()”来表示一个寄存器或一个内存单元的内容,比如: (ax)表示ax中的内容,(al)表示al的内容. 约定符号ideta表示常量. 5.1 [BX ...

  7. [Python学习笔记][第五章Python函数设计与使用]

    2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...

  8. Linux学习笔记(第五章)

    第五章-常用指令 下达指令: 1.[Tab] 2.man + (指令):显示操作说明 开头代号 man page 常用按键

  9. o'Reill的SVG精髓(第二版)学习笔记——第五章

    第五章 文档结构 5.1 结构与表现 XML的目标之一便是提供一种能将结构从视觉表示中独立出来的方法. 但是不幸的是,关于XML的很多讨论都强调结构而非表现. 我们将通过详细讨论如何在SVG中指定表现 ...

随机推荐

  1. C#+Winform记事本程序

    第17章 记事本 如何使用Visual C# 2010设计一个Windows应用程序——记事本,学习,可以进一步掌握MenuStrip(菜单).ToolStrip(工具栏).RichTextBox(高 ...

  2. 【c学习-1】

    #include<stdio.h> int main(){ int a,b,max; printf("请输入两个整数:"); //格式化输出函数 scanf(" ...

  3. 猴子吃桃问题 python

    猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,见只剩下一个桃子了.求第 ...

  4. 一些 Markdown 语法

    参考于: https://www.jianshu.com/p/b03a8d7b1719 [先挖个坑,来日再填]

  5. zeppelin之连接mysql

    上面的一篇文章,对于zeppelin的使用,只是我们对于数据存储在文件中,每一次对于当我们连接数据库的时候都会有问题,今天刚好 把这个问题解决今天我们刚好来介绍如何使用zeppelin来与数据进行连接 ...

  6. 7.Mongodb安全性流程

    1.安全性流程 2.超级管理员 为了更安全的访问mongodb,需要访问者提供用户名和密码,于是需要在mongodb中创建用户 采用了角色-用户-数据库的安全管理方式 常用系统角色如下: root:只 ...

  7. python 三目运算

    python中的三目运算: result = a if condition else b #当满足condition返回a否则返回b 三目运算可以使你的代码看起来简洁,且运算高效

  8. Mac 小技巧

    本文的大部分技巧来自于池建强老师的<MacTalk.人生元编程>,感谢他的辛苦付出,本文多系整理而已. 终端输入说英语 说英语时我们当然希望有标准发音.在Mac中不需要字典,直接在终端里输 ...

  9. 《数据结构与算法分析:C语言描述》复习——第十章“算法设计技巧”——Huffman编码

    2014.07.06 16:47 简介: 给定一段有固定符号集合S构成的文本T,集合S中总共有n种符号.如果对于每种符号,使用一种不同的由‘0’和‘1’构成的位字符串来代替,比如: ‘a’->‘ ...

  10. shell脚本批量下载资源并保留路径

    示例资源列表 如url.txt: http://su.bdimg.com/static/superplus/img/logo_white_ee663702.png http://su.bdimg.co ...