1、什么是异常?
程序开发和运行过程中会出现编译错误和运行错误。编译错误容易被发现并排除,而运行错误(逻辑错误和异常)很难预料。因此为了程序的稳定性和可靠性,就需要对程序异常处理和保护。
异常( Exception ):正常程序流程所不能处理或者没有处理的异常情况或异常事件。
2、为什么要使用异常?
传统的程序设计中会像下面的伪代码形式来处理错误:
执行一个任务
if 前一个任务未能正确执行
执行错误处理
执行下一个任务
if 前一个任务未能正确执行
执行错误处理
而这样只会让程序更加复杂!
3、异常的分类
<1>根据异常在编译时是否被检测来分,异常可以分为两类:受检异常(CheckedException)与非受检异常(UncheckedException)。
<2>非受检异常不能在编译时检测到。非受检异常包括运行时异常(RuntimeException)和错误(Error)。
错误指的是致命性错误,常常无法处理。
<3>根据异常的严重性,可以分为可以处理的异常和错误异常。
异常以类的形式封装。程序可以处理的异常对应的类是java.lang.Exception及其子类。
运行时异常对应的类是java.lang.RuntimeException。
错误异常对应的类是java.lang.Error
5、异常的产生
<1>可以由 Java虚拟机在执行程序时自动发现并产生异常。
<2>也可以在程序中显式地生成异常,这种方法称为抛出异常(ThrowExceptions)。抛出异常采用throw语句,格式如下:
throw new ArithmeticException( );
或者:
ArithmeticException e=new ArithmeticException( );
throw e;
6、异常的处理
<1>捕捉异常(try_catch_finally语句)
try{
//可能产生异常的语句;
}catch(Exception1 e1){
//处理语句1;
}catch(Exception2 e2){
//处理语句2;
}finally{
//语句序列;
}
/*
1)catch语句块可以有多个;
2)catch语句块和finally语句块可以同时存在,也可以只有其一;
3)如果发生异常,则会跳转到捕捉对应异常的catch语句块,发生异常语句之后的语句序列不会被执行。
4)不管异常是否发生,finally语句块总是会被执行,除非碰到强制退出程序的System.exit(0)语句;
5)如果try语句块或catch语句块中有return语句,则会执行完finally语句块再执行返回。
*/
一个demo:
public class J_ExceptionCatch
{
public static void main(String args[ ])
{
try
{
System.out.println("try语句块");
throw new Exception( );
}
catch(Exception e)
{
System.err.println("catch语句块");
e.printStackTrace( );
}
finally
{
System.out.println("finally语句块");
} // try-catch-finally结构结束
} // 方法main结束
} // 类J_ExceptionCatch结束
/*运行流程:
1.try语句块捕捉throw的异常
2.跳转到相关的catch语句块
3.最后执行finally语句块的内容
*/
<2>throws抛出异常
public class Test{
public static void main(String[] args) throws IOException{
FileInputStream fis = new FileInputStream("a.txt");
}
}
//上面的main方法throws了IOException,声明但不去处理,所以在运行之后,
//该异常就会交给JVM处理,程序一旦遇到该异常,就会打印该异常的跟踪栈信息
//并结束程序
标签:语句,try,Exception,Java,错误,----,finally,catch,异常
来源: https://www.cnblogs.com/yds1314/p/13927654.html