java 异常 太复杂_深入理解java异常【绝对经典,推荐最少看五遍】

http://blog.csdn.net/hguisu/article/details/6155636

补充:检查异常(checkedException)与运行异常,什么时候throw,什么时候throws,什么时候trycatch的探索。

Demo1:testException方法中throw的是RuntimeException

1 packagecom.westward;2

3 public classDemo12 {4

5 public static void main(String[] args) {6 testException();7 }8 public static void testException() {9 throw newRuntimeException();10

11 }12

13 }14

15 class MyException extends Exception{//自定义异常,属于检查异常,即非运行时异常

16 String errorMessage;17 publicMyException(String eString){18 errorMessage=eString;19 }20 publicString getErrorMessage() {21 returnerrorMessage;22 }23 }

run:

Exception in thread "main" java.lang.RuntimeException

at com.westward.Demo12.testException(Demo12.java:9)

at com.westward.Demo12.main(Demo12.java:6)

Demo2:testException方法中throw的是MyException(检查异常,非运行时异常);代码与Demo1对比,主要是line9不同,

1 packagecom.westward;2

3 public classDemo12 {4

5 public static void main(String[] args) throwsMyException {6 testException();7 }8 public static void testException() throwsMyException{9 throw new MyException("haha--MyException");10 }11

12 }13

14 class MyException extends Exception{//自定义异常,属于检查异常,即非运行时异常

15 String errorMessage;16 publicMyException(String eString){17 errorMessage=eString;18 }19 publicString getErrorMessage() {20 returnerrorMessage;21 }22 }

run:

Exception in thread "main" com.westward.MyException: haha--MyException

at com.westward.Demo12.testException(Demo12.java:10)

at com.westward.Demo12.main(Demo12.java:6)

结论:通过这两个demo的代码可知,

demo1,自定义的方法中throw了一个运行时异常,我们在testException中既没有throws声明这个方法有可能发生异常(在这里指我throw的运行时异常),也没有trycatch对可能发生的异常(在这里指我throw的运行时异常)进行捕捉处理。因为java异常处理机制规定,对于java定义好的运行时异常,由java运行时系统自动处理抛出,不需要程序员声明或者捕捉;

demo2,自定义的方法中throw了一个非运行时异常(自定义的MyException),由于throw的是检查异常(非运行时异常),所以我们必须在定义的方法头throws声明异常类型或者在方法体trycatch捕获  可能发生非运行时的异常(本例的throw new MyException)。同时,在调用该方法的外层方法也得throws或者trycatch。

自己对throws/trycatch       throw的简单理解。

对非运行时异常:一段代码,可能发生异常,即可能throw 一个异常对象,为了提前应对这段可能发生异常的代码(可能throw一个异常对象),java异常机制要求在这个方法的头部throws(声明)对应的异常类,即我的这个方法,我提前声明下,可能会有xxx异常;或这个在方法体内对可能发生异常的代码trycatch(捕捉)。throw抛出异常是相对没有发生异常来说的。throws/trycatch的是可能throw异常的代码。如果代码里我们直接throw了一个异常,我们更要(可以这样理解)throws/trycatch这个方法了。同时,在调用该方法的外层方法也得throws或者trycatch。我们可以理解,throws/trycatch是为了应对可能发生异常所做的应对措施。

对运行时异常,java运行时程序自动抛出,不是必须throws或者trycatch。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值