论坛首页 Java企业应用论坛

面试题:用Exception异常还是if判断

浏览 34401 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (13) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-08-25  
个人感觉,应该throw exception 到一个专门处理异常的类集中处理,ifelse会使程序整体很混乱。
1 请登录后投票
   发表时间:2010-08-25   最后修改:2010-08-25
再次提示对于参数验证使用断言.
对于入力参数应该是全部被考虑到的
(录入错误也应该在逻辑之内,
属于鲁棒性编程方法)

如有不正确那需要防御编程方法
防御编程目的是找出代码出问题的点
而不是业务需要.

在jvm中还有关闭断言的方法.
正式环境下关闭断言.
开发测试下打开断言

PS:如果真的去面试楼上的众人全军覆没
mercyblitz 写道
mathfox 写道
抛出异常的爱 写道
showr 写道
一个方法的参数,C里面好像是一堆的if else判断参数是否合法,不合法就返回一个没有实际意义的值

但在java里面有异常机制,当参数不合法的时候,究竟是if else 一样判断后返回一个值

还是直接来个Exception ?

如果是 if else 的话,有什么好处 ?

如果是 exception 的话,又有什么好处 ?

或者是根据不同情况来定 ?

一次面试的题目,至今无解,求真相

使用断言.

断言,不是也以抛异常做为结束吗?求讲解。



断言是错误,不是java.lang.Exception,它是java.lang.AssertionError。

很多框架使用的自定义断言,很少使用JVM断言机制。
0 请登录后投票
   发表时间:2010-08-25  
sam_chi 写道
看情况吧,如果能在方法里面处理不影响方法功能的话使用if else处理,如果参数错误导致方法不能正常工作,那么就得抛异常了,Java提供了java.lang.IllegalArgumentException,可以直接new一个抛出去,这是一个RuntimeException,不需要try..catch

我比较认同这种,当然不同程序员的喜好不同吧。即使是异常也可以统一给出异常显示界面。
0 请登录后投票
   发表时间:2010-08-25  
qq123zhz 写道
个人感觉,应该throw exception 到一个专门处理异常的类集中处理,ifelse会使程序整体很混乱。


支持!!
封装自己的异常体系.将底层代码中出现的程序、参数异常或者业务逻辑错误向上层抛出.在最外层统一拦截处理,该机日志记日志,改给用户提示给用户提示.
0 请登录后投票
   发表时间:2010-08-25  
何时需要使用断言
  1.可以在预计正常情况下程序不会到达的地方放置断言
    2.断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)
   3.使用断言测试方法执行的前置条件和后置条件
  4.使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足。(如age属性应大于0小于某个合适值)

什么地方不要使用断言
  断言语句不是永远会执行,可以屏蔽也可以启用
  因此:
  1.不要使用断言作为公共方法的参数检查,公共方法的参数永远都要执行
  2.断言语句不可以有任何边界效应,不要使用断言语句去修改变量和改变方法的返回值
0 请登录后投票
   发表时间:2010-08-25  
抛出异常的爱 写道
再次提示对于参数验证使用断言.
对于入力参数应该是全部被考虑到的
(录入错误也应该在逻辑之内,
属于鲁棒性编程方法)

如有不正确那需要防御编程方法
防御编程目的是找出代码出问题的点
而不是业务需要.

在jvm中还有关闭断言的方法.
正式环境下关闭断言.
开发测试下打开断言

PS:如果真的去面试楼上的众人全军覆没
mercyblitz 写道
mathfox 写道
抛出异常的爱 写道
showr 写道
一个方法的参数,C里面好像是一堆的if else判断参数是否合法,不合法就返回一个没有实际意义的值

但在java里面有异常机制,当参数不合法的时候,究竟是if else 一样判断后返回一个值

还是直接来个Exception ?

如果是 if else 的话,有什么好处 ?

如果是 exception 的话,又有什么好处 ?

或者是根据不同情况来定 ?

一次面试的题目,至今无解,求真相

使用断言.

断言,不是也以抛异常做为结束吗?求讲解。



断言是错误,不是java.lang.Exception,它是java.lang.AssertionError。

很多框架使用的自定义断言,很少使用JVM断言机制。


还是不太明白。。。求详细解答。。。
0 请登录后投票
   发表时间:2010-08-25   最后修改:2010-08-25
heqishan 写道
抛出异常的爱 写道
再次提示对于参数验证使用断言.
对于入力参数应该是全部被考虑到的
(录入错误也应该在逻辑之内,
属于鲁棒性编程方法)

如有不正确那需要防御编程方法
防御编程目的是找出代码出问题的点
而不是业务需要.

在jvm中还有关闭断言的方法.
正式环境下关闭断言.
开发测试下打开断言

PS:如果真的去面试楼上的众人全军覆没
mercyblitz 写道
mathfox 写道
抛出异常的爱 写道
showr 写道
一个方法的参数,C里面好像是一堆的if else判断参数是否合法,不合法就返回一个没有实际意义的值

但在java里面有异常机制,当参数不合法的时候,究竟是if else 一样判断后返回一个值

还是直接来个Exception ?

如果是 if else 的话,有什么好处 ?

如果是 exception 的话,又有什么好处 ?

或者是根据不同情况来定 ?

一次面试的题目,至今无解,求真相

使用断言.

断言,不是也以抛异常做为结束吗?求讲解。



断言是错误,不是java.lang.Exception,它是java.lang.AssertionError。

很多框架使用的自定义断言,很少使用JVM断言机制。


还是不太明白。。。求详细解答。。。

参数不合法有两种可能
1.设计必须冗余错误参数 ....
2.使用此方法的地方参数录入错误.
对于2.你冗余了那么bug就会被隐藏.
所以不必要的冗余需要去掉.
一个方法只干一件事.
对于发现错误需要定位.
所以需要断言来产生定位信息
在正式环境下启动参数可以选反不使用断言.
(当然你要确定此方法使用的正确性,断言永远不会被运行到.)
0 请登录后投票
   发表时间:2010-08-25  
楼主 抽时间去看看Effect Java 有一章节讲了异常~
0 请登录后投票
   发表时间:2010-08-25  
我觉得还是exception一下,毕竟是java推荐的
0 请登录后投票
   发表时间:2010-08-25  
异常是给所不能预料到的错误而准备的解决方案,不是用来取代正常的判断的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics