问题1:当函数内有throw语句时,可以在函数上throws,也可以写try catch语句,那如果我既写throws声明又写try,catch语句,这样对吗?
对的话,发生异常是执行抛出还是catch啊?
你可以同时写throws和try,catch。但是一般没必要写2个进去。
同时写时是先执行try,catch。因为throws是抛给了jvm,jvm执行throws时会先检测try,catch。
其次,对于先执行还是后执行,这个问题以后再有最好自己打代码试试。练习能力还记忆深刻。
问题2:有了catch语句就是处理异常了,但是如果catch语句是空的,那不是等于什么都没写吗?这样算是处理异常了吗?
只要你写了try,catch语句,jvm就认为你处理了异常,catch语句中是对异常的处理,一般都是返回一个用户能读懂的信息。
你什么也不写,发生异常时,也算处理了,但是返回的信息是空白的,比如你写java程序时,遇到错误jvm会给你提示(虽然是英文的....),然后结束。但如果不提示,直接结束,你就迷茫了。
所以一般建议自己写try,catch,因为你不能把错误原因返回给用户,也要给用户一个看的懂的信息。
举个简单的例子:
class Demo {
public static void main(String[] args) throws IOException{
try {
FileReader fr = new FileReader("b.txt");
System.out.println(fr);
} catch (IOException e) {
System.out.println("这个要读取的文件不存在!");
//e.printStackTrace();
}
}
}
上面的程序是IO中一个读取文件的一段代码。当你要读取的文件不存在时,就会报错。
上面的代码用了try,catch,也用了throws。
但是先执行try,catch。
而catch中的代码就是处理结果。
如果不写System.out.println("这个要读取的文件不存在!");
写的是默认的e.printStackTrace();等于是又调回了jvm的方法,返回java.io.FileNotFoundException
英语不好就看不懂了...
最后,对发生的异常一直throws到最后,不做其他事情,这样能通过吗?
只要你抛了就肯定能通过,但是以后会很麻烦。
假设你有问题就抛,写的是很长的代码,写完后一运行........... |