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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王春晓 中级黑马   /  2013-5-21 09:19  /  1225 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在所有的视频里,老师都没有讲具体的异常处理方法,一般都是用比较简单方便的方式抛出了。有没有熟悉异常处理机制的大神介绍下主要的异常处理方法?比如catch块中除了new RuntimeException,还有什么其他处理的方式?

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

5 个回复

正序浏览
高手云集啊
回复 使用道具 举报
所有的异常都是从”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" ,要对编写的程序负责,异常处理 慢慢学,多上网查查,看看源代码,以后学习经常见的,用的多了就熟悉了。

回复 使用道具 举报
这个你得看帮助文档了,比如说java.io.FileReader这个类的构造方法
public FileReader(File file)
           throws FileNotFoundException
如果文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取就会抛出一个FileNotFoundException
如果使用这种可能抛出异常的方法,就得进行异常处理,可以用try,catch也可以继续往外抛。
等你用了eclipse这种IDE的时候,你调用这种方法的时候,它会提示你进行处理的。初学时用的比较低级的编辑器是不会提示这类问题的,这时就需要我们记忆一些东西,不过这不是什么坏事,初学时都要经历这一段。加油。
回复 使用道具 举报
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语言的
一大特色,也是个难点,掌握异常处理可以让写的代码更健壮和易于维护
回复 使用道具 举报
本帖最后由 刘勇强 于 2013-5-21 09:33 编辑

我也菜鸟  说说个人理解


异常的两种处理方式,或抛或try  catch(){}语句中的{}语句中代码就是对异常的处理啊

影响到程序运行的异常比如内存溢出,就不能用try处理了,需要直接中断程序运行,以便修改程序,

正常情况下一般的异常最终都需要用try语句处理

“在所有的视频里,老师都没有讲具体的异常处理方法,一般都是用比较简单方便的方式抛出了。”  不知道你这句话什么意思。我看到毕老师的视频,在异常章节有许多例子都是try处理的啊 。 你是不是指,老师一般只是在catch语句块中用输出语句简单输出异常信息啊?


到后面的章节,老师为了节省时间,而且可以确定不会出现异常,才直接用throws抛出 让程序代码符合语法规则 以便正常运行。



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马