- 浏览: 327360 次
文章分类
- 全部博客 (116)
- Oracle (29)
- MySQL (2)
- Java (20)
- .NET (2)
- Javascript (4)
- Spring (6)
- Struts (6)
- Hibernate (16)
- JSP (6)
- Tomcat (1)
- Quartz (2)
- RCS (1)
- Translate (12)
- PL/SQL (5)
- Sqlplus (1)
- System (6)
- Linux (11)
- Ubuntu (9)
- Windows (10)
- Mac (2)
- Tools (8)
- Mercurial (1)
- Google Code (1)
- Subversion (1)
- Debian (2)
- Freemarker (6)
- Web (2)
- PHP (1)
- Nginx (1)
最新评论
-
sunday1207:
private Class getParameterizedT ...
java 中 BaseDao 在Hibernate中的用法 -
SkimSkim:
你这里的解压是把文件夹11下面的所有文件都放在ins这个文件夹 ...
ubuntu 在终端使用 sqlplus 连接远程数据库 -
as619864232:
漫步邃思 写道其实常用的就那么几个命令,大部分都用不到的是啊, ...
windows cmd 命令 -
漫步邃思:
其实常用的就那么几个命令,大部分都用不到的
windows cmd 命令
很多程序员不清楚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.如何可能的话,应该在系统级被捕捉
转自:http://fishermen.iteye.com/blog/24031
发表评论
-
JDK 对应数字版本号
2013-08-01 17:22 1406J2SE 7 = 51 (0x33 hex),J2SE 6.0 ... -
使用 Java 遍历二叉树
2012-10-03 20:09 1344在计算机科学中,二叉树是每个节点最多有两个子树的树结构 ... -
Spring 中事务的传播性
2012-09-17 20:46 978在 Spring 中一共定义了 ... -
J2EE 全面简介
2012-07-19 13:04 934刘湛 (jeru@163.net), 武汉 ... -
OpenSessionInViewFilter 的一些了解
2012-07-16 20:55 1044Spring 中的 OpenSessionInViewFil ... -
设计模式
2012-07-16 17:42 1060《设计模式》一书原先把设计模式分为创建型模式、结构型模式、行为 ... -
ServletContext 以及 ServletConfig 和 ServletContextListener 的一些理解
2012-07-15 00:12 1532当 Servlet 容器启动的时候,会读取 web.xml 中 ... -
Quartz 中的一些细节
2012-07-12 19:10 880JobDetail 中有一个 JobDataMap,而 Tri ... -
Hibernate 注册方言以及时间精度
2012-07-12 19:09 1285Oracle 10G 的 JDBC 驱动在 JAVA 中 ... -
Quartz Cron 表达式支持到七个域及实例
2012-07-12 19:07 1700名称 是否必须 允许值 特殊字符 秒 ... -
在 Linux 下安装 JDK 和设置 JAVA 环境变量
2012-07-08 16:16 1814I know lot of you starting o ... -
java 中 BaseDao 在Hibernate中的用法
2012-07-02 17:41 3291import java.lang.reflect. ... -
Java Matcher 翻译
2012-05-11 19:09 1101java.util.regex Class Mat ... -
Java Pattern 翻译
2012-05-09 20:18 1160java.util.regex Class Pattern ... -
Java Method 翻译
2012-05-04 15:21 1113java.lang.reflect Class Met ... -
Java Class 的翻译
2012-05-04 14:49 1119java.lang Class Class<T&g ... -
Java Formatter 翻译
2012-04-13 17:43 1465An interpreter(解释) for printf-s ... -
Java 翻译 StringBuffer
2012-04-04 16:08 1130A thread-safe, mutable seque ... -
Java String 翻译
2012-04-01 11:52 1554The String class represents ...
相关推荐
3. **继承结构**:`Error`和`Exception`都继承自`Throwable`类,但它们之间并不直接互相继承。`Exception`是为应用程序异常设计的,而`Error`是为系统异常保留的。 4. **编程实践中**:程序员应尽量避免抛出`Error`...
Java中Error与Exception的区别 Java 中的 Error 和 Exception 是两个不同的...Error 和 Exception 是 Java 中两个不同的概念,它们之间存在着许多不同之处,了解它们的区别对于我们编写高质量的 Java 程序非常重要。
总的来说,理解Error和Exception的区别对于编写健壮的Java代码至关重要。正确地处理和区分这两类异常可以帮助我们及时识别和修复问题,提高程序的稳定性和可靠性。在编程实践中,应尽可能避免抛出Error,因为它们...
【Exception和Error的区别】 在Java编程中,Exception和Error都是基于`Throwable`类的子类,它们构成了Java异常处理机制的基础。理解两者的差异对于编写健壮的代码至关重要。 1. **Exception**: Exception是程序...
Error 和 Exception 都是 java.lang.Throwable 的子类。Error 表示由 JVM 所侦测到的无法预期的错误,这些错误是 JVM 层次的严重错误,导致 JVM 无法继续执行,因此,这是不可捕捉的,无法采取任何恢复的操作,一般...
这种处理方式允许在不同的代码块之间传递控制流,从而实现更精细的错误管理和资源清理。 #### 向量异常处理 向量异常处理提供了一种注册多个异常处理器的能力,允许开发者针对特定类型的异常指定多个处理函数。...
- 对于`JAVA_OPTIONS`中的其他参数,如`-Xms256m`、`-Xmx512m`和`-XX:MaxPermSize=256m`,这些是关于Java虚拟机内存的设置。虽然它们与Multicast问题关系不大,但确保这些参数正确无误也是必要的。 - `...
例如,在调用`Graphics.setColor(int red, int green, int blue)`方法时,如果传入的红色、绿色或蓝色值超出了有效范围(通常为0到255之间),则可能会引发此类异常。为了确保参数的有效性,开发者可以在接收参数时...
异常层次结构:所有的异常都继承自`java.lang.Throwable`类,`Exception`和`Error`是其两个主要子类。`Exception`用于应用程序可以预见的异常,而`Error`通常表示严重的问题,如JVM内部错误,应用程序通常无法恢复。...
本文将详细解析"Uncaught exception com_exception with message Failed to create COM object"这一错误的原因以及如何解决。 当尝试在PHP中创建一个COM对象,如`InternetExplorer.Application`,用于模拟用户交互...
Java异常处理是编程过程中至关重要的一个环节,它帮助开发者捕获和处理程序运行时可能出现的错误,确保程序的健壮性和稳定性。在这个“java 异常 问题收集 Exception”主题中,我们将深入探讨Java异常处理的基本概念...
在Spring Cloud生态系统中,Feign是一个重要的组件,它充当了微服务之间通信的客户端代理,实现了声明式的Web服务调用。Feign使开发者能够轻松地创建面向接口的客户端,简化了服务之间的远程调用。本篇文章将深入...
ArrayIndexOutOfBoundsException, NumberFormatException, IOException, ClassNotFoundException, FileNotFoundException, SQLException, IllegalArgumentException, ClassCastException 和 ArithmeticException。...
- 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关键字的使用、堆与栈的区别、超大整数的存储与运算,以及图形系统的基本元素设计。...
在Linux系统中,尤其是CentOS 7这样的发行版,运行.sh脚本时遇到"**syntax error: unexpected end of file**"或"**...如果你经常需要在Windows和Linux之间编辑脚本,了解并熟练掌握文件格式转换的技巧是非常重要的。
class CustomError(Exception): def __init__(self, message): super().__init__(message) self.error_type = 'Custom' ``` 2. **捕获和抛出错误**:在代码中,我们需要根据业务逻辑来决定何时捕获并抛出...