RuntimeException什么时候应该放在声明抛出异常?

请问在设计方法时,RuntimeException什么时候应该放在声明抛出异常? [问题点数:20分,结帖人king769147]

wonkju

Bbs3

结帖率 98.77%

例如,API中的Integer中的 

Java code?

1

2

3

 public static int parseInt(String s) throws NumberFormatException {

        return parseInt(s,10);

    }


方法,
和File中的构造器

Java code?

1

2

3

4

5

6

7

public File(String pathname) {

        if (pathname == null) {

            throw new NullPointerException();

        }

        this.path = fs.normalize(pathname);

        this.prefixLength = fs.prefixLength(this.path);

    }



有时写代码的时候,不用在方法上声明 throws, 然后直接判断就 throw一个Exception实例.
但是有时又发现抛出.

老婆半夜召唤十级上古神兽,战力瞬加1000w,吓哭!广告 37游戏 · 顶新

问题点数:20分

 0 2015-03-01 23:39:57

回复数 7 只看楼主 引用 举报 楼主

yuejingdong

Bbs2

Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。

0 2015-03-02 00:39:12

只看TA 引用 举报 #1    得分 4

JAVA Exception和RuntimeException的区别和用法、用处JAVA Exception和RuntimeException的区别和用法、用处 记得以前刚学JAVA时候,不知道Exception和RuntimeException怎么用,直至今天在项目中遇到问题,才豁然开朗。故写下心得体会,当然也未必完全正确,仅仅个人理解。 ①Exception, 非运行时异常,在项目运行之前必须处理掉。一般由程序员try catch 掉。 ②RuntimeEx

wonkju

Bbs3

引用 1 楼 yuejingdong 的回复:

Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。



我知道哈 ,checked Exception就是 RuntimeException哈, unchecked Exception就是 非RuntimeException.
但是上面的NumberFormatException也是RuntimeException,
也就是说,上面我贴的两个API代码,都是RuntimeException.但是你不是看见有的声明在方法中,有的没声明么.
所以我才上贴.

0 2015-03-02 01:32:41

只看TA 引用 举报 #2    得分 0

Java的声明抛出异常声明抛出异常 这个体系中的所有类和对象都具备一个独有的特点;就是可抛性。可抛性的体现:就是这个体系中的类和对象都可以被throws和throw两个关键字所操作。 如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。 在方法声明中用throws语句可以声明抛出异常的列表,th...

wonkju

Bbs3

引用 1 楼 yuejingdong 的回复:

Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。


打错了,
checked Exception就是 非RuntimeException哈, unchecked Exception就是 RuntimeException
但是还是我说的问题.
上面API代码,都是 unchecked Exception.
但是写法不同.所以我上贴

0 2015-03-02 01:35:07

只看TA 引用 举报 #3    得分 0

throw new RuntimeException("",e)e.printStackTrace( )是打印异常栈信息throw new RuntimeException(e)是把异常包在一个运行时异常中抛出。e.printStackTrace();在实际开发时意义不大,因为部署以后不会有人看控制台,这句很多情况下会被记录日志的代码代替。throw new RuntimeException就是要把异常继续抛出,要么由上层方法解决,要么会终止程序运行,比如这里...

yuejingdong

Bbs2

throws用来修饰一个方法,表示该方法如果产生异常的话,不在本方法中捕获, 而是丢弃给调用此方法的对象来处理(一般是非RuntimeException)。
throw是用来在程序中手动抛出一个异常,这个异常通常都是自定义的。
RuntimeException可以不捕获,直接抛出去,如果一直没有处理,jvm会自动处理。

0 2015-03-02 21:16:52

只看TA 引用 举报 #4    得分 0

Java中哪些异常必须声明并捕获,否则产生编译错误RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。 可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。也就是说,非RuntimeException异常类或者其子类的的异常都要声明捕捉。只有RuntimeException 或者是其子类的异常是不需要进行声明捕捉的。 Throwable

wonkju

Bbs3

引用 4 楼 yuejingdong 的回复:

throws用来修饰一个方法,表示该方法如果产生异常的话,不在本方法中捕获, 而是丢弃给调用此方法的对象来处理(一般是非RuntimeException)。
throw是用来在程序中手动抛出一个异常,这个异常通常都是自定义的。
RuntimeException可以不捕获,直接抛出去,如果一直没有处理,jvm会自动处理。



你好像答非所问.我觉得,声明的话,可以指示调用者需要注意可能发生的异常.我觉得正规点还是要声明, 我发现java API都是. 当然,不声明也没错.

吸烟前巧用一物,当天排出“恶露”,健康到尖叫广告 亚通 · 燨燚

0 2015-03-02 22:32:19

只看TA 引用 举报 #5    得分 0

yuejingdong

Bbs2

我觉得第一个例子中的throws NumberFormatException写不写都可以,写的好处是调用此方法的对象知道这个方法可能会出现这种异常,并进行处理。RuntimeException在很多时候并不清楚会发生什么异常,所以一般情况下没有必要写,也很难写全。交给jvm处理就好了。RuntimeException以外的异常是必须要处理的。
第二个例子是一个异常类的使用方法,通过抛出异常可以快速退出当前处理,返回调用此方法的对象,在那个对象里再catch住这个异常,进行相应处理。

0 2015-03-02 23:34:03

只看TA 引用 举报 #6    得分 16

什么时候要抛出异常? !在编写代码的过程中,经常会遇到这样的选择,检查到一个不正常的情况,或者某个操作失败,或者检测到 某个异常,此后该怎么办?是抛出一个异常?还是放回一个表示操作失败的返回值? 前一段在北京和小汤他们谈起这个问题的时候,有了一些粗略的想法。这段时间在 Leo4Net 的开发中,一些 想法逐步清晰起来。 === abc === === 两种方式的不同 ===     × 返

wonkju

Bbs3

引用 6 楼 yuejingdong 的回复:

我觉得第一个例子中的throws NumberFormatException写不写都可以,写的好处是调用此方法的对象知道这个方法可能会出现这种异常,并进行处理。RuntimeException在很多时候并不清楚会发生什么异常,所以一般情况下没有必要写,也很难写全。交给jvm处理就好了。RuntimeException以外的异常是必须要处理的。
第二个例子是一个异常类的使用方法,通过抛出异常可以快速退出当前处理,返回调用此方法的对象,在那个对象里再catch住这个异常,进行相应处理。



是哈, 后来我也这样想,从功能上说,加不加都是可以. 从远的方向想,如果发布为doc,就提示调用者可能抛出什么异常.

猜你喜欢

转载自blog.csdn.net/evilcry2012/article/details/85333998