黑马程序员技术交流社区
标题:
异常处理方式的选择?
[打印本页]
作者:
王涛
时间:
2012-1-9 20:10
标题:
异常处理方式的选择?
本帖最后由 王涛 于 2012-2-24 10:52 编辑
java中处理异常主要有两种方式,try-catch-finally和throws,那么什么时候使用try-catch-finally?什么时候使用throws啊?
作者:
朱泽宇
时间:
2012-1-9 20:17
本帖最后由 朱泽宇 于 2012-1-9 20:19 编辑
为了不破坏代码逻辑
比如
dao层 只是和数据库交互的,有异常的话(包括自己定义的异常)你要抛出,不要在dao层进行过多的逻辑操作,你可以在service层捕获 然后抛出异常,在view层对异常进行处理
在自己层能解决的问题在不破坏逻辑情况下用try catch
还有自己曾解决不了的抛到上一层、由上一层来解决、如果上一层也解决不了就继续往上抛
作者:
lvwenwen88
时间:
2012-1-9 21:31
异常处理关键字
Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally。JB的在线帮助中对这几个关键字是这样解释的:
Throws: Lists the exceptions a method could throw.
Throw: Transfers control of the method to the exception handler.
Try: Opening exception-handling statement.
Catch: Captures the exception.
Finally: Runs its code before terminating the program.
2.3.1 try语句
try语句用大括号{}指定了一段代码,该段代码可能会抛弃一个或多个例外。
2.3.2 catch语句
catch语句的参数类似于方法的声明,包括一个例外类型和一个例外对象。例外类型必须为Throwable类的子类,它指明了catch语句所处理的例外类型,例外对象则由运行时系统在try所指定的代码块中生成并被捕获,大括号中包含对象的处理,其中可以调用对象的方法。
catch语句可以有多个,分别处理不同类的例外。Java运行时系统从上到下分别对每个catch语句处理的例外类型进行检测,直到找到类型相匹配的catch语句为止。这里,类型匹配指catch所处理的例外类型与生成的例外对象的类型完全一致或者是它的父类,因此,catch语句的排列顺序应该是从特殊到一般。
也可以用一个catch语句处理多个例外类型,这时它的例外类型参数应该是这多个例外类型的父类,程序设计中要根据具体的情况来选择catch语句的例外处理类型。
2.3.3 finally语句
try所限定的代码中,当抛弃一个例外时,其后的代码不会被执行。通过finally语句可以指定一块代码。无论try所指定的程序块中抛弃或不抛弃例外,也无论catch语句的例外类型是否与所抛弃的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等。
2.3.4 throws语句
throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是Error或 RuntimeException, 或它们的子类,这个规则不起作用, 因为这在程序的正常部分中是不期待出现的。 如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。
2.3.5 throw语句
throw总是出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。
作者:
李林轩
时间:
2012-1-10 05:22
本帖最后由 李林轩 于 2012-1-10 05:22 编辑
异常的处理原则:
1处理方式有两种:try或者throws
2调用到抛出异常的功能时,跑出几个,就处理几个
一个try对应多个catch
3.多个catch,父类的catch放到最下面
4.catch内,需要定义针对性的处理方式,不要简单的定义ptintStackTrace,输出语句
也不要不写
当捕获到的异常,本功能处理不了时,可以据需再catch中抛出
如果该异常处理不了并不属于该功能出现的异常
可以将异常转换后,在抛出和该功能相关的异常
或者异常可以处理每当需要将异常产生的和本功能相关的问题提供出去
让调用者知道,并处理,也可以将捕获的异常处理后,转换新的异常
try{
throw new AException();
}
catch(
//对AException处理
throw new BException
){}
异常的注意事项:
在子父类覆盖时,
1.子类抛出的异常必须是父类的异常的子类或者子集
2,如果父类或者接口没有异常抛出时,子类覆盖出现异常只能try不能抛
作者:
李娟
时间:
2012-1-11 23:41
能解决的try-catch,不能解决的抛出throws
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2