什么是异常:
程序运行时发生的不被期望的事件,阻止了程序的正常运行。
常见的程序错误可以分为三类:
编译错误:没有遵循Java语法规范出错。
运行时错误:程序在执行时出错。
逻辑错误:程序没有按照预期的逻辑执行。
java.long包中有一个java.long.Throwable类,这个类是java中所有错误和异常的超类,它有两个子类:Error类和Exception类。
- Error类中包含大量的子类,代表着程序无法处理的错误,比如OutOfMemoryError。
- Exception类也包含了大量的子类,代表着程序本身可以处理的错误,也就是异常,比如ArithmeticException。
Error类和Exception类中的RuntimeException类及其子类(例如:ArithmeticException)属于不可查异常,是编译器不要求强制处理的异常,不需要写try-catch语句。
除RuntimeException类及其子类之外的Exception类及其子类(例如:IOException)属于可查异常,是编译器要求必须处理的异常,必须要在方法里面捕获或者抛出,否则无法编译通过。
异常捕获:
有三个关键字:try,catch,finally。
try后面跟一个或多个catch块,或者一个finally块,或者两者的组合。
如果代码中没有进行异常捕获,则默认打印出异常堆栈。
try{
//可能出错的代码段。
}catch(/*要捕获的异常类型A*/){
//出现A类型异常后执行的代码。
}catch(/*要捕获的异常类型B*/){
//出现B类型异常后执行的代码。
}finally{
//不管是否出错都会执行的代码。
}
重要点:
public class T {
public static int divide(int num1, int num2){
try {
int result = num1/num2;
return result;//result = 5;
}catch (Exception e){
System.out.println("出异常");
}finally {
System.out.println("finally执⾏了");
return -2;
}
}
public static void main(String [] args) {
int result = divide(25, 5);
System.out.println(result);//-2
}
}
输出结果:-2
因为finally是一定会执行的代码,try语句执行到return的时候会停止执行return,而去执行finally语句,如果finally语句没有return语句就会继续执行try语句的return。