学习mars老师的JAVA视频,在‘异常’章节中卡住了,具体问题如下,求高人细细指点!

什么叫做checkException?
什么叫做uncheckException?
它们的区别在哪?
我怎么知道我正在写的代码会出现checkException还是uncheckException?
try\catch\finally命令如何处理checkException?
try\catch\finally命令如何处理uncheckException?
下面自定义异常中,为什么要使用runtimeException来生成异常对象?用Exception行吗?为什么?
int age;
void setAge(int age){
if(age<0){
RuntimeException e = new RuntimeException("年龄不能为负数");
throw e;
}
this.age = age;
}

Java异常类分为必检(check)异常和非必检(uncheck)异常,必检异常就是你必须捕捉的异常,而非必检异常是你可以捕捉,也可以不捕捉。
(1)必检异常包括Exception类以及它的子类,但是RuntimeException和它的子类除外。
(2)非必检异常包括Error和他的子类以及RuntimeException和它的子类。
那么什么是必检异常呢,必检异常简单的来说就是这个异常是你的程序逻辑出现了问题而抛出的异常,例如你在读一个文件的时候,文件找不到,这样的异常就是必检异常。
而非必检异常是你的程序逻辑没有问题,是Java虚拟机内部或者是你的java程序连接的数据库等有问题,这个是你的程序无法处理的,你的程序处不处理都一样,就是说你可以不用捕捉的异常。
在你的程序中,是显示的抛出了一个异常,并且这个异常并没有进行捕捉,也就是没有放在try -catch语句里面,因为前面说过RuntimeException是一个非必检异常,那么这里不用捕捉是没有任何问题的,但是如果你换成Exception的话,就要进行捕捉,否则不能通过编译,因为Exception是一个必检异常,程序如下:
class User{
private int age;
public void setAge(int age){
if (age < 0) {
Exception e = new Exception("年龄不能为负数");
try {
throw e;//抛出的异常要放在try-catch语句里面,否则不能通过编译。
} catch (Exception e1) {

e1.printStackTrace();//打印异常信息
}
}
this.age = age;
}
}
如果你捕捉了异常,不管是必检异常还是非必检异常,这个try\catch\finally语句解决的方式都是一样的,首先当出现异常的时候,会抛出一个异常对象,然后在catch语句里面来处理这个异常,而finally语句呢就是不管你抛不抛出异常都照样执行。
对于你提到的,怎样判断什么时候用RuntimeException什么时候用Eception来生成对象,其实程序里面一般情况下是不会显示的抛出一个RuntimeException异常,因为他是一个非必检的异常,也就是说当这个异常出现的时候,是我们人为无法处理的,它可能是Java虚拟机内部出现了问题,在程序里我们没法处理。一般程序里面抛出的异常90%以上都是必检异常,就是抛出Exception异常或者是他的子类,那具体的抛出Exception和其子类的哪一个异常,这个就要看你的程序了,比如你在读写一个文件,那么有可能这个文件不存在,这个时候你要进行读写的话就会抛出异常,这个时候你就可以抛出FileNotFoundException异常。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答
大家正在搜