码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA里的异常

时间:2015-08-26 19:42:25      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

一、概念和分类

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

技术分享

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

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

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

  

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

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

  其他异常包括:

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

 二、异常的声明

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

  技术分享

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

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

三、异常的抛出

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

  throw new EOFExcetion();

 

或: 

  EOFExcetion e = new EOFException();
  throw e;

 

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

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

四、创建异常类

  有时候我们可能会遇到所有标准异常类都无法准确处理的问题,比如 int age = -1;这行代码本身没有什么问题,但是实际上年龄不可能为负数。这个时候我们就需要自己来创建一个异常类:

  技术分享

  技术分享

五、异常的捕获

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

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

  try{
    someCode;
  }catch(ExceptionType e){
    handle for this Exception;
  }

 

  •   如果在try语句块中的任何代码抛出了一个在catch子句中说明的异常类,那么程序将跳过try语句块的其余代码,并且执行catch子句中的处理代码。
  •   如果在try语句块中的代码没有抛出任何异常,那么程序将跳过catch语句。
  •   如果方法中的任何代码抛出了一个在catch子句中没有声明的异常类型,那么这个方法就会立刻退出。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

JAVA里的异常

标签:

原文地址:http://www.cnblogs.com/livterjava/p/4761072.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!