------解决方法--------------------------------------------------------
了解异常与错误的区别,并且知道当你截获一个异常时,应该怎么办。
  by Josh Street
  许多程序员并没有意识到一个错误和一个异常是有区别的,在出现问题时,这种区别对如何操作你的代码有很重要的含意(见工具条,“简介错误与异常”)。正如Mary Campione在The Java Tutorial(Java指南)中所写的,“一个异常是在一个程序执行过程中出现的一个事件,它中断了正常指令的运行。”根据American Heritage Dictionary的解释,一个错误是“偏离了可接受的代码行为的一个动作或一个实例。”
 
  那么偏离(deviation)和中断(disruption)有什么不同呢?我们可以这么来解释:如果你正在一条路上驾驶,有人截住了你,这就是中断。如果车发动不了了,那就是偏离(除非是我的车,我们认为这种情况是normal的)。
 
  这同Java有什么关系呢?有很大的关系。Java有个很有趣的错误和异常层次关系(见图1)。
 
  的确,运用try {} catch (Exception e) {}的所有代码只能找到一半你的错误。但是你是否应该截获Throwable取决于你一旦截获了它,你准备怎么处理它。对Error的子集的快速了解可以让你知道许多类的名字,如VirtualMachineError、ThreadDeath和LinkageError。在你打算截获这些错误时,确信你要处理它们,因为它们是严重的问题,所以是错误。
 
 
  图1. Java中错误和异常的层次关系
  但ClassCastException不是一个错误吗?的确不是。一个ClassCastException——或一种异常——只是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错误,现在有一个机会来修改它。
 
  另一方面,错误是VM的一个故障(虽然它可以是任何系统级的服务)。我们来引用JavaDoc对Error的定义:“Error是Throwable的一个子集,它指的是一个合理的应用程序不能截获的严重的问题。大多数都是反常的情况。”
 
  所以,错误是很难处理的,一般的开发人员(当然不是你)是不能理解处理这些错误的微妙之处的。那么在你的工作中,当你觉得会产生一个足以被称为错误的一个事件时,该怎么办呢?
 
 
 
 
  首先,记住错误是像异常一样被抛出的,只有一点不同。抛出一个错误的方法不需要声明它在做什么(换句话说,异常是unchecked):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();
  }
 
 
 
 
  注意有几个异常是unchecked的,因此,其行为就同错误一样:NullPointerException、ClassCastException和IndexOutOfBoundsException都是RuntimeException的子类,RuntimeException及其所有的子集通常都是unchecked的。
 
  那么你应该怎么处理这些讨厌的unchecked的异常呢?你可以在它们可能出现的方法中截获异常,但这种方法有很大的偶然性。这么做可以解决一个问题,但是它会使其它unchecked的异常中断代码的其它部分。我们应该感谢ThreadGroup类提供的一个很好的办法:public class ApplicationLoader extends ThreadGroup
  {
  private ApplicationLoader()
  {
  super("ApplicationLoader");
  }
  public static void main(String[] args)
  {
  Runnable appStarter = new Runnable()
  {
  public void run()
  {

error和exception的区别的更多相关文章

  1. error和exception的区别,RuntimeException和非RuntimeException的区别

    error和exception的区别,RuntimeException和非RuntimeException的区别   1. 异常机制       异常机制是指当程序出现错误后,程序如何处理.具体来说, ...

  2. Error与Exception的区别

    错误和异常的区别(Error vs Exception) 错误和异常的区别(Error vs Exception) 今天面试问了这样一个问题,"Error" 和 "Exc ...

  3. 多线程、同步实现方法及Error和Exception的区别与联系

    多线程.同步实现方法? 实现线程有两种方法: 继承Thread类 实现Runnable接口 实现同步也有两种方法 一种是用同步方法:同步方法就是在方法返回类型后面加上synchronized, 比如: ...

  4. Error与Exception的区别,Java常见异常Execption总结

    错误和异常的区别(Error vs Exception) 错误和异常的区别(Error vs Exception) 今天面试问了这样一个问题,"Error" 和 "Exc ...

  5. java中error和exception的区别

    转自:https://www.jianshu.com/p/e8bbee3c1c4a Error类和Exception类的父类都是throwable类,他们的区别是: Error类一般是指与虚拟机相关的 ...

  6. Error和Exception的区别?

    Error和Exception都继承自Throwable类 二者不同之处在于: Exception: 1.可以是可控制的(checked)或是不可控制的(unchecked) 2.表示一个有程序员编写 ...

  7. java面试题之Error和Exception的区别

    从概念角度分析: Error:程序无法处理的系统错误,编译器不做检查: Exception:程序可以处理的异常,捕获后可能恢复: 总结:前者是程序无法处理的错误,后者是可以处理的异常. 从责任角度分析 ...

  8. Java 的Throwable、error、exception的区别

    1. 什么是异常? 异常本质上是程序上的错误,包括程序逻辑错误和系统错误.比如使用空的引用(NullPointerException).数组下标越界(IndexOutOfBoundsException ...

  9. 谈一谈Java中的Error和Exception

    Error和Exception的联系 继承结构:Error和Exception都是继承于Throwable,RuntimeException继承自Exception. Error和RuntimeExc ...

随机推荐

  1. http缓存知多少

    很久没有写博客了,趁现在也快过年,最近项目不是很忙,写一篇博客做为2018年的开始,重拾刚毕业的几年前写博客的冲动.http协议是每个程序猿应该需要知道的东西,不管是前端人员还是后端人员,以前在上家公 ...

  2. 【NOIP模拟赛】飞(fly) 数论+树状数组

    树状数组一个被发明以来广为流行的数据结构,基于数组,核心是lowerbit()操作.他向前lowerbit()操作为前缀,向后lowerbit()操作为上辖,我们运用树状数组都是使一个由O(1)变为O ...

  3. json 串转成 java 对象再拼接成前台 html 元素

    获取商品参数 json 串,转成 java 对象,再拼接成前台 html 的Service方法 @Override public String getItemParam(Long itemId) { ...

  4. RTL2832U+R820T电视棒windows下安装sdr# 以及搭建ADS-B使用VirtualRadar看飞机的教程

    本文中提到的软件随后我会打包给出下载地址.这篇文章是我根据网上的教程和自己的经验修改的详细版本,为了方便入门新手.先来说说RTL2832U+R820T在windows下安装sdr#的方法.首先科普下s ...

  5. Codeforces Round #328 (Div. 2) A

    A. PawnChess time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  6. mysql删除id最小的条目

    DELETE FROM 表1 WHERE Mid in (select Mid from (SELECT Min(Mid) Mid FROM 表1 c1) t1);

  7. 生产服务器环境最小化安装后Centos 6.5优化配置备忘

    生产服务器环境最小化安装后 Centos 6.5优化配置备忘 本文 centos 6.5 优化 的项有18处,列表如下: 1.centos6.5最小化安装后启动网卡 2.ifconfig查询IP进行S ...

  8. Ubuntu1604 install netease-cloud music

    Two issue: 1. There is no voice on my computer, and the system was mute and cannot unmute. eric@E641 ...

  9. CSS中的块级元素、内联元素(行内元素)

    Block element 块级元素    顾名思义就是以块显示的元素,高度宽度都是可以设置的.比如我们常用 的<div>.<p>.<ul>默认状态下都是属于块级元 ...

  10. ByteUtil 工具类

    ByteUtil 工具类 import java.io.FileOutputStream; import java.io.OutputStream; import java.nio.charset.C ...