您的位置:首页 > 职场人生

黑马程序员--Java学习日记之IO(异常处理与finally)

2015-06-27 22:19 561 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、引出

异常:就是程序出现了不正常的情况,这种情况有时候需要我们去处理,就像我们人生病了要去医院看病是一样的,

Java中把这些不正常的情况封装成各种类(因为Java是面向对象的),然后给他取了个名字,叫异常。

二、异常的分类

Throwable 类是 Java 语言中所有错误或异常的超类。他有两个子类Error和Exception

※ Error:严重错误,一般是程序中出现严重的问题,如内存溢出,这些我们需要修改程序,不需要单独当异常处理

※ Exception:这种问题就是我们需要处理 ,它又可以分为两种

->RuntimeException:运行时异常,可以不用处理,但在运行后JVM会自动显示异常信息

->非RuntimeException:编译时异常,必须处理才能运行程序

其中我们在程序中经常可以见的就是RuntimeException和各种非RuntimeException的异常,像ArithmeticException、NullPointerException和ClassCastException等等。

三、异常的处理方案

那么异常出现了,我们就需要去处理它,以让程序可以继续执行后面的语句,完成程序的功能。

Java提供了两种的异常处理方案:1.用try…catch…语句;2.throws的抛出方式

※ try…catch语句

首先给出该语句的基本语法格式:

try{
//可能会出现异常的代码
}catch(异常类型名称 变量名){
//针对问题的处理
}finally{
//释放资源
}


所以总结一下该语句中程序的处理过程:

执行try中的代码
如有异常,JVM会判断什么类型的异常,然后去类库中封装相应类型的“异常类”
在catch中匹配相应的类型,并执行语句,

最后执行try…catch后的语句

按照上面的步骤,我们可以很清楚的得到上面图片显示的结果

但是我们程序的运行过程中可能会有几个或者很多的异常,那么我们怎么处理了,首先我们可以在程序中使用多个try…catch语句,但是显得程序有点冗余,于是我们可以用下面的多个catch语句格式

第二种方法之前,我们还需要了解运行时异常和编译时异常的区别:

* 编译期异常:Java程序必须显示处理,否则程序就会发生错误,无法通过编译,像在Date类时的ParseException

* 运行期异常:无需显示处理,也可以和编译时异常一样处理,像在第一种方法里的NullPointerException,ArithmeticException等等

※throws抛出

上面我们知道了有编译器异常,比如下面的例子,就用到了throws的方法,先看代码

public class ExceptionThrows {

public staticvoid
main(String[] args) {

//主方法里调用了该方法,接受了该异常,所以应该处理,这里用try...catch语句处理

try {

method();

} catch (ParseException e) {

//打印处理异常后的信息,调用的是父类Throwable中的方法

e.printStackTrace();

}

System.out.println("程序完毕,拜拜!");

}

//method方法里显示将字符串转为Date类型并显示

//在方法的后面用了throws方法跑出了一个异常

public staticvoid
method() throws ParseException {

//声明一个字符串

String st="2015-06-07";

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

//将该字符串转为Date类型,这一句会有编译期异常,所以我们采用throws的方法处理异常

Date date=sdf.parse(st);

System.out.println(date);

}

}

这里我们总结下throw和throws的区别

使用位置

#throw:用在方法体内。表示抛出某种类型的异常对象

#throws:用在方法声明外,在方法体上声明,表示抛出某种类型的异常
throws后跟的是异常类的类名,可以有多个

throw后跟的是异常对象,只能有一个

四、finally关键字

在前面最初介绍try…catch里的语句中就有finally这个关键字,他的语句里是有关释放资源的。这个在IO流操作和数据库的操作中经常可以见到。并且finally的最大一个特点就是无论是否出现异常,都会被执行。
public class Finally {
public static void main(String[] args) {
try{
System.out.println("打开一个文件......");
System.out.println("读取文件内容......");
//模拟一个异常
//  System.out.println(10 / 0);

}catch(Exception e){
System.out.println("发生异常了");
}finally{
System.out.println("关闭文件。");
}
}
}


——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: