解决方案 »
- freemarker标签怎么显示的?
- java.lang.NoClassDefFoundError:java/sql/SQLClientInfoException
- 如何通过httpclient读取flash中的数据
- AssertEquals
- 请问Lucene 查询结果中,如何显示出摘要的标点符号?
- jsp/jsf页面显示的问题:根据session显示或不显示某些内容,不想内嵌片段<%%>代码
- 在spring+hiberante架构中的问题
- 请教各位,关于应用服务器的选用问题
- 怎样把Message Resources 中的配置信息(.properties文件中的信息)放到数据库中,然后系统初始化时,读取数据中的信息
- 新手学Sturts2传值,遇到小问题,请各位帮忙解决~
- JPQL
- MINA最大连接数问题
throws是别人处理异常(抛出)如果是新手,建议先做一些磁盘IO、网络通信、类型转换方面的应用,以了解异常的基本使用技巧。对于异常使用,我认为《Java编程思想》第4版12.13一节中9句话总结得很好。
try catch 是积极处理,也就是你如果catch到异常,你直接处理。
throw 消极处理,往上层抛,自己不处理。
2、细化异常的类型,不要不管什么类型的异常都写成Excetpion。
3、catch块尽量保持一个块捕获一类异常,不要忽略捕获的异常,捕获到后要么处理,要么转移,要么重新抛出新类型的异常。
4、不要把自己能处理的异常抛给别人。
5、不要用try...catch参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。
网上搜到的,LZ看看吧,从整体方面来说我个人感觉这五条说的很不错。
注,请注意我问的问题是:“异常处理的策略,如何选择”
客观评价,也不行啊,而且我又没攻击你,看你的心态。
难道你就是传说中的GCD员,只听好听的?
《J2EE项目中的异常处理策略》
http://d.wanfangdata.com.cn/Periodical_xdjsj-xby200805024.aspx
Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。
两个子类的实例,Error 和 Exception,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。 2、Exception
Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件,表示程序本身可以处理的异常。 3、Error
Error 是 Throwable 的子类,表示仅靠程序本身无法恢复的严重错误,用于指示合理的应用程序不应该试图捕获的严重问题。
在执行该方法期间,无需在方法中通过throws声明可能抛出但没有捕获的 Error 的任何子类,因为Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。 4、RuntimeException
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过,这种异常可以通过改进代码实现来避免。 5、ThreadDeath
调用 Thread 类中带有零参数的 stop 方法时,受害线程将抛出一个 ThreadDeath 实例。
仅当应用程序在被异步终止后必须清除时才应该捕获这个类的实例。如果 ThreadDeath 被一个方法捕获,那么将它重新抛出非常重要,因为这样才能让该线程真正终止。
如果没有捕获 ThreadDeath,则顶级错误处理程序不会输出消息。
虽然 ThreadDeath 类是“正常出现”的,但它只能是 Error 的子类而不是 Exception 的子类,因为许多应用程序捕获所有出现的 Exception,然后又将其放弃。 以上是对有关异常API的一个简单介绍,用法都很简单,关键在于理解异常处理的原理,具体用法参看Java API文档。
下面是网友摘得一部分
http://www.360doc.com/content/06/0808/09/10273_176221.shtml
不是一句话说得清的啊; 例如: 如果一个程序启动时需要进行配置文件读取, 而读取配置文件的代码无法找到需要读取的文件,即
抛 FileNotFoundException ,这个时候你认为"该 Catch 还是该 Throw"???
这个时候(我认为)应该 Catch 然后就让程序终止;例如: 你写了一个工具类, 如果工具类中的方法抛出异常,你"该 Catch 还是该 Throw", 这个时候你应该
想到工具类仅仅是一个工具, 只做事, 做事情出错了不应该他管(我认为), 此时你就应该将这个异常抛出去,
抛给使用这个工具的类, 让他去决定如何处理;"该 Catch 还是该 Throw" 不是简单两句话就能说清楚的, 不然也不会有那有 第13楼的朋友介绍的那一类
书了;