java异常抛出机制。先来看几组示例:

1、

public class Test{
public static void main(String[] args){
try {
getAns();
}catch (Exception e){
System.out.println("123");
}
}
public static void getAns() throws NullPointerException{
try {
Integer n = 0;
Integer x = null;
Integer y = x/n;
}catch (Exception e){
e.printStackTrace();
}
}
}

结果:

java 合理利用Exception_java异常


说明是先走try()catch,如果没找到对应的,然后再走到throws。再来看一个例子

public class Test{
public static void main(String[] args){
try {
getAns();
}catch (NullPointerException e){
System.out.println("123");
}catch (Exception e){
System.out.println("456");
}
}
public static void getAns() throws NullPointerException{
try {
Integer n = 0;
Integer x = null;
Integer y = x/n;
}catch (ArithmeticException e){
e.printStackTrace();
}
}
}

结果是:

java 合理利用Exception_java异常_02


执行流程为:try catch,从上到下先找,如果再找throws。

2、局部异常化

public class Test{
public static void main(String[] args){
try {
getAns();
}catch (NullPointerException e){
System.out.println("123");
}catch (Exception e){
System.out.println("456");
}
}
public static void getAns() throws NullPointerException{
Integer n = 0;
Integer x = null;
int k = x/n;
try {
Integer y = x/n;
}catch (Exception e){
e.printStackTrace();
}
}
}

java 合理利用Exception_java异常_03


局部异常catch和全局异常throws可以进行共存。如果需要全局异常throws,但是又不希望某些局部异常被throws了,所以try catch一定要细化,而不是写一个函数从整体上框住。