Checked Exception与Runtime Exception 的区别

2016-02-19 18:58 7 1 收藏

下面图老师小编要跟大家分享Checked Exception与Runtime Exception 的区别,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - 编程语言 】

  Java里有个很重要的特色是Exception ,也就是说答应程序产生例外状况。而在学Java 的时候,我们也只知道Exception 的写法,却未必真能了解不同种类的Exception 的区别。
  
  首先,您应该知道的是Java 提供了两种Exception 的模式,一种是执行的时候所产生的Exception (Runtime Exception),另外一种则是受控制的Exception (Checked Exception)。
  
  所有的Checked Exception 均从java.lang.Exception 继续而来,而Runtime Exception 则继续java.lang.RuntimeException 或java.lang.Error (实际上java.lang.RuntimeException 的上一层也是java.lang.Exception)。
  
  当我们撰写程序的时候,我们很可能会对选择某种形式的Exception 感到困扰,到底我应该选择Runtime Exception 还是Checked Exception ?
  
  其实,在运作上,我们可以通过Class 的Method 如何产生某个Exception以及某个程序如何处理这个被产生来的Exception 来了解它们之间的差异。
  首先我们先建立一个Exception
  
  public class CException extends Exception
  {
  public CException() {}
  public CException(String message)
  {
  super(message);
  }
  }
  
  然后我们撰写一个可能产生 CException 的 Class
  
  public class testException
  {
  public void method1() throws CException
  {
  throw new CException("Test Exception");
  }
  
  public void method2(String msg)
  {
  if(msg == null)
  {
  throw new NullPointerException("Message is null");
  }
  }
  
  public void method3() throws CException
  {
  method1();
  }
  
  // 以下省略
  // ...
  }
  
  在这三个method 中,我们看到了method1 和method2 的程序码内都会产生Exception,但method3 的程序码中(大括号内),并没产生Exception,但在method3 的定义中,暗示了这个method 可能产生CException。?XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

呼叫method1() 的程序,必须将method1() 包含在try 与catch 中,如:
  
  public class runtest
  {
  // ....
  public static void main(String argv[])
  {
  testException te = new testException();
  try
  {
  te.method1();
  }
  catch(CException ce)
  {
  // ....
  }
  }
  // ...
  }
  
  虽然包含在try 与catch 中,并不表示这段程序码一定会收到CException,但它的用意在于提醒呼叫者,执行这个method 可能产生的意外,而使用者也必须要能针对这个意外做出相对应的处理方式。
  
  当使用者呼叫method2() 时,并不需要使用try 和catch 将程序码包起来,因为method2 的定义中,并没有throws 任何的Exception ,如:
  
  public class runtest
  {
  // ....
  public static void main(String argv[])
  {
  
  testException te = new testException();
  
  // 不会产生 Exception
  te.method2("Hello");
  
  // 会产生 Exception
  te.method2(null);
  }
  // ...
  }
  
  程序在执行的时候,也不见得会真的产生NullPointerException ,这种Exception 叫做runtime exception 也有人称为unchecked exception ,产生Runtime Exception 的method (在这个范例中是method2) 并不需要在宣告method 的时候定义它将会产生哪一种Exception 。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

在testException 的method3() 中,我们看到了另外一种状况,也就是method3里呼叫了method1() ,但却没有将method1 包在try 和catch 之间。相反,在method3() 的定义中,它定义了CException,实际上就是假如method3 收到了CException ,它将不处理这个CException ,而将它往外丢。当然,由于method3 的定义中有throws CException ,因此呼叫method3 的程序码也需要有try catch 才行。
  
  因此从程序的运作机制上看,Runtime Exception与Checked Exception 不一样,然而从逻辑上看,Runtime Exception 与Checked Exception 在使用的目的上也不一样。
  
  一般而言,Checked Exception 表示这个Exception 必须要被处理,也就是说程序设计者应该已经知道可能会收到某个Exception(因为要try catch住) ,所以程序设计者应该能针对这些不同的Checked Exception 做出不同的处理。
  

来源:http://www.tulaoshi.com/n/20160219/1619712.html

延伸阅读
好动与多动症的区别 妈妈看到自己的宝宝总是不安分,担心宝宝是患了多动症,其实有些宝宝只是天性好动,如何区别好动与多动呢? 1、正常好动的孩子,虽然也有注意力下集中的表现,但对有兴趣的事情,却能专心致志,很少分散;而多动症的孩子做不到。 2、正常儿童www.Tulaoshi.com虽然表现散漫,如上课做小动作,...
感冒与肺炎的区别 小儿出生半年后,从母亲体内获得的抗体已基本消失,而婴儿自身合成抗体的能力仍很低下,处于生理性低谷,直要到2岁时小儿自身合成抗体的能力才能基本达到成人水平。因而小儿在6个月至2岁的这个阶段容易患传染病及感染性疾病如感冒和腹泻等。 感冒是母亲带小儿去医院就诊的主要疾病,小儿每年平均患感冒6-8次,而每次感...
信托和基金都是目前投资收益比较高的理财产品,那么信托与基金的区别是什么?下面给大家讲解一下信托与基金的区别。 一、基金(Fund)有广义和狭义之分,从广义上说,基金是指为了某种目的而设立的具有一定数量的资金。例如,信托投资基金、单位信托基金、公积金、保险基金、退休基金,各种基金会的基金。在现有的证券市场上的基金,包括...
标签: 股票 期货 理财
收益来源不同 股票投资的收益主要来源于两个方面,一是上市公司的股息红利,其二就是股票交易的价差; 期货的利润仅来源于价差,它完全依赖于期货交易者对市场价格走势的预测,对则盈、错则损。股票交易是投资、投机均可,而期货交易是纯粹的投机。 收益的大小不同 期货的收益比股票的收益要高,因为期货实行的是保证金交易,其交易...
标签: 月季 玫瑰
月季与玫瑰的主要区别如下: 1、月季叶少,3-5片,而玫瑰5-9片。 2、月季刺少,玫瑰刺多。 3、月季叶泛亮光,玫瑰叶无亮光。 4、月季花较大,颜色多样;玫瑰花较小,一般为粉红色。第二种玫瑰花稍大,但呈扁平盘形,容易与月季区分开来。 5、玫瑰仅开一季【4到7月间】,而月季花期很长,一年四季会陆续开放。...

经验教程

636

收藏

56
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部