throws表示当前方法不处理异常,而是交给方法的调用出去处理;
throw表示直接抛出一个异常;
public class Demo1 {
/**
* 把异常向外面抛
* @throws NumberFormatException
*/
public static void testThrows()throws NumberFormatException{
String str="123a";
int a=Integer.parseInt(str);
System.out.println(a);
}
public static void main(String[] args) {
try{
testThrows();
System.out.println("here");
}catch(Exception e){
System.out.println("我们在这里处理异常");
e.printStackTrace();
}
System.out.println("I'm here");
}
}
这里我们直接把异常抛出了。
运行输出:
我们在这里处理异常
java.lang.NumberFormatException: For input string: "123a"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at com.java1234.chap04.sec03.Demo1.testThrows(Demo1.java:11)
at com.java1234.chap04.sec03.Demo1.main(Demo1.java:17)
I'm here
throw表示直接抛出一个异常;
我们可以根据业务在代码任何地方抛出异常:
package com.java1234.chap04.sec03;
public class Demo2 {
public static void testThrow(int a) throws Exception{
if(a==1){
// 直接抛出一个异常类
throw new Exception("有异常");
}
System.out.println(a);
}
public static void main(String[] args) {
try {
testThrow(1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行输出:
java.lang.Exception: 有异常
at com.java1234.chap04.sec03.Demo2.testThrow(Demo2.java:8)
at com.java1234.chap04.sec03.Demo2.main(Demo2.java:15)