目标

异常(5个关键字 throw try catch finally throws )

一、概念

异常: 非正常情况,例外。人为什么会生病?内因+外因。内因: 身体不够健壮—>锻炼身体增强体质。外因: 与外界存在联系,如刮风下雨、雾霾–>做好防护工作。一旦真生病后怎么办?小病: 自己买药、泡药、吃药,后面的工作还可以继续。大病: 只能去医院,病交给医生,停止后续的工作。交给医生处理,转上级医院;医生来治。

程序与人身体一致,分为两种: Error 和Exception. 错误: 系统奔溃,不是程序的问题,比如JVM内存溢出、断电。 Exception: 非正常情况,RuntimeException(内因) 和CheckedException(外因).内因指程序不够健壮,增强健壮性,靠程序的修养加以增强,日积月累的过程。CheckedException称为编译时异常,必须处理的异常,一般与外界存在联系。如: 与文件的交互,文件是放在操作系统的硬盘上,做好防护工作,防止文件不可操作或者没有权限;与数据库的交互,数据库在交互的过程中可能存在访问失败,同样要做好防护工作。

如何区分? 查看继承链,如果一个类继承 RuntimeExcepton 就是运行时异常,否则没有继承RuntimeException,就是非运行时异常、编译时异常。

每一个方法内部都可能存在RuntimeException

二、体系

异常也是类,之所以出现异常,内部产生了异常对象(jvm内部产生的或程序员编写的异常),异常是“使程序中断的指令流”。体系为:

Throwable

1、Error: 称为错误,非程序问题,一般不用程序员处理

2、Exception: 称之为异常,程序问题,程序员来处理。

1)、RuntimeException: 运行时异常,内因,程序不够健壮,通过编写代码来解决。每个方法内部都可能存在异常。

2)、CheckedException: 编译时异常,没有继承RuntimeException,都是此异常。通过异常机制来解决

三、Throwable

Throwable为异常或错误的基类,一般不会使用它创建对象,掌握发生多态时,三个方法即可

1、String toString()  : 异常对象的字符表现形式(简短)

2、String getMessage():异常对象的字符表现形式(详细)

3、printStackTrace() : 跟踪异常

打印与跟踪的异常过程中,与正常的输出之间没有绝对的先后顺序,分别为不同的路径(多线程)。

四、RuntimeException

运行时异常,指程序不够健壮。

1、NullPointerException

“只有引用没有对象”,访问了对象的信息。

如:

推荐的解决方案: 增强健壮性

2、ArithmeticException

违背数学的常识,如”除数不能为0”

如:

推荐的解决方案: 增强健壮性

3、ClassCastException

发生多态时,向下类型转换时出现的异常。

推荐的解决方案: 增强健壮性

注意: 每个方法都存在一个RuntimeException

五、CheckedException

此类异常是指程序与外界存在交互,必须做好防护工作,必须处理的异常,如果不处理,编译错误,也称之为”编译时异常”。

从继承链上看,凡是没有继承RuntimeException都是此类异常。

此类异常不能通过程序的健壮性来处理,处理方式,使用异常机制。

1、对内捕获处理

在方法内部自行处理,好处: 处理完成异常之后,后续还可以执行,一般这样异常,不影响程序的整个的运行。

如定位文件时,文件不存在FileNotFoundException

try..catch

读取文件时,IOException

多个catch

当出现一个try.多个catch配对时,避免多态出现,先逮小的后逮大的。

finally

最终的,释放资源,通知外部可以释放资源了。

区别: finally finalize final 三者的区别

关系

try必须存在,最多一个,不能单独出现。

catch: 可以没有(必须存在finally),也可以多个

finally: 可以没有(必须存在catch),最多一个

常见的配对形式

try.catch

try..finally

try..catch..finally

2、对外声明处理

在方法内部不处理,交给方法的调用处理,好处:简单,一般这样异常,交给程序统一异常处理层来处理。使用  throws ,方法对外声明的异常。

格式:

方法的调用处来处理

1)、方法调用处自己处理try..catch

2)、再往上声明,一直声明到最上层 throws。

六、异常产生的原因

1、系统内部对外声明的异常

此类异常由JVM虚拟对外声明出来的,一旦出现异常,可能给处理处抛出异常对象(虚拟机new处来的对象)。

2、方法内对外抛出异常

throw:抛出异常对象,抛出公司业务的自定义异常

方法内存在 throw 检查时异常,方法的声明出必须存在throws

思考: 一个方法如何结束?

1、  正常执行完毕

2、  return

3、  throw

4、  停止虚拟机 :         System.exit(-1);

七、重写与异常

重写

1、子类中方法签名相同;

2、返回类型|异常<= à基本|void 必须相同;引用类型<=

3、可见性: >=

异常: 子类的异常必须在父类的异常范围内,不能比父类方法异常大,不是指个数。

1、  如果父类的方法没有异常,子类不能声明CheckedException

2、  如果父类中存在CheckedException,子类异常只能<=

八、自定义异常

少数的公司,根据业务自定义业务异常、分层异常。定义格式

publicclassXxxExceptionextends Exception {

XxxException(String msg){

super(msg)

}

}

如:

使用方式与jdk内置的异常,同理:

总结

1、  一张体系图

2、  try catch finally throw throws

java学习第九天的更多相关文章

  1. JAVA学习前十天:小结、面向对象之”扑克牌“例子

    2016年4月26号正式步入JAVA学习课堂,学习了第一节JAVA课程,由于以前有C语言基础,所以课程有点快! 第一天:学习了教材的第一部分,第一部分总共两章,分别是JAVA简介和JAVA基础语法. ...

  2. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  3. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  4. 分享篇——我的Java学习路线

    虽然之前我是开发出身,但是我学习的语言是Objective-c,这个语言使用起来范围比较窄,对于自动化学习来说也是无用武之地,所以我自己学习了Java,对于一个有开发经验的人来说学习一门新语言相对来说 ...

  5. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  6. Java学习心得之 HttpClient的GET和POST请求

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 HttpClient的GET和POST请求 1. 前言2. GET请求3 ...

  7. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  8. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  9. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

随机推荐

  1. 5月5日 while、do{}while

    while .do{}while 一.while的死循环 while (1 == 1)//只要表达式里是true,就是死循环 { //循环内容 } 二.do{}while 不管while是否满足,首先 ...

  2. HDU4815

    Little Tiger vs. Deep Monkey Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K ( ...

  3. java入门第三步之数据库连接【转】

    数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Datab ...

  4. Eclipse导出可执行Jar文件(包含第三方Jar包)

    1. 首先,右键你的Java工程,选择Export,在Java文件夹下选择Runnable JAR file,如下图所示: 2. 选择Runnable JAR file后,会弹出如下所示的对话框,选择 ...

  5. 一个漂亮灵活的PHP图片验证码

    <?php class Imagecode{ private $width ; private $height; private $counts; private $distrubcode; p ...

  6. 使用ASP.Net WebAPI构建REST服务(三)——返回值

    Asp.Net WebAPI服务函数的返回值主要可以分为void.普通对象.HttpResponseMessag.IHttpActionResult e四种,本文这里简单的介绍一下它们的区别. 一.返 ...

  7. NOIP 2013 提高组 day1 T2 火柴排队 归并 逆序对

    描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑i=1n(ai−bi)2∑i=1n(ai−bi) ...

  8. 在shell脚本中进行条件控制以及使用循环

    转载请标明:http://www.cnblogs.com/winifred-tang94/ if条件语句语法: if [ 条件表达式 ] then 代码 else 代码 fi 注意:在上面的if条件语 ...

  9. iOS之沙盒机制和如何获取沙盒路径

    iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme.沙盒里面的文件可以是照片.声音文件. ...

  10. idea常用快捷键大全(转)

    IntelliJ Idea 常用快捷键列表   文章来自:http://lavasoft.blog.51cto.com/62575/97730/   Alt+回车 导入包,自动修正Ctrl+N   查 ...