一、概念和分类

JAVA程序设计语言中,异常对象都是Throwable类的一个实例。Throwable分为Error和Exception。

  其中,Error类层次结构描述了JAVA运行时系统的内部错误和资源耗尽错误,这种错误无法操作。在设计JAVA程序时,我们只需要关注Exception。

  Exception包含两个分支:

    1. RuntimeException
    2. 其他异常。

  划分两个分支的规则是:由程序错误导致的异常属于RuntimeException;而程序本身没有问题,但由于I/O错误这类问题导致的异常属于其他异常。

  RuntimeException即是运行时异常,即在程序运行的时候才出现的异常,又称“未检查异常”,意即“编译器未检查出的异常”。

  其他异常称为“已检查异常”。

  派生于RuntimeException的异常包含下面几种情况:

    • 错误的类型转换。
    • 数组访问越界
    • 访问空指针

  其他异常包括:

    • 试图在文件发问后面读取数据
    • 试图打开一个不存在的文件。
    • 试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在。

 二、异常的声明

  在JAVA的方法里,如果可能遇到无法处理的情况,比如要打开的文件并不存在,这时就要声明异常。声明异常的方法是在方法的首部声明所有可能抛出的异常。比如标准类库中的FileInputStream类的一个构造器的声明:

  

  一个方法必须声明所有可能抛出的已检查异常(Exception中RuntimeException之外的其他异常),而未检查异常要么不可控制(Error),要么就应该避免发生(RuntimeException)。

  如果一个方法没有声明所有可能发生的已检查异常,编译器就会报错。

三、异常的抛出

  异常的抛出使用“throw”关键字,比如一个方法可能出现EOFException,我们希望它抛出这个异常,可以用下面的语句:

  1.   throw new EOFExcetion();

或: 

  1.   EOFExcetion e = new EOFException();
  2.   throw e;

  如果一个方法里使用了throw关键字抛出了一个异常,并且这个异常又不是RuntimeException,那么必须在方法首部用throws声明这个异常。

  如果一个方法用throws声明了一个异常,那么调用这个方法的方法就必须对这个异常进行捕获,或者继续声明。(这个有一点例外,如果父类方法中没有声明异常,那么子类在覆盖父类这个方法的时候也不能声明异常,见JComponent.paintComponent方法)

四、创建异常类

  有时候我们可能会遇到所有标准异常类都无法准确处理的问题,比如

  int age = -1;

  这行代码本身没有什么问题,但是实际上年龄不可能为负数。这个时候我们就需要自己来创建一个异常类:

  

  

五、异常的捕获

  如果某个异常没有在任何地方进行捕获,那么程序就会终止执行,并在控制台上打印出异常信息,其中包括异常的类型和堆栈和内容。

  要想捕获一个异常,必须设置 try/catch 语句块:

  1.   try{
  2.     someCode;
  3.   }catch(ExceptionType e){
  4.     handle for this Exception;
  5.   }
  •   如果在try语句块中的任何代码抛出了一个在catch子句中有被说明的异常类,那么程序将跳过try语句块的其余代码,并且执行catch子句中的处理代码。
  •   如果在try语句块中的代码没有抛出任何异常,那么程序将跳过catch语句。
  •   如果方法中的任何代码抛出了一个在catch子句中没有声明的异常类型,那么这个方法就会立刻退出。

  

JAVA里的异常的更多相关文章

  1. Java 里的异常(Exception)详解

    作为一位初学者, 本屌也没有能力对异常谈得很深入.   只不过Java里关于Exception的东西实在是很多. 所以这篇文章很长就是了.. 一, 什么是java里的异常   由于java是c\c++ ...

  2. Java 中的异常和处理详解

    Java 中的异常和处理详解 原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误 ...

  3. Core Java 总结(异常类问题)

    所有代码均在本地编译运行测试,环境为 Windows7 32位机器 + eclipse Mars.2 Release (4.5.2) 2016-10-17 整理 下面的代码输出结果是多少?为什么?并由 ...

  4. 【Java心得总结二】浅谈Java中的异常

    作为一个面向对象编程的程序员对于 下面的一句一定非常熟悉: try { // 代码块 } catch(Exception e) { // 异常处理 } finally { // 清理工作 } 就是面向 ...

  5. 关于java中的异常问题 1

    1.首先参考一下关于java异常处理方面的知识 查看博客http://lavasoft.blog.51cto.com/62575/18920/ 这里介绍的很好,下面从中学习到一些东西,摘抄如下: 1. ...

  6. [Effective Java]第九章 异常

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. 点评阿里JAVA手册之异常日志(异常处理 日志规约 )

    下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:异常处理 日志规约 本文难度系数为一星(★) 本文为第三篇 ...

  8. (转)Java里的堆(heap)栈(stack)和方法区(method)(精华帖,多读读)

    [color=red][/color]<一> 基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收.   引用数据类型,需要用new来创建,既在栈 ...

  9. java.util.ConcurrentModificationException 异常问题详解

    环境:JDK 1.8.0_111 在Java开发过程中,使用iterator遍历集合的同时对集合进行修改就会出现java.util.ConcurrentModificationException异常, ...

随机推荐

  1. 关于sizeof 跟strlen 的区别

    char *t = "我a"; char t1[MAX_PATH] = "aaaaaa"; char display1[MAX_PATH]; char disp ...

  2. html 报表导出excel防止数字变科学计数

    在html 标签加:  <html xmlns:x="urn:schemas-microsoft-com:office:excel">    在要导出的tr加:  &l ...

  3. 史航416第八次作业&总结

    一.知识点总结: 1.数组的输入,输出及对整个数组所有元素进行操作通常都用循环结构实现. 2.可以只给部分元素赋初值.当{ }中值的个数少于元素个数时,只给前面部分元素赋值. 3.只能给元素逐个赋值, ...

  4. centos网卡配置和防火墙停止和启动

    Linux 设置网卡配置ip vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=static ...

  5. WeakHashMap回收时机

    import java.util.ArrayList; import java.util.List; import java.util.WeakHashMap; public class TestWe ...

  6. 浅析jquery ui的datepicker组件

    今天计划在博客上添加一个日历,方便用户查看日期.Google了一圈,最终决定使用jquery ui的datepicker部件实现.原因有三:Datepicker使用配置比较简洁,几行代码就可以得到一个 ...

  7. exception 'yii\base\ErrorException' with message 'Class 'MongoClient' not found'

    问题描述: 本来项目运行的好好的,搬了一次办公室(电脑主机一起搬的),第二天的时候就登录不了了. php版本和扩展没有改变,且没有修改任何配置,我尝试重启php5-fpm 服务,又重启nginx服务, ...

  8. 【好文要转】HTTP图解(大牛必经之路)

    http://www.cnblogs.com/aylin/p/6221436.html

  9. 使用SVN时出现的文件缺失问题

    使用SVN的童鞋们,可能有三种提交代码的方法: 第一种使用客户端(例如SVNX,CornerStone): 第二种使用Xcode提交(Source Control -> commit): 第三种 ...

  10. flash中htmlText样式

    赋值htmlText时,htmlText中指定了样式的按指定样式显示,没有指定的按该文本的默认样式显示. PS:flash软件拖出来的文本,在赋值htmlText的时候该文本原有样式会失效,而new出 ...