- 浏览: 379934 次
文章分类
最新评论
-
fishermen:
使用 <%@ page session="fa ...
Tomcat 的session管理 -
xinyiwust:
楼主你好!你总结的第一点:对于stateless的data s ...
Tomcat 的session管理 -
hujintao:
好像换成JDK目录后还是不行,比如HashMap这些类都不可以 ...
eclipse 调试 跟进 jdk -
顾小五:
是不是一般重写的方法,都有子类继承父类,就是 A extend ...
JAVA方法重载和方法重写 -
jhq986:
好用一定好评
lomboz插件下载
理解error和exception之间的区别,学习如何对其进行处理
很多程序员不清楚error和exception之间的区别,这区别对于如何正确的处理问题而言非常重要(见附1,“简要的叙述error和exception”)。就像Mary Campione的“The Java Tutorial”中所写的:“exception就是在程序执行中所发生的中断了正常指令流的事件(An exception is an event that occurs during the execution of a program that disrupts the normal flow of instructions.)。”依照美国传统辞典(American Heritage Dictionary)所解释的,error就是:“效果或情况背离了可接受的一般法则(The act or an instance of deviating from an accepted code of behavior.)”
背离(deviation)、中断(disruption),有什么区别呢?让我们来这样想:如果你驱车在公路上行驶时有人拦住了你,这就叫做“中断”。如果车根本就无法发动,那就叫做“背离”。
这与Java有什么关系呢?很多。Java中有一个相当有趣的error和exception的结构。
是的,非常正确:所有使用try{} catch(Exception e){}的代码块只能找到你一半的错误。但是,是否try并catch Throwable取决于你捕捉它的原因。快速的看一下Error的子类,它们的名字类似VirtualMachineError,ThreadDeath,LinkageError。当你想捕获这些家伙们的时候,你要确定你需要捕获它们。因为那些都是很严重的错误。
但是ClassCastException是一个error吗?不完全是。ClassCastException或任何类型的exception只是虚拟机(VM,VirtualMachine)让你知道有问题发生的方式,这说明,开发者产生了一个错误,现在有一个机会去修正它。
另一方面,error是虚拟机的问题(通常是这样,但也可能是操作系统的问题)。引用Java文档中关于error的说明:“Error是Throwable的子类,它的出现说明出现了严重的问题。一般应用程序除非有理由,否则不应该捕捉Error。通常这是非常反常的情况。”
所以,error非常强大,而且但处理它远比一般开发者想象的要难(当然不是你)。如果你在做一项很简单的工作的话,你认为有必要去处理error?
首先,记住,error跟exception抛出的方式大体相同的,只有一点不同。就是一个抛出error的方法不需要对此进行声明(换句话说,这是一个unchecked exception(也被称做Runtime Exception))。
注意,有一些exception是不可控制的(unchecked exception),跟error的表现是一样的,如:NullPointerException,ClassCastException和IndexOutOfBoundsException,它们都是RuntimeException的子类。RuntimeException和其子类都是unchecked excception。
那应该如何处理这些令人讨厌的unchecked exception呢?你可以在可能出现问题的地方catch它们,但这只是一个不完整的解决方法。这样虽然解决了一个问题,但其余的代码仍可能被其他unchecked exception所中断。这里有一个更好的办法,感谢ThreadGroup类提供了这个很棒的方法:
这个技巧太棒了。想想这种情况,你对你的GUI程序进行了修改,然后一个unchecked exception被抛出了。并且你的GUI程序常常具有了错误的状态(对话框仍旧开着,按钮失效了,光标状态出现错误)。但是,使用这个技巧,你可以将你的GUI程序恢复原始状态并通知用户出现了错误。对自己感觉很棒吧,因为你写了一个高质量的应用程序。
这个技巧并不只适用于GUI程序。服务器端应用程序可以使用这个技巧来释放资源,防止虚拟机进入不稳定状态。较早的捕获错误并聪明的将其处理是好的程序员和普通程序员的区别之一。你已经明白了这些,我知道你想成为哪一类程序员。
[color=cyan]关于作者
Josh Street是Bank of America的构架设计师。他主要负责电子商务平台的开发。他的联系方式是rjstreet@computer.org。[/color]
附1
简要的叙述error和exception
Error和Exception都继承自Throwable,他们下列不同处:
Exceptions
1.可以是 可被控制(checked) 或 不可控制的(unchecked)
2.表示一个由程序员导致的错误
3.应该在应用程序级被处理
Errors
1.总是 不可控制的(unchecked)
2.经常用来用于表示系统错误或低层资源的错误
3.如何可能的话,应该在系统级被捕捉
很多程序员不清楚error和exception之间的区别,这区别对于如何正确的处理问题而言非常重要(见附1,“简要的叙述error和exception”)。就像Mary Campione的“The Java Tutorial”中所写的:“exception就是在程序执行中所发生的中断了正常指令流的事件(An exception is an event that occurs during the execution of a program that disrupts the normal flow of instructions.)。”依照美国传统辞典(American Heritage Dictionary)所解释的,error就是:“效果或情况背离了可接受的一般法则(The act or an instance of deviating from an accepted code of behavior.)”
背离(deviation)、中断(disruption),有什么区别呢?让我们来这样想:如果你驱车在公路上行驶时有人拦住了你,这就叫做“中断”。如果车根本就无法发动,那就叫做“背离”。
这与Java有什么关系呢?很多。Java中有一个相当有趣的error和exception的结构。
是的,非常正确:所有使用try{} catch(Exception e){}的代码块只能找到你一半的错误。但是,是否try并catch Throwable取决于你捕捉它的原因。快速的看一下Error的子类,它们的名字类似VirtualMachineError,ThreadDeath,LinkageError。当你想捕获这些家伙们的时候,你要确定你需要捕获它们。因为那些都是很严重的错误。
但是ClassCastException是一个error吗?不完全是。ClassCastException或任何类型的exception只是虚拟机(VM,VirtualMachine)让你知道有问题发生的方式,这说明,开发者产生了一个错误,现在有一个机会去修正它。
另一方面,error是虚拟机的问题(通常是这样,但也可能是操作系统的问题)。引用Java文档中关于error的说明:“Error是Throwable的子类,它的出现说明出现了严重的问题。一般应用程序除非有理由,否则不应该捕捉Error。通常这是非常反常的情况。”
所以,error非常强大,而且但处理它远比一般开发者想象的要难(当然不是你)。如果你在做一项很简单的工作的话,你认为有必要去处理error?
首先,记住,error跟exception抛出的方式大体相同的,只有一点不同。就是一个抛出error的方法不需要对此进行声明(换句话说,这是一个unchecked exception(也被称做Runtime Exception))。
public void myFirstMethod() throws Exception //Since it's an exception, I have to declare //it in the throws clause { throw new Exception(); } public void mySecondMethod() //Because errors aren't supposed to occur, you //don't have to declare them. { throw new Error(); }
注意,有一些exception是不可控制的(unchecked exception),跟error的表现是一样的,如:NullPointerException,ClassCastException和IndexOutOfBoundsException,它们都是RuntimeException的子类。RuntimeException和其子类都是unchecked excception。
那应该如何处理这些令人讨厌的unchecked exception呢?你可以在可能出现问题的地方catch它们,但这只是一个不完整的解决方法。这样虽然解决了一个问题,但其余的代码仍可能被其他unchecked exception所中断。这里有一个更好的办法,感谢ThreadGroup类提供了这个很棒的方法:
public class ApplicationLoader extends ThreadGroup { private ApplicationLoader() { super("ApplicationLoader"); } public static void main(String[] args) { Runnable appStarter = new Runnable() { public void run() { //invoke your application (i.e. MySystem.main(args) } } new Thread(new ApplicationLoader(), appStarter).start(); } //We overload this method from our parent //ThreadGroup , which will make sure that it //gets called when it needs to be. This is //where the magic occurs. public void uncaughtException(Thread thread, Throwable exception) { //Handle the error/exception. //Typical operations might be displaying a //useful dialog, writing to an event log, etc. }
这个技巧太棒了。想想这种情况,你对你的GUI程序进行了修改,然后一个unchecked exception被抛出了。并且你的GUI程序常常具有了错误的状态(对话框仍旧开着,按钮失效了,光标状态出现错误)。但是,使用这个技巧,你可以将你的GUI程序恢复原始状态并通知用户出现了错误。对自己感觉很棒吧,因为你写了一个高质量的应用程序。
这个技巧并不只适用于GUI程序。服务器端应用程序可以使用这个技巧来释放资源,防止虚拟机进入不稳定状态。较早的捕获错误并聪明的将其处理是好的程序员和普通程序员的区别之一。你已经明白了这些,我知道你想成为哪一类程序员。
[color=cyan]关于作者
Josh Street是Bank of America的构架设计师。他主要负责电子商务平台的开发。他的联系方式是rjstreet@computer.org。[/color]
附1
简要的叙述error和exception
Error和Exception都继承自Throwable,他们下列不同处:
Exceptions
1.可以是 可被控制(checked) 或 不可控制的(unchecked)
2.表示一个由程序员导致的错误
3.应该在应用程序级被处理
Errors
1.总是 不可控制的(unchecked)
2.经常用来用于表示系统错误或低层资源的错误
3.如何可能的话,应该在系统级被捕捉
发表评论
-
扩展列表
2013-05-30 16:15 9561 resources的获取方法 String re ... -
xml 构造及解析时的非法字符问题
2010-07-07 14:45 3522系统交互会用到xml,如果直接构造xml的字串,很 ... -
eclipse 调试 跟进 jdk
2009-08-12 09:49 3862突然发现用eclipse调试时不能跟进jdk的类 ... -
switch和if的性能比较
2009-07-21 18:58 19986一直认为switch的效率高于if,特别对于条件大 ... -
JavaScript to Java Communication
2009-05-18 18:51 1352对于应用程序,可以监听端口,构造协议,以实现特殊功能。 ... -
有关jsp/servlet的重定向技术综述[转载]
2007-07-02 15:00 2058有关jsp/servlet的重定向技术综述(2007-5-21 ... -
经典错误汇总!
2007-03-20 19:29 1865收集自己平日的错误,写出解决办法与要注意的地方,方便以后自己与 ... -
dom4jz之基础:XSL,XSLT,XPATH,XHTML,XML命名空间(网上搜集整理)
2007-03-10 10:59 2694整理到一块,方便自己与大家查阅 XHTML 介绍 XHTML ... -
面试点滴
2006-12-05 09:53 1582招工完毕,总结下,其他兄弟们继续努力^_^ 方正 第一次给了方 ... -
WAP技术
2006-11-28 18:33 2158WAP技术 手机上网是一个非常美好的梦想。为实 ... -
wap---介绍
2006-11-28 10:27 2412WAP WAP是Wirele ... -
eclipse3.1.2+lomboz开发j2ee程序与web应用---注意篇(2)
2006-11-27 20:16 2500还有些要注意的细节,特别说明下: ... -
eclipse+lomboz开发j2ee程序与web应用---配置(1)
2006-11-27 19:49 5834感谢每一位看到这篇文章的朋友,文章内容来自网络,请大家常来多 ... -
java面试笔试题大汇总
2006-11-24 15:54 8036java面试笔试题大汇总 JAVA相关基础知识 1、面向对象的 ... -
mustang,dolpin ---jdk
2006-11-13 22:50 1536news: Mustang、Dolpin更名JDK6、JDK ... -
JNDI介绍
2006-11-12 22:26 2826基于JNDI的应用开发 JNDI(The Java Nam ... -
Hibernate缓存
2006-10-31 22:39 1604缓存是介于应用程序和 ... -
Spring问答学习
2006-10-31 22:15 17901、如何学习Spring? 你可以通过下列途径学习sp ... -
Java/JSP中文乱码问题解决心得
2006-10-31 21:16 15018Java/JSP中文乱码问题解 ... -
JNI浅析
2006-10-26 21:19 1694JNI:是java本地接口,是jdk的一部分,通过jni ...
相关推荐
理解它们之间的区别对于编写健壮和可靠的代码至关重要。 首先,我们来看"error"。在Java中,`Error`是`java.lang.Error`类的实例,通常表示系统级或编译时的严重问题。这些问题通常是程序员无法控制或恢复的,比如...
理解 `Error` 和 `Exception` 之间的区别对于编写高质量的Java程序至关重要。正确的识别和处理异常不仅可以提高程序的健壮性,还可以提升程序的用户体验。在开发过程中,应当尽量避免抛出 `Error` 类型的异常,并...
总的来说,理解Error和Exception的区别对于编写健壮的Java代码至关重要。正确地处理和区分这两类异常可以帮助我们及时识别和修复问题,提高程序的稳定性和可靠性。在编程实践中,应尽可能避免抛出Error,因为它们...
【Exception和Error的区别】 在Java编程中,Exception和Error都是基于`Throwable`类的子类,它们构成了Java异常处理机制的基础。理解两者的差异对于编写健壮的代码至关重要。 1. **Exception**: Exception是程序...
在深入探讨Windows异常处理机制之前,我们先简要回顾一下异常处理的基本概念。异常处理是计算机编程中的一...对于软件开发者而言,深入理解这些机制不仅有助于编写更加健壯的应用程序,还能提升故障排查和调试的效率。
### 如何解决WebLogic Multicast Exception 在处理WebLogic服务器时,可能会遇到与Multicast相关的异常,这通常会影响到集群的正常工作。以下内容将详细解释如何解决“WebLogic Multicast Exception”这一问题,并...
异常层次结构:所有的异常都继承自`java.lang.Throwable`类,`Exception`和`Error`是其两个主要子类。`Exception`用于应用程序可以预见的异常,而`Error`通常表示严重的问题,如JVM内部错误,应用程序通常无法恢复。...
通过对这些文档《java web 开发问题总结》的深入学习,我们可以更好地理解和解决实际开发中遇到的Java异常问题,提升代码质量,确保应用程序的稳定运行。无论是对于初学者还是经验丰富的开发者,掌握好Java异常处理...
总结来说,理解和处理C#与C++之间的异常转换是跨语言开发的关键技能。通过适当的设计和实现,我们可以确保C++的异常能够被C#有效地捕获和处理,从而增强程序的健壮性和稳定性。在实际项目中,确保正确处理各种异常...
- Java的异常体系包括`java.lang.Throwable`作为所有异常的基类,它有两个主要子类:`Error`和`Exception`。`Error`通常表示系统级别的错误,而`Exception`用于应用程序可以预见并处理的异常。 6. **异常的分类**...
在BEGIN和END之间,你可以编写可能会抛出异常的SQL或PL/SQL代码。在EXCEPTION部分,你可以捕获并处理特定类型的异常。例如: ```sql BEGIN SELECT column INTO variable FROM table WHERE condition; EXCEPTION ...
Java面试题涵盖了许多核心概念,包括异常处理、接口与虚类的区别、垃圾回收机制、线程同步、Error与Exception的差异、final关键字的使用、堆与栈的区别、超大整数的存储与运算,以及图形系统的基本元素设计。...
默认情况下,运行时的检查异常(checked exception)不会导致事务回滚,而未检查异常(unchecked exception)和Error会。可以通过设置@Transactional注解的rollbackFor属性自定义回滚规则。 综上所述,Spring的事务...
总的来说,理解并有效地利用WCF Data Contract和FaultException可以帮助开发者创建健壮、容错的服务,同时提供清晰的错误信息,以便客户端进行调试和处理。通过学习和实践,我们可以利用这些技术构建高效、安全的...
在异常处理上,需要了解Java异常的分类,包括Error和Exception,以及CheckedException和UncheckedException的区别和处理方式。字符串的处理也是常见的考题,例如分析特定代码段中创建了多少个对象。另外,对流...
在Linux系统中,尤其是CentOS 7这样的发行版,运行.sh脚本时遇到"**syntax error: unexpected end of file**"或"**...如果你经常需要在Windows和Linux之间编辑脚本,了解并熟练掌握文件格式转换的技巧是非常重要的。
异常分为两类:Error和Exception。Error表示系统级的严重问题,如内存溢出或线程死锁,这些问题通常意味着程序无法恢复,程序可能会终止运行。而Exception则分为系统异常(编译器强制处理的checked异常)和普通异常...
异常处理是Java编程中不可忽视的部分,文档中列举了运行时异常和一般异常的区别、error和exception的区别,以及在Java中进行异常处理的关键字:try, catch, finally, throws和throw的含义和使用。特别地,Java线程的...
- Java 异常体系以 Throwable 类为根,分为 Error 和 Exception。Exception 是可以捕获并处理的异常,分为运行时异常(RuntimeException,如空指针异常)和其他异常。运行时异常不需要显式声明,而其他异常需要。...
理解`String`与`StringBuffer`、运行时异常与一般异常、`Collection`与`Collections`、`&`与`&&`、`HashMap`与`Hashtable`、`ArrayList`与`Vector`、`Sleep()`与`Wait()`、`Overload`与`Override`、`Error`与`...