黑马程序员技术交流社区
标题: 关于异常处理 [打印本页]
作者: 王春晓 时间: 2013-5-21 09:19
标题: 关于异常处理
在所有的视频里,老师都没有讲具体的异常处理方法,一般都是用比较简单方便的方式抛出了。有没有熟悉异常处理机制的大神介绍下主要的异常处理方法?比如catch块中除了new RuntimeException,还有什么其他处理的方式?
作者: 刘勇强 时间: 2013-5-21 09:30
本帖最后由 刘勇强 于 2013-5-21 09:33 编辑
我也菜鸟 说说个人理解
异常的两种处理方式,或抛或try catch(){}语句中的{}语句中代码就是对异常的处理啊
影响到程序运行的异常比如内存溢出,就不能用try处理了,需要直接中断程序运行,以便修改程序,
正常情况下一般的异常最终都需要用try语句处理
“在所有的视频里,老师都没有讲具体的异常处理方法,一般都是用比较简单方便的方式抛出了。” 不知道你这句话什么意思。我看到毕老师的视频,在异常章节有许多例子都是try处理的啊 。 你是不是指,老师一般只是在catch语句块中用输出语句简单输出异常信息啊?
到后面的章节,老师为了节省时间,而且可以确定不会出现异常,才直接用throws抛出 让程序代码符合语法规则 以便正常运行。
作者: Sword 时间: 2013-5-21 09:58
throws表示方法可能抛出的异常类型,位于参数体与方法体之间。
throw用来抛出具体的异常对象,
try表示检测可能发生异常的代码,需要被检测的代码放在try花括号中。
catch表示捕获异常发生时java虚拟机创建的异常对象。
catch圆括号()中是异常引用变量的声明,用来存放异常对象的堆内存地址。
catch花括号{}中是处理异常的代码。
finally表示发生异常与否,都会执行finally花括{}中的代码。
try快中能抛出异常,但只能使用throw抛出具体异常对象。
在try块中抛出异常对象,就得使用catch来捕获。
Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。基本过程是用try语句块包住
要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在
Java运行时自动抛出。你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。finally语句块会在方法执
行return之前执行,一般结构如下:
try{
程序代码
}catch(异常类型1 异常的变量名1){
程序代码
}catch(异常类型2 异常的变量名2){
程序代码
}finally{
程序代码
} catch语句可以有多个,用来匹配多个异常,匹配上多个中一个后,执行catch语句块时候仅仅执行匹配上的异常。catch的类型是Java语言中定
义的或者程序员自己定义的,表示代码抛出异常的类型,异常的变量名表示抛出异常的对象的引用,如果catch捕获并匹配上了该异常,那么就可以直接用
这个异常变量名,此时该异常变量名指向所匹配的异常,并且在catch代码块中可以直接引用。这一点非常非常的特殊和重要! Java异常处理的目
的是提高程序的健壮性,你可以在catch和finally代码块中给程序一个修正机会,使得程序不因异常而终止或者流程发生以外的改变。同时,通过获取
Java异常信息,也为程序的开发维护提供了方便,一般通过异常信息就很快就能找到出现异常的问题(代码)所在。 Java异常处理是Java语言的
一大特色,也是个难点,掌握异常处理可以让写的代码更健壮和易于维护
作者: SOAR 时间: 2013-5-21 10:06
这个你得看帮助文档了,比如说java.io.FileReader这个类的构造方法
public FileReader(File file)
throws FileNotFoundException
如果文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取就会抛出一个FileNotFoundException
如果使用这种可能抛出异常的方法,就得进行异常处理,可以用try,catch也可以继续往外抛。
等你用了eclipse这种IDE的时候,你调用这种方法的时候,它会提示你进行处理的。初学时用的比较低级的编辑器是不会提示这类问题的,这时就需要我们记忆一些东西,不过这不是什么坏事,初学时都要经历这一段。加油。
作者: ccywhut 时间: 2013-5-21 11:30
所有的异常都是从”Throwable"类继承,有一部分是“错误”,另一部分是常说的异常,分类很多,RuntimeException 是其中很常见的一种,很多异常都属于它。发生错误只能中断程序。
异常处理最简单的是声明异常类,在方法头部使用”throws Exception",比如 public static void main throws Exception(String[] args) {};还有一种使用“throw” 在方法体内将异常不断抛给异常处理器。
public static void main throws Exception(String[] args)
{执行代码
throw exception
执行代码}
2.好的编程习惯是不要只将异常抛给异常处理器 ,还需要捕获处理异常
简单处理比如打印异常信息try{程序代码 }catch(Exception e){ e.printStackTrace( ) }
完整的异常处理如下
try{
程序代码
}catch(Exception1(异常类型1) e1(异常的变量名1){
处理程序代码//比如上面简单地打印异常信息 e1.printStackTrace( ) ;
//
}catch(Exception2 e2){
处理程序代码
.......
}finally{
程序代码3//无论发生异常,都会执行的
}
多个异常可用多个catch语句捕获,匹配上多个中一个后,执行catch语句块时候仅仅执行匹配上的异常。catch中的exception是
Java语言中定义的或者可以自己定义的。finally代码块是无论发生异常,都会执行的,比如将jdbc中数据源关闭程序放在其中,保证数据源关闭。
至于你的new RuntimeException ,是运行时异常,编译时候无法发现只有在运行时才会出现的异常。如果你的代码本身存在BUG,不是try-catch能解决的,最好要修正代码。try-catch 只是不会直接在界面产生令人恐慌的错误,因为catch后已经给出产生错误后要输出的结果,但是bug依旧存在。常见的RuntimeException比如 有ArithmeticException、IndexOuterOfBoundsException,出现后要检查修正 代码。
偷懒简单处理如下
try{
程序代码
}catch(RuntimeException E{
throw E//1-只是简单地抛出异常,你可以自己编写处理代码
或者// 2- E.printStackTrace( ) ( 常见的) ;
或者3-(以及其它处理方法)。
}关键要修正bug。
总之异常处理的目的是提高程序的健壮性 Java异常处理是Java语言的一大特色,也是个难点,掌握异常处理可以让写的代码更健壮和易于维护。自己要学会 异常处理 ,不要只是“throws Exception" ,要对编写的程序负责,异常处理 慢慢学,多上网查查,看看源代码,以后学习经常见的,用的多了就熟悉了。
作者: 神之梦 时间: 2013-5-21 14:33
高手云集啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |