.Net 中Exception 于 JAVA 中Exception 的讨论,大家给点意见

gongyue1983 2007-06-28 03:35:33
本人一直从事C#的程序开发工作,但是我发现在Exception 这方面比JAVA差.

就对于Custom Exception的处理,虽然在.NET和JAVA里面都支持Custom Exception。但是.NET里面没有JAVA里面做得好。举个例子:

public class CustomExcetion : Exception
{
//Various Methods To Do Different Job
}

在.NET中:

public void Test(){
try
{
//codes
throw new CustomExcetion();// pay attention on this line
}
catch(CustomExcetion e){}
}

在JAVA中:
public void Test() throws CustomExcetion{
try
{
//codes
}
catch(CustomExcetion e){}
}

在.NET中必须抛出一个CustomExcetion, catch才能捕捉到。而在JAVA里面指定了Test()抛出的错误就是CustomExcetion类型的。

问题:
在.NET中:在一个函数里面错误是不能被控制的,换句话我们不知道什么时候,什么地方会抛出什么样的错误,如果我们事先都知道了会抛出什么样子的错误,我们还需要try,catch干什么呢?不事先把这个错误解决了,还让它抛出来干什么?如果我们把throw new CustomExcetion();去掉,catch是捕捉不到错误的。这是最大的问题。

那么在JAVA里面,我觉得就做得比较好,自定义的Exception能够跟好的被运用,因为已经定义了Test()这个函数抛出的错误就是CustomExcetion类型的,不需要自己去抛出CustomExcetion类型的错误,而且这个错误也是没有办法的预测的。

在很大程度上Custom Exception是很有作用的,根据业务的不同,我捕捉到exception了可能还要进行一些其他的操作,我觉得.NET在Exception需要改进。


大家有什么不同的意见,很希望大家能够一起讨论。
...全文
184 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
AI码农客服 2008-07-20
  • 打赏
  • 举报
回复
在.NET中:在一个函数里面错误是不能被控制的,换句话我们不知道什么时候,什么地方会抛出什么样的错误,如果我们事先都知道了会抛出什么样子的错误,我们还需要try,catch干什么呢?不事先把这个错误解决了,还让它抛出来干什么?如果我们把throw new CustomExcetion();去掉,catch是捕捉不到错误的。这是最大的问题。
MicroSoftor 2007-06-28
  • 打赏
  • 举报
回复
如果全部抛出自定义异常类型,并不觉得是件好事,首先你在自己的异常类中如何来分别这些异常是哪种类型?
其次是象楼主这样使用自定义异常本来就容易产生错误.

标准做法是
try
{
//codes
throw new CustomExcetion();// pay attention on this line
}
catch(CustomExcetion e)
{
}
catch(Exception e)
{....
}
catch
{
}
finally
{
}

虽然这样比较烦琐,尤其是不带括弧的catch...
dovelee 2007-06-28
  • 打赏
  • 举报
回复
长见识了
Knight94 2007-06-28
  • 打赏
  • 举报
回复
to 在.NET中:在一个函数里面错误是不能被控制的,换句话我们不知道什么时候,什么地方会抛出什么样的错误,如果我们事先都知道了会抛出什么样子的错误,我们还需要try,catch干什么呢?不事先把这个错误解决了,还让它抛出来干什么?如果我们把throw new CustomExcetion();去掉,catch是捕捉不到错误的。这是最大的问题。

你的问题要分开来看,或者要分成两部分
第一部分是如何捕获程序中的异常,或者如何正确的使用try-catch;
第二部分是如何把程序的异常转化成自定义异常类型,再进行转发;

一般对于第一部分来说,并不是所有的代码需要用try-catch来进行保护,常用的做法是在容易或者可能发生错误的地方加上try-catch,这样做法可以很清楚找到出错的地点,以及具体的问题。
反之,用一个try-catch把整个函数都包容起来,即使中间出错,很难准确定位。

对于第二个部分,主要是向外做接口用的,为了把捕获到错误转化成定制的错误描述,而方便调用者知道错误在哪儿。

综合这两部分,表面上看起来java编写比较简洁,但是并不是一个好的方法,相比之下传统的try-catch方法很合理些。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧