黑马程序员技术交流社区

标题: 异常处理有哪几种方式? [打印本页]

作者: 张先庆    时间: 2013-7-17 21:48
标题: 异常处理有哪几种方式?
本帖最后由 杨兴庭 于 2013-7-18 12:03 编辑

异常处理有哪几种方式?
作者: 极限冰风    时间: 2013-7-17 21:55
有两种方式:
一种是自己处理:就是使用try{会发生异常的代码块}catch(Exception e){处理异常的方式}
二是把异常throw出去;谁使用谁处理;但要在函数的小括号后面声明  throws抛出的的异常;
作者: 诸隆隆    时间: 2013-7-17 22:07
两种。一种相当于自己处理,就是try catch...try中包含异常,发现异常后交给catch中语句处理。另一种交给别人处理,传说中的甩手掌柜,往上递交,用throws
作者: 云游天下    时间: 2013-7-17 22:21
有两中方式:1.捕获异常,自己处理.           2.throw出去,让别人处理.举个例子:public class A{  try{   可能放生异常的语句...  }catch(Exception e){     e.getMessage();//自己处理  }}public class A throws Exception{     可能放生异常的语句...}//throw出去,让别人处理注意这里用的是throws如果在方法里面则用throw举例:public class A{  try{   可能放生异常的语句...  }catch(Exception e){     e.getMessage();//自己处理     throw new Exception ("");  }}
作者: tonygone    时间: 2013-7-18 09:52
本帖最后由 tonygone 于 2013-7-18 09:58 编辑

异常处理方式有两种:1、捕捉;2、抛出。
  对于捕捉:java有针对性的语句块进行处理。
try {
        需要被检测的代码;
}
catch(异常类 变量名){
        异常处理代码;
}
fianlly{
        一定会执行的代码;
}
--------------------------------------------------------
catch (Exception e) { //e用于接收try检测到的异常对象。
        System.out.println("message:"+e.getMessage());//获取的是异常的信息。
        System.out.println("toString:"+e.toString());//获取的是异常的名字+异常的信息。
        e.printStackTrace();//打印异常在堆栈中信息;异常名称+异常信息+异常的位置。
}
---------------------------------------------------------
异常处理原则:功能抛出几个异常,功能调用如果进行try处理,需要与之对应的catch处理代码块,这样的处理有针对性,抛几个就处理几个。

特殊情况:try对应多个catch时,如果有父类的catch语句块,一定要放在下面。

throw 和throws关键字的区别:
throw用于抛出异常对象,后面跟的是异常对象;throw用在函数内。
throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。

通常情况:函数内容如果有throw,抛出异常对象,并没有进行处理,那么函数上一定要声明,否则编译失败。但是也有特殊情况。

异常分两种:
 1:编译时被检查的异常,只要是Exception及其子类都是编译时被检测的异常。
 2:运行时异常,其中Exception有一个特殊的子类RuntimeException,以及RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常。

编译时被检查的异常和运行时异常的区别:
 编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。
 声明的原因:是需要调用者对该异常进行处理。
 运行时异常如果在函数内被抛出,在函数上不需要声明。
 不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。

定义异常处理时,什么时候定义try,什么时候定义throws呢?
  功能内部如果出现异常,如果内部可以处理,就用try;
  如果功能内部处理不了,就必须声明出来,让调用者处理。

自定义异常:当开发时,项目中出现了java中没有定义过的问题时,这时就需要我们按照java异常建立思想,将项目的中的特有问题也进行对象的封装。这个异常,称为自定义异常。

  对于除法运算,0作为除数是不可以的。java中对这种问题用ArithmeticException类进行描述。对于这个功能,在我们项目中,除数除了不可以为0外,还不可以为负数。可是负数的部分java并没有针对描述。所以我们就需要自定义这个异常。

自定义异常的步骤:
 1:定义一个子类继承Exception或RuntimeException,让该类具备可抛性。
 2:通过throw 或者throws进行操作。

异常的转换思想:当出现的异常是调用者处理不了的,就需要将此异常转换为一个调用者可以处理的异常抛出。

try  catch  finally的几种结合方式:
1,
try
catch
finally

这种情况,如果出现异常,并不处理,但是资源一定关闭,所以try  finally集合只为关闭资源。
记住:finally很有用,主要用户关闭资源。无论是否发生异常,资源都必须进行关闭。
System.exit(0); //退出jvm,只有这种情况finally不执行。




作者: 王峰230321    时间: 2013-7-18 10:56
两种,  一种抛  一种try  。    抛的话就是把问题忽视掉,  然后 谁调用 谁解决,  如果调用了还不想解决的话可以继续抛 。throw+异常名称 放在定义类时的后面。  Exception是所有异常的老大, 也可以直接抛这个 但是不建议
try就是 自己解决。   用try  catch语句 。。    把有可能会出现异常的部分放在 try里、   如果没有出现异常 就跳出try  catch语句,  如果出现异常就运行catch里德语句。       纯手写- -




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2