比如:
Integer i = Integer.parseInt("abc");
这条语句不会要求用try/catch
但它是要抛异常的,而且用try包围起来也能catch抛出的异常
-------
如果我自己写一个抛异常的方法,在调用的时候编辑器就要求必须写try/catchpublic static void testTry() throws Exception{
throw new Exception("xxx");
}这是为什么?
Integer i = Integer.parseInt("abc");
这条语句不会要求用try/catch
但它是要抛异常的,而且用try包围起来也能catch抛出的异常
-------
如果我自己写一个抛异常的方法,在调用的时候编辑器就要求必须写try/catchpublic static void testTry() throws Exception{
throw new Exception("xxx");
}这是为什么?
public static void main(String[] args) {
Integer i = Integer.parseInt("abc");
try {
testTry();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void testTry() throws Exception{
throw new Exception("xxx");
}
自己动手~丰衣足食啊
RuntimeException不用强制try/catch
对比一下我们就会发现,RuntimeException 是在程序中可以完全避免的,比如数组越界异常,只要我在程序里作个判断,如果要访问的数组元素下标和数组的长度作一下比较就知道会不会越界,再比如空指针异常,如果在访问对象时判断一下对象的变量是否为空就可以了。而非RuntimeException 则是程序无法避免的,比如IO异常,你的程序正在读一个文件,而这个文件所在磁盘出现了坏道,这就必然会引发IOException,这是不是靠编程高手编写完美的程序就可以法避免得了的,程序所能做的只有出现异常之后怎么处理的问题。
又或者是Integer.parseInt("abc")的里面已经把已知预期的exception捕获了
也可能是里面抛的是RuntimeException的继承异常 无需强制捕获
是运行时异常,不用强度try catch而你自己定义的方法是非运行时异常必须使用try catch 处理 或者 往上抛
exception(异常) 又分为二类 (CheckedException)检查异常,(RuntimeException)运行异常,
error 是不能处理的,比如说: 程序运行过程中 ,停电了Exception(异常)解释如:
受检查的异常是指,可以在程序编译期间确定会抛出异常的代码,这些异常由继承Exception的类来指定
比如IOException,为什么所有流操作,文件操作会抛出IOException,因为在编译时就能确定,一个文件不正常关闭时,应该进行的处理而运行时异常是指无法在编译期间确定的异常,只有在程序运行时才能明确的异常
比如Integer.parseInt函数,由于不确定传入的值是不是有效的数值,这个数值只有在运行中才会被明确,所以它是一个RuntimeException