黑马程序员--Java学习日记之IO(异常处理与finally)
来源:互联网 发布:淘宝客推广链接被篡改 编辑:程序博客网 时间:2024/05/29 18:52
一、引出
异常:就是程序出现了不正常的情况,这种情况有时候需要我们去处理,就像我们人生病了要去医院看病是一样的,
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 staticvoidmain(String[] args) {
//主方法里调用了该方法,接受了该异常,所以应该处理,这里用try...catch语句处理
try {
method();
} catch (ParseException e) {
//打印处理异常后的信息,调用的是父类Throwable中的方法
e.printStackTrace();
}
System.out.println("程序完毕,拜拜!");
}
//method方法里显示将字符串转为Date类型并显示
//在方法的后面用了throws方法跑出了一个异常
public staticvoidmethod() 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培训、期待与您交流! ——-
- 黑马程序员--Java学习日记之IO(异常处理与finally)
- 黑马程序员--Java学习日记之IO流(其他流&异常处理)
- 黑马程序员学习日记(5)--异常与异常处理
- 黑马程序员-----java异常处理机制(学习日记)
- 黑马程序员Java Io 日记
- 黑马程序员——java学习之异常处理
- 黑马程序员-java学习日记之集合
- 黑马程序员--Java学习日记之反射
- 黑马程序员——学习日记之IO流
- 黑马程序员--Java学习日记之复习总结(递归以及IO流概述)
- 黑马程序员--Java学习日记之IO流(字符流和字节流)
- 黑马程序员_java学习之异常处理
- 黑马程序员java学习日记十一 IO流
- 黑马程序员Java学习日记(6)IO
- 黑马程序员--异常finally
- 黑马程序员---异常finally
- 黑马程序员------Java基础学习------异常处理
- 黑马程序员--学习笔记--Java异常处理
- 《偷心》有感
- 谈谈Ext JS的组件——布局的使用方法续二
- android style中出现自定义属性时的写法
- 指针常量和常量指针的几种改变方式
- 几种多线程3D引擎架构的比较
- 黑马程序员--Java学习日记之IO(异常处理与finally)
- ewebEditor 更改上传文件时不要重命名
- XPP3 即 MXP1--一个非常快的XML解析器
- String创建对象理解
- IE7 float:right 时元素换行 的bug解决办法
- Ubuntu14.04搭建FFMPEG + SDL + CodeBlocks开发环境
- 小白学习之路(二):java 中> , >> , >>>的区别
- Window7 (64位) 上安装Theano 0.7的快捷方法
- SQLServer 复制中移除和添加发布而不初始化所有项目