一起学习

1. 异常机制

1.1

异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。

1.2

传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。

1.3 异常处理的流程

1.3.1 遇到错误,方法立即结束,并不返回一个值;同时,抛出一个异常对象

1.3.2 调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码

2 异常的分类

2.1 异常的分类

2.1.1

异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。

2.1.2

Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。

2.2 每个类型的异常的特点

2.2.1 Error体系

Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程序设计时,应该更关注Exception体系。

2.2.2 Exception体系

Exception体系包括RuntimeException体系和其他非RuntimeException的体系

2.2.2.1 RuntimeException

RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。

2.2.2.2 其他(IOException等等)

这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。

2.3 与C 异常分类的不同

2.3.1

其实,Java中RuntimeException这个类名起的并不恰当,因为任何异常都是运行时出现的。(在编译时出现的错误并不是异常,换句话说,异常就是为了解决程序运行时出现的的错误)。

2.3.2

C 中logic_error与Java中的RuntimeException是等价的,而runtime_error与Java中非RuntimeException类型的异常是等价的。

3 异常的使用方法

3.1 声明方法抛出异常

3.1.1 语法:throws(略)

3.1.2 为什么要声明方法抛出异常?

方法是否抛出异常与方法返回值的类型一样重要。假设方法抛出异常确没有声明该方法将抛出异常,那么客户程序员可以调用这个方法而且不用编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。

3.1.3 为什么抛出的异常一定是已检查异常?

RuntimeException与Error可以在任何代码中产生,它们不需要由程序员显示的抛出,一旦出现错误,那么相应的异常会被自动抛出。而已检查异常是由程序员抛出的,这分为两种情况:客户程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语句抛出异常。遇到Error,程序员一般是无能为力的;遇到RuntimeException,那么一定是程序存在逻辑错误,要对程序进行修改(相当于调试的一种方法);只有已检查异常才是程序员所关心的,程序应该且仅应该抛出或处理已检查异常。

3.1.4

注意:覆盖父类某方法的子类方法不能抛出比父类方法更多的异常,所以,有时设计父类的方法时会声明抛出异常,但实际的实现方法的代码却并不抛出异常,这样做的目的就是为了方便子类方法覆盖父类方法时可以抛出异常。

3.2 如何抛出异常

3.2.1 语法:throw(略)

3.2.2 抛出什么异常?

对于一个异常对象,真正有用的信息时异常的对象类型,而异常对象本身毫无意义。比如一个异常对象的类型是ClassCastException,那么这个类名就是唯一有用的信息。所以,在选择抛出什么异常时,最关键的就是选择异常的类名能够明确说明异常情况的类。

3.2.3

异常对象通常有两种构造函数:一种是无参数的构造函数;另一种是带一个字符串的构造函数,这个字符串将作为这个异常对象除了类型名以外的额外说明。

3.2.4

创建自己的异常:当Java内置的异常都不能明确的说明异常情况的时候,需要创建自己的异常。需要注意的是,唯一有用的就是类型名这个信息,所以不要在异常类的设计上花费精力。

3.3 捕获异常

如果一个异常没有被处理,那么,对于一个非图形界面的程序而言,该程序会被中止并输出异常信息;对于一个图形界面程序,也会输出异常的信息,但是程序并不中止,而是返回用Ы缑娲

下载本文示例代码

Java异常处理机制的详细讲解和使用技巧Java异常处理机制的详细讲解和使用技巧Java异常处理机制的详细讲解和使用技巧Java异常处理机制的详细讲解和使用技巧Java异常处理机制的详细讲解和使用技巧Java异常处理机制的详细讲解和使用技巧Java异常处理机制的详细讲解和使用技巧Java异常处理机制的详细讲解和使用技巧Java异常处理机制的详细讲解和使用技巧Java异常处理机制的详细讲解和使用技巧Java异常处理机制的详细讲解和使用技巧Java异常处理机制的详细讲解和使用技巧

阅读(206) | 评论(0) | 转发(0) |

java异常详细讲解_Java异常处理机制的详细讲解和使用技巧相关推荐

  1. java 抛异常给上级_java异常处理机制(示例代码)

    Exception 类的层次 java中所有的异常类是从 java.lang.Exception 类继承的子类. 而Exception 类是 Throwable (可抛出的)类的子类.除了Except ...

  2. java异常重要吗_Java 异常处理的重要认识

    异常类的继承结构 Exception : 一般标识的是程序中出现的问题,可以直接使用try---catch处理. Error : 一般值得是JVM错误,程序中无法处理. 检测异常类需要在throws后 ...

  3. java异常处理代码详解_Java异常处理机制总结

    概念介绍 异常是发生在程序执行过程中阻碍程序正常执行的错误事件,当一个程序出现错误时,可能的情况有如下3种: 语法错误 代码的格式错了,某个字母输错了 运行时错误 空指针异常,数组越界,除数为零等 逻 ...

  4. java 异常管理员_Java异常处理机制

    Java 中的异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行的程序的正常指令流.为了能够及时有效地处理程序中的运行错误,必须使用异常类. 一.异常简介 在程序中, ...

  5. java异常应用_Java异常处理机制 —— 深入理解与开发应用

    本文为原创博文,转载请注明出处,侵权必究! Java异常处理机制在日常开发中应用频繁,其最主要的不外乎几个关键字:try.catch.finally.throw.throws,以及各种各样的Excep ...

  6. kotlin协程硬核解读(5. Java异常本质协程异常传播取消和异常处理机制)

    版权声明:本文为openXu原创文章[openXu的博客],未经博主允许不得以任何形式转载 文章目录 1. 异常的本质 1.1 操作系统.程序.JVM.进程.线程 1.2 异常方法调用栈 1.3 ja ...

  7. java异常对象引用变量_Java面向对象编程-异常处理

    第九章 异常处理 异常情况会改变正常的流程,导致恶劣的后果,为了减少损失,应该事先充分预料所有可能出现的异常,然后采取以下措施: 首先考虑避免异常,彻底杜绝异常的发生:如果不能完全避免,则尽可能地减少 ...

  8. java 抛出异常效率_Java异常处理机制

    与C++.python,Ruby一样,Java也有一个异常处理机制,当程序出现异常时,系统会自动生成一个Exception对象通知程序去处理.之所以这样设计目的在于使程序有更好的容错性和可读性,实现业 ...

  9. java框架异常怎么处理_java异常处理与处理框架-笔记

    1.Java异常分为checked异常和unchecked异常 checked异常(需要在代码中try--catch显示捕获) 所有继承java.lang.Exception的异常.是可以在执行过程中 ...

最新文章

  1. chatscript_如何使用ChatScript构建您的第一个聊天机器人
  2. iptables 防火墙设置
  3. android8.1启动前台服务,Android - 保活(1)前台服务保活
  4. linux服务之NIS
  5. 知识蒸馏 循环蒸馏_Java垃圾收集蒸馏
  6. Android开发学习笔记-自定义组合控件
  7. C++学习系列笔记(六)
  8. Android学习总汇
  9. Win 2012 OS 安装.Net Framework 3.5
  10. nlp任务分类及适用方法
  11. matlab迭代实验总结,0618法matlab实验报告
  12. window 上 shell 连接工具
  13. java计算机毕业设计服装批发进销存系统MyBatis+系统+LW文档+源码+调试部署
  14. Matlab图像分割
  15. VB2015编写的九宫格拼图游戏及暴力求解解法(主要使用datagridview和listbox控件)
  16. 认识常见的显卡外接口
  17. 《多媒体在初中数学中的运用研究》课题研究方案
  18. BIOS和EFI启动过程
  19. python 余弦定理_自己实现文本相似度算法(余弦定理)
  20. 编程珠玑番外篇之番外篇-O 中间语言和虚拟机漫谈(ZZ)

热门文章

  1. python递归算法 电影院票价问题_算法课堂实验报告(二)——python递归和分治(第k小的数,大数乘法问题)...
  2. 基于K8S构建企业级Jenkins CI/CD平台实战(一) 之 环境搭建
  3. IDEA 中比较骚后缀补全技巧!你可能没用过
  4. UIEdgeInsets 说明
  5. c语言 程序 作文,编程之乐作文600字
  6. App混合应用Appium自动化测试框架技术难点
  7. linux远程安装本机软件,我的电脑怎样让对方远程装软件?
  8. mysql命令行显示乱码_mysql命令行显示乱码的解决方法
  9. 运维监控系统——使用API在zabbix监控系统中查看,创建及删除监控主机
  10. Linux配置vsftpd 服务