众所周知,java的顶级异常当然就是Throwable了,Throwable(注意它是Object下面的一个类)下面有Error和Exception。Error,用于指示合理的应用程序不应该试图捕获的严重问题,所以一般java异常处理就不提及这个Error及其下面的类了。下面说说Exception:
Exception和Exception下的 RuntimeException 父子关系啊,差别却是相当大,——由于,Java中采用了强制异常捕捉机制,所以有了这个区分:
Exception下的 RuntimeException —不需要处理的(Unchecked exceptions)
和
非RuntimeException — 需要处理的(Checked exceptions)
个人感觉:
创建一个类的时候
然后创建其中方法的时候,其方法签名有throws xxxExceptioin, 那么这个xxxExceptioin就是Checked exceptions,
就是说,别地方(别的类或者本类其他方法中)调用此方法的时候,就【必须】要处理此Exception了,
—————— 不是这样的,这个只是java异常机制一部分而已
准确的说:
当方法M抛出,自定义的继承于runtimeexception的异常时,异常上层程序无须捕获,因为按照下面的说法——————————(捕获了除了继续向外抛以外也无能为力)
RuntimeException 这个表示系统异常,比较严重。想处理也处理不了,或不好处理
http://www.java3z.com/cwbwebhome/article/article8/806.html
Java中采用了强制异常捕捉机制,这样一方面提高了程序的可靠性,不过有时候也带来一些麻烦。比如:int i= Integer.parseInt("33");
这个我知道它不可能会抛出异常,但是不捕捉异常的话就过不了编译这关,当然这个代码没有意义的。
Java中所有异常或者错误都继承Throwable:
1.Error:所有都继承自Error,表示致命的错误,比如内存不够,字节码不合法等。
2.Exception:这个属于应用程序级别的异常,这类异常必须捕捉。——————————————————不处理都编译不通过的,如常见的IOException
3.RuntimeException:奇怪RuntimeException继承了Exception,而不是直接继Error, 这个表示系统异常,比较严重。
java中异常分两类,
一类是需要处理的(Checked exceptions), ———————— Exception
一类是不需要处理的(Unchecked exceptions)。 ———— RuntimeException
是否需要处理是指:你程序中抛出的异常客户端是否需要处理,是否有能力处理。
以用户注册来说明,每个用户有一个唯一的注册名,当用户提交注册信息时,从后台检测这个注册名已经存在,违反唯一性,这时候你可以抛出一个checked exception,
上层程序可以捕获这个异常,并将信息提示给用户,让用户换个注册名;
如果在用户提交注册信息时,正好你的数据库宕掉了,无法对数据进行存取,这时候你就要抛出unchecked exception(例如你自定义的继承于runtimeexception的异常),
这个异常上层程序无须捕获,或者说捕获了除了继续向外抛以外也无能为力。—————————————————— 这话说得太对了,感觉就是这样
checked ,unchecked 需要处理,不需要。。。。 容易搞混啊
NullPointerException 原来是 RuntimeException 的子类啊
http://www.189works.com/portal.php?mod=view&aid=47802
——菜鸟文章,仅供自己参考,勿怪。