异常产生之后会导致程序中断,异常的处理是为了在发现异常之后程序能够正常的执行完毕。
异常处理关键字: try catch finally
注意:
1.finally不管有没有异常最后都会执行。
2.如果异常没有进行正确的捕获,程序也会导致中断(finally依然执行)
异常处理流程
1.一旦程序执行中产生了异常之后,将自动进行指定类型的异常类对象实例化处理。
2.如果没有提供异常处理的支持,则会采用JVM默认异常处理方式,首先进行异常信息打印,然后程序中断处理
3.如果有异常处理,被try语句捕获。
4.捕获到异常之后,与catch进行匹配,匹配运行catch的异常处理,如果不匹配则没有任何catch处理。
5.最终执行finally代码,执行完之后会进一步判断当前异常是否处理过,如果处理过继续执行其他代码,如果没有处理,由JVM进行默认处理。
在进行多异常同时处理的时候,要把捕获范围大的异常放在捕获范围小的异常之后。
throws
强制调用处进行异常处理。
package com.test;
class test{
public static void printString() throws Exception{
System.out.println("hello");
}
}
public class Demo {
public static void main(String[] args) {
try {
test.printString();//由于方法加上了throws,调用时必须加上try-catch,否则会报错。
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*=========================================================================================*/
class test{
public static void printString() throws Exception{
System.out.println("hello");
}
}
public class Demo {
public static void main(String[] args) throws Exception {//免去了try-catch
test.printString();
}
}
throw关键字
手工进行异常抛出。
实例:
package com.test;
class MyMath{
public static int div(int x,int y) throws Exception{
int temp = 0;
System.out.println("除法计算开始");//网络连接开始
try {
temp = x/y;
}
catch(Exception e) {
throw e;
}finally {
System.out.println("除法计算结束");//网络连接结束
}
return temp;
}
}
public class Demo {
public static void main(String[] args) {
try {
MyMath.div(10, 0);
}catch(Exception e) {
e.printStackTrace();
}
}
}
RuntimeException
某些异常类尽管设置了throws关键字,但是使用时可以不进行强制异常处理。例如NumberFormatException和ArithmeticException。这些类的共同特点是继承自java.lang.RuntimeException。