异常处理(throw,throws,try,catch,finally)
一、异常
1、定义:程序在运行时出现的不正确的情况。
2、由来:问题也是生活中的事物,也可以被Java描述,并被封装成对象。
其实就是Java对不正常情况进行描述后的对象体现。
3、划分:Java对于异常的划分分为两种:一种是严重的划分、一种是非严重的划分。
严重的异常,Java使用 Eroor 类进行封装。
非严重的异常,Java使用 Exception 类进行封装。
Error: 对于error,我们一般不使用针对性的代码对其进行处理。
Exception: 对于exception, 我们一般会编写针对性的代码对其进行处理。
Throwable :
|--Error
|--Exception
二、异常的处理
1、捕捉:
1)、Java给我们提供了捕获异常的语句: Try{须要被检测的代码}
catch(异常类1 变量名){异常处理方法1}
catch(异常类2 变量名){异常处理方法2}
....
finally{一定会执行的语句}
2)、对捕获到的异常对象的常见操作:
(1)、getMessage()方法 :Throwbble中定义的返回异常信息的方法: String getMessage(){}
(2)、toString()方法 :在Object中定义,在异常类中重写的返回字符型信息的方法: String toString(){}
(3)、printStackTrace()方法:throwable中定义的打印异常信息流的方法: void printStackTrace(){}
其实jvm默认的处理方法就是在调用 printStackTrace()方法。
2、声明(抛出)
1)、Java给我们提供了throw 和 throws关键字来抛出异常。
2)、对于函数中含有可能出现异常的语句时,应在函数上使用 throws 异常类名 来声明(抛出)这个异常。(表明此处可能发生异常,
如果发生,抛给调用函数)
此举 强迫调用函数在调用处 处理异常(捕捉或者声明),增加安全性。
3、注意: 一旦程序被抓住处理了(try catch),程序会继续往下执行。
三、对多异常的处理
1、在函数上声明(抛出)异常时,尽量声明的更具体(也就是声明子类异常),这样, 在调用函数中处理异常的时候也可以处理的更具体
2、处理的原则 :对方声明几个异常, 就应该有几个 catch块儿。
如果几个catch块的异常类之间有继承关系,则 :父类对象的catch块儿放下面。
建议: 在catch中对异常进行处理的时候,要有具体的处理方法, 不要就是一件简单的 输出打印语句, 或者一个 e.printStackTrace(),
四、自定义异常
原因:项目中会有一些的特殊的问题,Java并未进行封装,所以我们可以按照Java封装异常的的方法来对这些异常进行自定义的异常封装。
创建方法:创建新的异常类的方法:定义一个新的异常类,并且此类必须要继承至Exception类。
for example : class FuShuException extends Exception 。
使用方法:在使用时,如果有可能会发生我们自定义的异常的时候, 我们就应当手动的写语句进行判断,当判断符合要求时就
通过 throw 关键字来人为的从方法内部抛出异常对象。
当我们从方法内部抛出异常之后,就必须对这个异常进行处理(要么在方法上进行声明(抛出), 或者进行try ()catch{})。
但是在一般的时候,我们都将这个内部抛出的方法做声明处理。
注意:我们自定义异常类的时候,就必须继承至 Exception 类,所以就继承了其中的方法,这个方法可以直接使用 也可以重写 ,
我们还可以直接定义其他的特有的方法。
继承Exception 的原因: 因为我的异常体系有一个特点:异常类 和异常对象 都具有可抛性(被 throw 和throws操作)。 而这个可抛性是异常类的特有特点。
五、throw 和throws 的区别:
1、throws:使用在函数上, 后面跟的是异常类,可以跟多个,使用逗号隔开。
2、throw :使用在函数内部, 后面跟的是异常对象。
六、RuntimeException.
定义:在Eception 中有一个特殊的子类异常: RuntimeException ,直译为运行时异常。
特点:在函数类进行了抛出时,可以不用再函数上进行声明。
在函数上进行了声明后,可以不用在调用处 进行处理(声明 或者 try)
老师的解释:之所以不在函数上声明,是因为该类的异常不需要让调用者处理, 当该异常发生, 是希望程序停下来。
因为出现了无法运算的情况,希望停止程序后,对代码进行修正。(避免隐藏异常)
所以:当我们在自定义异常时, 如果该异常一旦发生,会造成程序不能继续运行,那么此时就应让 自定义类去继承 RuntimeException ,
使得该类异常一旦发生就会让程序停下了。
七、finally关键字。
功能:是为异常处理提供一个统一的出口,使得在控制流程转到程序其他部分以前,能对程序的状态做统一的管理。
作用:通常在finally语句中可以进行资源的清楚工作,:
如: 关闭打开的文件。 删除临时文件。 关闭数据库连接动作。
注意:无论try语句是否检测到异常, finally语句中的代码都会执行, 而且是 一定会执行、一定会执行、一定会执行
但是,还是有一种情况finally语句将不能执行:其前面有System.exit; //系统推出,程序运行结束, jvm结束。
八:异常检测语句的三中格式:
1、 try{} catch(){}
2、 try{} catch(){} finally{}
3、 try{} finally{}
注意:如果语句中没有catch 语句,就不能算异常已经被处理,如第三句的异常实际上没有被处理。(此时的异常要在方法处标示:抛出)
九、异常在子类和父类之间的覆盖体现:
1、当子类在覆盖父类时,如果父类中的方法抛出了异常,那么子类中的覆盖方法只能抛出该类异常, 或者是其子类异常, 或者不抛出异常。
2、如果父类方法抛出了多个异常,那么子类方法在覆盖父类方法的时候就只能抛出父类异常的子集。
3、如果父类或者接口方法在定义时没有异常抛出,那么子类方法在覆盖时也不能有异常抛出。
总结: 就是说子类方法中不能抛出比父类异常范围更大的异常,
如果确实在子类方法中产生了超出父类方法异常范围的异常,就必须在子类中
进行try{} catch(){}处理。
原因:如果子类方法中抛出了父类方法没有抛出的异常,当父类引用指向子类对象的时候,给父类方法准备的异常处理语句无法处理子类所抛出的异常。
十、总结:
异常(Exception):
|----编译时被检测异常:
|----编译时不被检测异常(RuntimeException及其子类)
Java中除了一些最基本的语法规则, 在实际开发的时候,尽量要培养自己的面向对象的思想,这个很重要, 把对象当成人一样的去思考。还要当成一个
礼貌的、思考周到的人去思考。对象之间的调用等一切动作都是人与人之间的打交道。
异常处理(throw,throws,try,catch,finally)的更多相关文章
- 【Java】异常 —— throw, throws, try catch 相关内容
嗯……面试考到了这个,又是一个如无意外 那么接下来就总结吧 一.什么是异常 程序运行过程中发生的异常事件. RuntimeException通常是因为编程员因为疏忽没有检查而引起的错误. 二.Exce ...
- Java throw throws try...catch区别
java里的异常多种多样,这是一种非常有用的机制,它能帮助我们处理那些我们未知的错误,在java里,关于异常的有throw throws,还有一个try catch 程序块.接下来我们挨个看看这几个的 ...
- final finalize finally throw throws try catch
什么是finalize()方法 finalize()方法什么时候被调用 参见网址 析构函数(finalization)的目的是什么 final 和 finalize 的区别 final以下参见网址 f ...
- throw throws try catch finally return
throw throw 语句用于抛出异常,例如 throw new EOFException(). throws 当使用throw 语句抛出checked 异常后,可以不用捕获异常并处理,而是使用 ...
- java异常处理之throw, throws,try和catch
转自 http://blog.csdn.net/zhouyong80/article/details/1907799 程序运行过程中可能会出现异常情况,比如被0除.对负数计算平方根等,还有可能会出现 ...
- throws、throw和try catch
在学习代理模式的时候,编写动态生成代理类.java文件时,用try{}catch(){}捕获异常发现catch(Exception e)报错,得换成catch(Throwable e),然后又查了查两 ...
- java:异常机制(try,catch,finally,throw,throws,自定义异常)
* String类中的格式化字符串的方法: * public static String format(String format, Object... args):使用指定的格式字符串和参数返回一个 ...
- 【又长见识了】C#异常处理,try、catch、finally、throw
异常处理:程序在运行过程中,发生错误会导致程序退出,这种错误,就叫做异常.处理这种错误,就叫做异常处理. 1.轻描淡写Try.Catch.Finally.throw用法 在异常处理中,首先需要对可能发 ...
- 顺平讲try catch finally throw throws(精华)
try catch finally 有点像if else语句 还有像javascript的服务器执行成功后的回调函数,success:function(){ 进行处理 }; throws的意思是将异 ...
随机推荐
- Linux下selinux简单梳理
在linux环境下执行某些程序时,偶尔会遇到来一个关于selinux的强制模式不可执行的情况,这种情况下需要关闭selinux或者将enforcing改为permissive模式后才能进行执行.sel ...
- python升级后带来的几个小问题
1)python升级带来的yum异常:File "/usr/bin/yum", line 30 原因:这是因为yum采用Python作为命令解释器,这可以从/usr/bin/yum ...
- (第十二周)final预发布视频
项目名:食物链教学工具 组名:奋斗吧兄弟 组长:黄兴 组员:李俞寰.杜桥.栾骄阳.王东涵 Final阶段视频发布 平台:优酷 链接:http://v.youku.com/v_show/id_XMTg0 ...
- Linux内核期中
Linux内核期中总结 一.计算机是如何工作的 个人理解:计算机就是通过和用户进行交互,执行用户的指令,这些指令存放在内存中,通过寄存器存储,堆栈变化,来一步步顺序执行. 二.存储程序计算机工作模型 ...
- window.setTimeout
https://developer.mozilla.org/zh-CN/docs/Web/API/Window/setTimeout
- FTP Download File By Some Order List
@Echo Off REM -- Define File Filter, i.e. files with extension .RBSet FindStrArgs=/E /C:".asp&q ...
- [日常工作]GS使用安装盘修改密码后的处理
1. GS服务器端有时候需要修改 9999 的用户密码.但是修改完密码之后有几个注意事项: 一般有两个可以修改注册的地方: 使用setup里面的修改用户密码 修改完密码之后要手工注册一下数据库实例 也 ...
- js控制浏览器全屏
HTML 5中的full screen,目前可以在除IE和opera外的浏览器中使用 ,有的时候用来做全屏API,游戏呀,等都很有用.先看常见的API element.requestFullScree ...
- 修改maven的默认jdk版本
问题: 创建maven项目的时候,jdk版本默认使用的是1.5版本. 解决: 1.修改maven的settings.xml文件,添加如下: <profile> <id>jdk- ...
- MyBatis:一对一关联查询
MyBatis从入门到放弃三:一对一关联查询 前言 简单来说在mybatis.xml中实现关联查询实在是有些麻烦,正是因为起框架本质是实现orm的半自动化. 那么mybatis实现一对一的关联查询则是 ...