A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不存在的奇迹 中级黑马   /  2015-4-19 12:16  /  315 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

异常
        (1)概述:程序出现的不正常的情况。
        (2)异常的体系
[size=10.5000pt]
程序的异常
Throwable
严重问题Error
我们不处理,比如说内存溢出之类的
[size=10.5000pt]
问题Exception
RuntimeException
运行期异常,我们需要修正代码
RuntimeException
[size=10.5000pt]编译期异常,必须处理的,否则程序编译不通过
(3)异常的处理:
                A:JVM的默认处理
如果程序出现了问题,我们没有做任何处理,这时候JVM就会默认处理                把异常的名称,原因,位置等信息输出在控制台,但是程序不能会继续执行  
                B:自己处理的两种方式
try...catch...finally
一旦try里面出现问题,就会将问题抛出去,然后和catch里面的异常类名去匹配,一旦有匹配的,就会执行catch里面的处理,然后结束try...catch继续执行后面的程序
catch里面的异常类名,能明确的尽量明确,不要用大的来处理,平级关系的异常谁先谁后无所谓,如果出现了子父关系,父必须在后面,否则全部匹配到父去了
try里面的代码越少越好,catch里面必须有内容,哪怕是给出一个简单的提示
JDK7出现的一个新的异常处理方案
try{
   ...
}catch(异常名1 | 异常名2 | ...){
   ...
[size=10.5000pt]}
throws
throws 异常类名
这个格式必须跟在方法的括号后面
尽量不要在main方法上抛出异常
把自己处理不了的,在方法上声明,告诉调用者,这里有问题
(4)我们到底该如何处理异常呢?
                如果该功能内部可以将问题处理,用try,如果处理不了交由调用者处理,用throws
后续程序需要继续执行,用try
后续程序不需要执行,用throws       
(5)异常Throwable中的几个方法
getMessage()
获取异常信息,返回字符串。
toString()
获取异常类名和异常信息,返回字符串。
printStackTrace()  --  基本用这个
获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void
printStackTrace(PrintStream s)
通常用该方法将异常内容保存在日志文件中,以便查阅。
        (6)面试题
                A:编译期异常和运行期异常的区别?
                        编译期异常:Java程序必须显示处理,否则程序发生错误,编译不通过
                        运行期异常:可以不处理,也可以处理
                B:throwthrows是的区别
                        throw:
                                在方法体中,后面跟的是异常对象名,并且只能是一个
                                throw抛出的是一个异常对象,说明这里肯定有一个异常产生了
                        throws:
                                在方法声明上,后面跟的是异常的类名,可以是多个
                                throws抛出的是该方法有异常的可能性,这个异常并不一定会产生
                C:final,finally,finalize的区别?
final:最终的意思,可以修饰类,成员方法,成员变量
修饰类,类不能被继承
修饰变量,变量是常量
修饰方法,方法不能被重写
finally:异常处理的一部分,用于释放资源
一般来说,它的代码永远会执行,除非jvm先退出了
finalize:是Object类的一个方法,用于垃圾回收
                D:如果在catch里面有return,请问finally还执行吗?如果执行,return前还是后
                                会,前。
                                实际上在中间。这个上课我们讲过
file:///C:\Users\MAOJUN~1\AppData\Local\Temp\ksohtml\wpsEE0C.tmp.jpg
        (7)finally关键字及其面试题
                finally用于释放资源,它的代码永远会执行。
特殊情况:在执行到finally之前,jvm退出了(System.exit(0));
                异常处理的变形:
                        try...catch...finally
                        try...catch...
                        try...catch...catch...
                        try...catch...catch...fianlly
                        try...finally //是为了释放资源,没有处理异常
        (8)自定义异常
                继承自Exception或者RuntimeException
只需要提供无参构造和一个带参构造即可
        (9)异常的注意事项
                A:子类在重写父类的方式时,子类的方法必须抛出相同的异类或父类异常的子类
B:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
C:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马