黑马程序员_异常
来源:互联网 发布:巧克力知乎 编辑:程序博客网 时间:2024/04/28 15:21
一、异常概述
异常:是在运行时期发生的不正常情况.在java中用类的形式对不正常情况进行了描述和封装对象.描述不正常的类就称为异常类.以前正常流程代码和问题处理代码相结合,现在将正常流程代码和问题处理分离,提高阅读性.其实异常就是java通过面向对象的思想将问题封装成了对象,用异常类对其进行描述.
异常的父类就是Throwale,是java语言中所有错误或异常的超类。只有当对象是此类或其子类的实例时,再能通过java虚拟机或者java thow语句抛出。
异常的体系:父类:Throwable 子类:Error和Exception
Error:通常出现的是重大问题:如运行的类不存在或者内存溢出,一般情况不可以处理.特点:由JVM抛出严重问题,已经影响到程序的执行,这种问题一般不针对处理,直接修改程序.
Exception:在运行时,出现的情况,它可以通过try{}catch(){}finally.Error和Exception子类名都以父类名作为后缀,阅读性比较强.
Throwable有一个特点:及所有的子类都具有可抛性,无路时Erroe还是异常问题,问题发生就应该抛出.
可抛性关键字
throws:自定义异常异常类的抛出. throw:原理异常对象的抛出.
对于他们的区别我的理解是:1.throws使用在函数上,throw使用在函数内;2.throws抛出的是异常类,可以抛出多个,用"," 逗号隔开.throw抛出的是异常对象
自定义异常:自己写一个异常类,它必须继承异常体系,才具有可抛性.这里就简单的说一下.
用throws声明方法可能抛出自定义的异常,并用throw语句在适当的地方抛出自定义的异常。例如:在某种条件抛出异常
public void test1() throws MyException{ ... if(....){ throw new MyException(); }} //将异常转型(也叫转译),使得异常更易读易于理解public void test2() throws MyException{ ... try{ ... }catch(SQLException e){ ... throw new MyException(); }} //还有一个代码,很有意思:public void test2() throws MyException{ ... try { ... } catch (MyException e) { throw e; } }这段代码实际上捕获了异常,然后又和盘托出,没有一点意义,如果这样还有什么好处理的,不处理就行了,直接在方法前用throws声明抛出不就得了。异常的捕获就要做一些有意义的处理。
二、Exception的分类
Exception可以说是我们自己可以控制的,并且知道在这个时候可能会出现这样的异常,简单的说就是可以处理。
它分为两大类:1.编译时被检测异常:只要是Exception和其子类都是,除了特殊子类RuntimeException体系。这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应处理方式,可针对性处理。
2.运行时的异常(编译通过,运行不通过):这就是RuntimeException和其子类.这种问题的发生,无法让功能继续,运算无法进行,更多是因为调用原因导致,或者引发了内部状态的改变导致的。这种问题编译允许通过,在运行时,让调用者调用时的程序强制停止,让调用者对代码进行修正。
总结:RuntimeException是可能在JVM正常运行期间抛出异常。Error是虚拟机出错,不可处理.
三、异常捕捉
try{
可能会出现异常的代码;
}
catch(会抛出的异常的所在类)
{
出现异常后处理的的代码; ← ← ← 左边就是通常对异常进行针对性处理方式
}
finally
{
不管是否出现异常都必须执行的代码;
}
四、异常处理原则
1.函数内容如果抛出需要检测的异常,那么函数上必须声明,否则必须在函数内用try{}catch(){}捕捉.否则编译失败;
2.如果调用到了声明异常的函数,要么try{}catch(){},要么throws,否则编译失败;
3.什么时候catch,什么时候throws呢?我的理解是功能内容可以解决,就用catch.解决不了,用throws告诉调用者,由调用者解决.
4.一个功能如果抛出多个异常,那么调用时,必须有对应多个catch进行处理,内部有几个需要检测的异常,就抛出几个异常,抛几个就catch几个.
着这里列出几个try catch finally 组合的特点
1.try+catch+finally 需要处理异常,同时在有异常的情况下仍然要执行指定的代码
2.try+catch(多个) 当没有必要资源释放时,可以不定义
3.try+finally 异常无法直接catch处理,但资源需要关闭.
五、异常注意事项
1.子类在覆盖父类方法时,父类的方法如果抛出了异常,那么子类的方法只抛出父类的异常或该异常的子类.(这个说的可能有点绕,可以理解为遗传的特性,父亲的病遗传到儿子身上,那么儿子也要去医院看这个病)
2.如果父类抛出多个异常,那么子类只抛出父类异常的子集.
简单的说:子类覆盖父类,只能抛出父类的异常或者子类或子集.
注意:如果父类的方法没有抛出异常,那么子类覆盖时绝不能抛,只能try.
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- linux内核学习笔记------ip数据报的输入处理
- Python 基础编程 数据类型(一)
- 用不定进制的数字加法系统实现定时执行功能
- 黑马程序员05 API中的类
- U盘刻录linux启动盘
- 黑马程序员_异常
- JAVA中常用接口的介绍及使用示例:java.lang.Comparable
- 写给Git初学者的7个建议
- css+js简单实现126邮箱注册页面
- JS 数据类型转换
- Eclipse快捷键 注释、代码块加trycatch、system.out.println()、content assistant文本辅助等
- 不安装Oracle客户端使用PLSQL
- 实现角色与墙壁的来回碰撞
- Reporting Service textbox换行