下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

NET程序员如何转行为J2EE之java基础上(13)

作者:课课家教育     来源: http://www.kokojia.com点击数:659发布时间: 2016-01-29 18:38:15

标签: java敏捷开发java网络开发java学习课程

大神带你学编程,欢迎选课

  异常处理

  结构化的异常处理在两种语言中几乎完全相同。(两者都可以往后追溯到一份创始性的论文,即 Andrew Koenig 和 Bjarne Stroustrup 于 1990 年撰写的 Exception Handling for C++。) 两种语言都使用了两种异常概念:应用程序生成的异常,以及系统运行库(C# 的公共语言运行库,java 语言的 JVM)生成的异常。两种语言都具有 Exception 基类,应用程序异常和系统异常都是由它派生而来的。 图 3 显示了两种语言中的 Exception 类层次。

  图3. Java 语言和 C# 中的 Exception 类层次

NET程序员如何转行为J2EE之java基础上(13)_java敏捷开发_java网络开发_课课家

  然而,两种语言的编译器对您的代码如何处理异常具有不同的预期。在 C# 中,您可以选择捕获异常,或让它们沿调用堆栈向上传播到类的方法的调用者(和/或构造函数)。Java 语言允许同样的处理,但是对于未捕获的应用程序异常(也就是 java.lang.Exception 的子类),您必须显式地将它们作为方法声明的一部分来列出。因此 Java 编译器预期您或者自己捕获所有应用程序异常,或者告诉编译器关于未捕捉的异常的信息。例如,假设 Foo 类的构造函数可能抛出一个应用程序异常,那么清单 16 中的 C# 或 Java 代码对各自的编译器来说都不会有问题。

  清单 16. 处理应用程序异常

  C#                 Java

  ...                   ...

  public void someMethod() {        public void someMethod() {

  try {                  try {

  Foo x = new Foo();             Foo x = new Foo();

  }                    }

  catch (applicationException e)      catch (Exception e)

  {                    {

  ...                    ...

  }                    }

  }                    }

  然而,如果改变代码以使其不捕获异常,那么您就必须改变 Java 方法声明(如清单 17 所示)以避免编译器错误。

  清单 17. 未捕获的应用程序异常

  C#                Java

  ...                 ...

  public void someMethod() {      public void someMethod() throws Exception {

  Foo x = new Foo();           Foo x = new Foo();

  }                  }

  两种语言在这方面存在的另一个区别在于,在 C# 中,每个捕获块的参数是可选的。如果省略它,那么所有异常都会被捕获。Java 语言不允许这样,而是允许一个等价功能( java.lang.Throwable ),它捕获所有异常类的父类,如清单 18 所示。

  清单 18. 捕获所有异常

  C#                  Java

  ...                    ...

  public void someMethod() {        public void someMethod() {

  try {                   try {

  Foo x = new Foo();             Foo x = new Foo();

  }                     }

  catch                   catch (Throwable e)

  {                     {

  ...                     ...

  }                     }

  }                     }

赞(22)
踩(1)
分享到:
华为认证网络工程师 HCIE直播课视频教程