异常处理
Error
定义:JVM无法解决的严重问题
如:JVM系统内部错误,资源耗尽
- 栈溢出:java.lang.StackOverFlowError
- 堆溢出:java.lang.OutOfMemeryError
Exception
定义:其他因编程错误或偶然的外在因素导致的
编译时异常:
- IOException
- FileNotFoundException
运行时异常:
- AtithmeticException
- InputMismatchException
- NumberFormatException
- ClassCastException
- ArrayIndexOutOfBoundsException
- NullPointerException
抓抛模型
1.“抛”过程
两种方式:系统生成;手动生成throw new Exception( )
程序一旦出现异常,会在异常代码处生成一个异常类的对象,并将此对象抛出。一旦抛出对象后,其后的代码就不再执行
2.“抓”过程
异常的两种处理方式:
- try-catch-finally(处理)
- throws 异常类型(甩给上一级)
try-catch-finally
public class ExceptionTest{
public void test(){
String str = "abc";
try{
//可能出现异常的语句
int num = Integer.parseInt(str);
}catch(NumberFormatException e){
//处理方式1
e.printStackTrace();
}catch(Exception e){
//处理方式2,不处理,已执行上述异常处理语句,已跳出try-catch
e.printStackTrace();
}
finally{
//必须执行的语句
}
}
}
说明:
- catch中的类型如果存在子父类关系,则需要子类一定声明在父类上面,否则会报错
- 常用的异常对象处理方式:e.getMessage() 以及 e.printStackTrace()
- finally的使用场景:数据库连接,输入输出流,网络编程等
throw&throws
- throw:表示抛出一个异常类的对象,生成异常对象的过程,声明在方法体内
- throws:属于异常处理的一种方式,声明在方法的声明处
class Student{
private int id;
//异常处理的方式之一:throws
public void regist(int id) throws Exception {
if(id>0) {
this.id = id;
}else {
//手动抛出异常
throw new Exception("invalid input");
}
}
}