Java的异常Exception----(最简单明了的总结)

1、什么是异常?

       程序开发和运行过程中会出现编译错误运行错误。编译错误容易被发现并排除,而运行错误(逻辑错误异常)很难预料。因此为了程序的稳定性和可靠性,就需要对程序异常处理和保护。
异常( Exception ):正常程序流程所不能处理或者没有处理的异常情况或异常事件
2、为什么要使用异常?
       传统的程序设计中会像下面的伪代码形式来处理错误:
      
                执行一个任务

          if   前一个任务未能正确执行

               执行错误处理

              执行下一个任务

         if   前一个任务未能正确执行

             执行错误处理

而这样只会让程序更加复杂!
3、异常的分类
          <1>根据异常在编译时是否被检测来分,异常可以分为两类:受检异常(CheckedException)非受检异常(UncheckedException)
          <2>非受检异常不能在编译时检测到非受检异常包括运行时异常(RuntimeException)和错误(Error)
 错误指的是致命性错误,常常无法处理。
          <3>根据异常的严重性,可以分为可以处理的异常错误异常
           异常以类的形式封装。程序可以处理的异常对应的类是java.lang.Exception及其子类。
           运行时异常对应的类是java.lang.RuntimeException
           错误异常对应的类是java.lang.Error
4、异常相关类的继承图
Java的异常Exception----(最简单明了的总结)_第1张图片
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处理,程序一旦遇到该异常,就会打印该异常的跟踪栈信息
//并结束程序


7、自定义异常
     
public class NewException extends Exception{
    //自定义的异常类    
    public NewException (msg){
        super(msg);
    }
}
//第一种用法:直接在一个判断语句下throw该异常
public class Test{
    public static void main(String[] args){
        if(条件){
           throw new NewException("我是抛出的新异常!"); 
        }
    }
}
//第二种:throws之后,再try——catch
public static void test()throws NewException{
    if(条件){
        throw new NewException("我是抛出的新异常!"); 
    }
}
public class Test{
    public static void main(String[] args){
        try{
            test();
        }catch(NewException e){
            System.out,println(e.getMessage());
        }
    }
}

---------本人为小白,欢迎评论指正错误,一起进步!
      



你可能感兴趣的:(Java)