抛出异常有三种形式,一是throw,一个throws,还有一种系统自动抛异常。
一:系统自动抛出异常:
当语句发生一些逻辑错误,语义错误时,或类型转换错误时,系统就会自动抛出异常。
public static void main(String[] args) {
int a = 5, b =0;
System.out.println(5/b);
//除数不能为0
此时系统会自动抛出ArithmeticException异常
二:throw
throw是语句抛出一个异常,一般是在代码块的内部,当程序出现某种逻辑错误时由程序员主动抛出某种特定类型的异常。
public static void main(String[] args) {
String s = "abc";
if(s.equals("abc")) {
throw new NumberFormatException();
} else {
System.out.println(s);
}
}
在运行时,系统会抛出异常,是代码决定的主动抛出的
三:throws
throws 是方法可能抛出异常的声明。
throws:用在声明方法时,表示该方法可能要抛出异常,交给上层调用它的方法程序处理。
public void function() throws Exception{......}
public class testThrows {
public static void function() throws NumberFormatException {
String s = "abc";
System.out.println(Double.parseDouble(s));
}
public static void main(String[] args) {
try {
function();
} catch (NumberFormatException e) {
System.err.println("非数据类型不能强制类型转换。");
}
}
}
四:关键字throw和throws的区别
throw:
1)throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。
2)throw 是具体向外抛出异常的动作,所以它抛出的一定是一个异常实例,执行throw一定是抛出了某种异常。
throws:
1)throws 语句时用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。
2)throws 主要是声明这个方法会抛出某种类型的异常,让它的调用者要知道需要捕获的异常的类型。
3)throws 表示表现出现异常的一种可能性,并不一定会发生这种异常
五、编程习惯
- 在写程序时,对可能会出现异常的部分通常要用try{…}catch{…}去捕捉它并对它进行处理;
- 用try{…}catch{…}捕捉了异常之后一定要对在catch{…}中对其进行处理,那怕是最简单的一句输出语句,或栈输入e.printStackTrace();
- 如果是捕捉IO输入输出流中的异常,一定要在try{…}catch{…}后加finally{…}把输入输出流关闭;
- 如果在函数体内用throw抛出了某种异常,最好要在函数名中加throws抛异常声明,然后交给调用它的上层函数进行处理。
参考原文链接:https://blog.csdn.net/hjfcgt123/article/details/53349275