`

JAVA和.NET异常的区别

阅读更多
        JAVA和.NET异常的区别
关于 Java 和 .Net 优劣的争论一直在继续,而在异常处理方面体现得最为激烈,因为他们之间的差异是如此明显。.Net 晚于 Java 出现,那么 Java 对 .Net 就理应起到很重要的借鉴作用,但是伟大的 Anders Hejlsberg 为什么没有继续 Java 的实现方式,而是另辟蹊径,这是一个非常值得研究的问题。因为我们要承认一个真理:正确的东西大家都是一样的正确,错误的却各有个的错误。可以肯定这不可能是 Anders 的疏忽,那么他的道理究竟何在,或者说他们之间究竟有什么区别?

      在你能耐下心来看完这篇帖子之前,我想要明确告诉你一个结论:Java 和 .Net 在异常处理的本质上是没有区别的。

一、Java 是如何处理异常的

      如果一个 Java 方法要抛出异常,那么需要在这个方法后面用 throws 关键字定义可以抛出的异常类型。倘若没有定义,就认为该方法不抛出任何异常。如果从方法的入口和出口的角度去考虑一下这个规范,我们知道参数可以认为是方法的入口(当然某些情况下也可以是出口),而返回值则是方法的出口,这是在程序正常执行的情况下,数据从入口入,出口出。要是程序非正常执行,产生异常又当如何? 被抛出的异常应该如何从方法中释放出来呢? Java 的这种语法规范就如同给异常开了一个后门,让异常可以堂而皇之“正确”地从方法里被抛出。

      这样的规范决定了 Java 语法必须强行对异常进行 try-catch。设想一下,对于以下的方法签名:

public void foo() throws BarException { ... }

暗含了两方面的意思:第一,该方法要抛出 BarException 类型的异常;第二,除了 BarException 外不能抛出其他的异常。而正是这第二点的缘故,我们要如何保证没有除 BarException 之外的任何异常被抛出呢? 很显然,就需要 try-catch 其他的异常。也就是说,一般情况下,方法不抛出哪些异常就要在方法内部 try-catch 这些异常。

      Java 这样的机制既有优点,也有缺点。先来说说优点:

  • 很显然,这种规范是由 Java 编译器决定的。倘若 Java 程序的入口点 main() 方法没有任何异常抛出,就是说要在 main() 方法内部,即整个程序内部捕捉所有的异常,否则将无法通过编译。这样编译器保证了程序对每个异常都有相应的计划和处理,不会有未处理的异常被泄露到虚拟机中,导致程序意外中断或退出,也就是增强了程序的健壮性。当然,Java 有 RuntimeException 的概念,这样的异常仍然可以随时被抛出到虚拟机中。
  • 强行 try-catch 要求把异常作为程序设计的一部分看待。就如同方法的参数和返回值一样,在编写一个方法时,要结合上下文做出通盘的考虑和打算。虽然异常是所谓的“意外情况”,但是这些“例外”理应是被我们全部了解并处理的。
  • 方便调试。异常理应在正确的位置被捕捉。当异常发生时,我们能更清楚的了解到其来源和相应处理程序的位置,而免去了在整个调用栈中摸索的麻烦。
  • 在不借助任何文档的情况下,从方法签名就可以知晓应该对哪些异常进行处理。

      Java 异常处理机制的这些优点也直接导致了他的致命弱点:将程序变得异常繁复。往往一个简单的程序,功能代码寥寥几行,而异常处理部分却占用了程序的绝大部分篇幅;同时导致缩进深度加深,既不利于书写,也不利于阅读。另外他的强行 try-catch 需要程序员有更

分享到:
评论

相关推荐

    java和.net的socket通信

    在Java中,Socket类位于`java.net`包下,而在.NET中,Socket类位于`System.Net.Sockets`命名空间内。 2. **TCP连接**:Java和.NET的Socket通信通常基于TCP(传输控制协议),这是一种面向连接的、可靠的传输协议,...

    java调用.net发布的webservice(asmx)

    在IT行业中,跨平台通信是常见的需求,Java和.NET作为两个主流的开发平台,它们之间的交互尤为关键。本文将详细讲解如何使用Java调用.NET发布的Web Service(ASMX),并解决在此过程中可能出现的SOAPAction报错和...

    Java 调用.NET web服务

    总结,Java调用.NET Web服务的过程主要包括理解WSDL,使用JAX-WS生成Java客户端代码,构建并运行客户端,处理异常,以及可能的性能优化和安全措施。在实际开发中,还需要关注兼容性、版本管理和文档记录等方面,确保...

    Java和.Net经典最新面试题

    Java和.Net是两种广泛应用于企业级开发的重要技术框架,它们各自拥有庞大的生态系统和社区支持。在面试中,考察应聘者对这两个平台的理解和技术熟练度是非常关键的环节。本篇文章将根据"Java和.Net经典最新面试题"这...

    Java与.net的区别.txt

    ### Java与.NET的区别 #### 一、概述 Java与.NET是两种广泛使用的软件开发平台,它们各有优势和局限性。本文将从多个方面探讨这两种技术的不同之处,为开发者提供参考,帮助他们根据项目需求选择最适合的技术栈。 ...

    一周学会C# java程序员转.NET必看

    对于从Java转到.NET平台的程序员来说,理解C#的基本概念和语法是非常重要的。以下是一些关键知识点: 1. **总体框架**: C#程序通常以`.cs`文件的形式存在,其中可以包含一个或多个类。类名不一定要与文件名相同,...

    Java与.NET 的Web Services相互调用

    在实际操作中,Java和.NET之间的互操作性可能会遇到兼容性问题,如数据类型转换、异常处理和序列化差异等。解决这些问题通常需要对SOAP消息格式有深入理解,并可能需要配置额外的适配器或使用特定的互操作库。 5. ...

    Java和.net的笔记

    Java和.NET是两种广泛使用的软件开发平台,它们各自拥有丰富的工具和框架,为开发者提供了不同的编程体验和技术选择。本文将围绕这两个平台的核心概念、主要差异以及相关面试知识点进行深入探讨。 首先,Java是一种...

    java调用.net的WebService[借鉴].pdf

    在软件开发中,跨平台交互是常见的需求,Java 和 .NET 平台之间的通信可以通过 WebService 实现。本篇将详细讲解如何使用 Java 调用 .NET 开发的 WebService。 1. **WebService 概念** WebService 是一种基于标准...

    笔试题java&.net全集收录

    标题中的“笔试题java&.net全集收录”表明这是一个包含Java和.NET技术领域笔试题目的集合,可能涵盖了这两门编程语言的基础知识、高级概念、框架应用以及开发实践等内容。这些题目可能是为了招聘过程中的技术筛选而...

    java、.net

    Java的核心特性包括垃圾回收机制、强大的异常处理和丰富的类库。在企业级应用开发中,Java以其稳定性和可扩展性著称,例如使用Spring框架进行服务端开发,或者使用Hibernate进行数据持久化。 描述中的“没有没用的...

    java程序调用.net/c#的webservice

    总之,Java调用.NET/C#的Web服务是一个涉及网络通信、SOAP协议、类型转换等多个技术层面的过程,需要对Java和.NET平台都有一定的理解。正确配置和使用相关的工具库,可以有效地实现跨平台的通信。

    Java和.net的面试题

    - **异常处理**:Java中的异常分为检查型异常和非检查型异常,理解如何正确地使用try-catch-finally语句是基本要求。 2. **.NET框架** - **CLR与CIL**: .NET Framework的执行环境是公共语言运行时(CLR),它将源...

    java调用.net webservice实例

    在本实例中,Java通过Apache Axis库调用.NET WebService,主要涉及以下步骤和知识点: 1. **Apache Axis库**:Apache Axis是Apache软件基金会开发的一个开源项目,它提供了Java到SOAP的绑定框架,允许Java开发者...

    java.net.SocketException Connection reset 解决方法

    "java.net.SocketException Connection reset 解决方法" 在 Java 编程中,SocketException 是一种常见的异常,特别是在网络编程中。Conexion reset by peer 是一种特殊的 SocketException,它发生在客户端和服务器...

    Java与.Net 经典练习题

    Java和.NET是两种广泛使用的开发平台,它们各自拥有丰富的生态系统和强大的工具支持。这份"Java与.Net 经典练习题"旨在帮助开发者提升编程技能,尤其是对于算法的理解和运用。以下是一些相关的知识点: 1. **Java...

    VB.NET转JAVA工具

    VB.NET和Java是两种不同的编程语言,分别基于微软的.NET框架和开源的Java平台。VB.NET转JAVA工具的出现,主要是为了帮助开发者将已有的VB.NET项目迁移到Java环境中,或者便于那些熟悉VB.NET语法但需要在Java平台上...

    Java、.NET面试题(技术笔试题)各多套含答案word版

    Java和.NET是两种广泛使用的软件开发平台,它们在企业级应用开发中占据着重要的地位。这份压缩包包含的“Java、.NET面试题(技术笔试题)各多套含答案word版”为求职者提供了宝贵的资源,帮助他们准备面试,提升就业...

    java和.NET面试题

    Java和.NET是两种广泛使用的开发平台,它们各自拥有丰富的生态系统和强大的工具支持。在面试过程中,了解这些技术的基础知识对于求职者来说至关重要。本篇文章将深入探讨Java和.NET面试中的常见知识点。 首先,我们...

Global site tag (gtag.js) - Google Analytics