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

Java学习日记9-异常

时间:2015-11-25 22:04:01      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

异常(Exception)

一、什么是异常?

异常就是程序中的错误,比如数组越界、访问空指针等。在Java中,一切皆对象,异常也不例外。所有的异常都是派生于Throwable类的一个实例对象。

二、异常的分类

在异常界,有两大流派。一派叫Error类,另一派叫Exception类,它们都继承自Throwable类。在Exception类下还有两大分支,IOException类RuntimeException类

RuntimeException是由程序本身的错误导致的异常。

IOException是程序本身没有问题,但是因为IO发生的错误引起的异常。

举例:

RuntimeException

IOException

数组访问越界

试图打开一个不存在的文件

访问空指针

试图在文件尾部读取数据

错误的类型转换

 

RuntimeException类和它的叔叔Error类比较亲,叔侄俩统称为未检查异常(unchecked Exception),大白话就是不用你检查,不用你管的异常。而IOException和它的兄弟和叔叔明显不是一路的,被称为已检查异常(checked Exception),就是你得管它。

 

三、异常处理(Exception handing)

前面说过未检查异常不用我们管,所以这里就只说我们怎么对付已检查异常。

1throws

 首先,你得声明它。方法应该在其首部用throws+异常名声明所有可能抛出的异常。

  抛出异常的4中情形:

  1.调用一个抛出已检查异常的方法。

  2.程序运行过程中发现错误,并且利用throws语句抛出已检查异常

  3.程序出现错误,比如数组访问越界,会自动抛出ArrayIndexOutOfBoundsException

  4.Java虚拟机和运行时库出现的内部错误

  举个例子:

1 Class MyAnimation{
2     public Image LoadImage(String s)throws IOException, EOFException
3     {
4     ......
5     }
6 }

(2)用throw关键字抛出异常

 1 String readData(Scanner in)throws EOFException{
 2     ...
 3     while(...){
 4         if(!in.hasNext())
 5         {
 6             if(n<len)
 7             throw new EOFException();
 8         }
 9     }
10 }        

(3)自定义异常

java提供的异常满足不了需要的时候,可以自己DIY一个

 1 //定义一个FileFormatException类
 2 class FileFormatException extends IOException{
 3     public FileFormatException(){}
 4     public FileFormatException(String gripe){
 5         super(gripe);
 6     }
 7 }
 8 //下面抛出自定义异常
 9 String readData(Scanner in)throws EOFException
10 {
11     ...
12     while(...){
13         if(ch == -1){
14             if(n<len)
15             throw new FileFormatException();
16         }
17     }
18     return s;
19 }    

(4)捕获异常

光把异常抛出去,不能不管啊,所以就得捕获它并处理它。

1 //利用try-catch语句块捕获异常
2 try{
3     code
4 }
5 catch(ExceptionType e){
6     handler for this type
7 }

  如果在try语句块中的代码抛出了一个在catch子句中说明的异常类,那么

  1)程序将跳过try语句块的其他代码。

  2)程序将执行catch子句中的处理器代码

(5)异常-方法内外

  对于异常,可以在方法内部用try-catch语句块来捕获并处理,如果不想在方法内处理,可以在方法首部声明可能抛出的异常,将异常可能抛出的异常交给调用方法的代码去处理。总之,就是方法内用try-catch处理,方法外用throws抛出。

(6)捕获多个异常

1 try{
2     code
3 }
4 catch(FileNotFoundException | UnknowHostException e){
5     ...
6 }
7 catch(IOException e){
8     ...
9 }

(7)finally

1 try{
2     ...
3 }
4 catch(IOException e){
5     ...
6 }
7 finally{
8     ...
9 }

不管有没有异常发生,finally语句块中的代码都将执行。

try-catchtry-catch-finallytry-finally三种组合,1、3组合更常用

(8)带资源的try语句块

带资源的try块在退出时,会自动关闭资源,这样往往就可以省掉finally语句 

1 try(Scanner in = new Scanner(new FileInputStream(“文件路径”))){
2     while(in.hasNext())
3     System.out.println(in.next());
4 }

 注:╮(╯▽╰)╭本文大量参考《Java核心技术 卷I》

 

 

Java学习日记9-异常

标签:

原文地址:http://www.cnblogs.com/youilika/p/4995897.html

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