JAVA基础 之 异常

来源:互联网 发布:淘宝自动回复优美语句 编辑:程序博客网 时间:2024/04/30 01:57

讲述:

    1.五个关键字

       1.try:尝试捕获异常,具体的下面讲述

       2.catch:当try捕获到异常了,系统会自动生成一个异常信息,这个异常信息就给catch,形象的说我抓住了这个异常。

       3.throw:主动的抛出一个异常

          情况一:我发现了一个我处理不了的 并且会导致我程序不正常运行的错误,于是我将这个异常抛出去了。(抛给谁了?这个视情况而定)

          情况二:我发现了一个不太对的地方会影响我今后的程序运行,为了避免更大的错误产生,我先主动的提出(抛出)这个“问题”

        4.throws:方法声明 会抛出这样的异常,用于自定义异常。(初学者 可以暂时绕过)

        5.finally:

           无论是否发生异常,程序必须执行的代码块。例如:经典的关闭数据库连接例子。多用于执行清理工作。

           finally看似很“权威”(必须执行),但是System.exit(1);会让它丧失这个权威性。

    2.try+catch

       1.联合出击保证程序正常运行。

       2.理解:

          我们希望写出这样的程序:if(程序正常){我的操作} else{处理不正常}

          但是这个程序正常太泛泛了 我们没办法定义它或者枚举它,于是我们用try去监视我们的操作是否正常,

          当他不正常的时候,我们抓住这个不正常的情况 处理它。

          try-catch 就是在做这么一件有意义的事。

    3.注意(新手看不懂可以先绕过):

       1.catch可以有多个,谁能抓住谁抓,抓不住就让别人去抓,但是这个是需要层级的(范围小的先catch)

       2.try块中的变量只能在try中使用。

       3.java7中提供了一次catch多个异常的方式,每个异常使用|分割(注意只有在jdk7下才能使用)

       4.java7下的AutoCloseable接口可以使得程序简化有兴趣可自己百度或者查看java api

    4.Exception的几个方法(见例子)

    5.自定义一个异常:

       1.上文说过不肯能枚举所有的异常情况,即便枚举了,但是你也不能冲破认知差异性。(在大象的世界里人类就是异类)

       2.定义一个拥有自己业务逻辑的异常类

       3.实现方式:继承Exception 或者他的子类

 

Java代码 复制代码 收藏代码
  1. package com.cxy.exception;   
  2.   
  3. import java.io.FileInputStream;   
  4. import java.io.FileNotFoundException;   
  5. import java.util.List;   
  6.   
  7. /**  
  8.  * @author cxy  
  9.  */  
  10. public class ExceptionTest   
  11. {   
  12.     public static void main(String[] args)   
  13.     {   
  14.         try  
  15.         {   
  16.             List l=null;   
  17.             l.get(0);   
  18.         }catch(NullPointerException|ArrayIndexOutOfBoundsException e)  //注意:这里只能java7用,如果你不是java7请去掉一个异常  
  19.         {   
  20.             System.out.println("我抓住了一个异常");   
  21.             System.out.println("异常信息:"+e.getMessage());   
  22.             e.printStackTrace(); //打印异常的跟踪栈信息   
  23.         }   
  24.         System.out.println("=======================");   
  25.            
  26.         /* throw  
  27.          * 用途:  
  28.          *   1.抛出一个我处理不了的异常       
  29.          *   2.提前发现问题避免更大的问题发生(实践中得来)  
  30.          *     一个人要盖别墅,后经发现他选址在太平洋中间,于是我抛出了这个问题,避免后面砂石料,工程设计都做好了 发现根本没法建。 
  31.          * 效果:导致程序或者方法终止(如果不catch这个异常的话)  
  32.          * */  
  33.         try  
  34.         {   
  35.             throw new Exception("没事抛着玩"); //主动抛出一个异常  
  36.         } catch (Exception e)   
  37.         {   
  38.             e.printStackTrace();   
  39.         }   
  40.         System.out.println("=======================");   
  41.            
  42.         //throws的用法   
  43.         try  
  44.         {   
  45.             test();   
  46.         } catch (NullPointerException e)   
  47.         {   
  48.             System.out.println("catch住了test方法抛出的异常");   
  49.         }   
  50.         System.out.println("=======================");   
  51.            
  52.         //finally用法   
  53.         FileInputStream fis=null;  //这是一个输入流 相关的知识请见后续文章  
  54.         try  
  55.         {   
  56.             /* 这里会出现找不到cxy.txt这个文件错误  
  57.              * 这里有个问题 无论异常产生与否 我们都需要将fis关闭  
  58.              * java7之前 我们都是使用finally来处理这类的问题,无论是否发生异常都要执行的操作 
  59.              * java7开始,AutoCloseable接口可以不必使用finally来处理这个问题(如果有时间我会写一篇相关的文章) 
  60.              */  
  61.             fis = new FileInputStream("cxy.txt");   
  62.         } catch (FileNotFoundException e1)   
  63.         {   
  64.             e1.printStackTrace();    
  65.         }finally  
  66.         {   
  67.             try  
  68.             {   
  69.                 fis.close();   
  70.             } catch (Exception e)   
  71.             {   
  72.                 //呵呵 包括这里都套着一个try,因为 程序怕遇到fis是null 或者 io异常  
  73.                 e.printStackTrace();   
  74.             }   
  75.         }   
  76.         System.out.println("=======================");   
  77.            
  78.         //自定义异常类   
  79.         try  
  80.         {   
  81.             throw new MyException("中文异常信息");   
  82.         } catch (MyException e)   
  83.         {   
  84.             e.printChineseMsg();   
  85.         }   
  86.            
  87.         System.out.println("虽然有很多异常,但是我正常完结了~");   
  88.     }   
  89.        
  90.     /** 提前声明 我这个方法可能会抛出什么样的异常,请调用者自己处理  
  91.      */  
  92.     public static void test() throws NullPointerException   
  93.     {   
  94.         throw new NullPointerException(); //抛出一个null异常  
  95.     }   
  96. }   
  97.   
  98. //自己定义的异常   
  99. class MyException extends Exception   
  100. {   
  101.     public MyException(){}   
  102.     public MyException(String msg)   
  103.     {   
  104.         super(msg);   
  105.         //当然 这里你可以加一些日志的操作   
  106.     }   
  107.        
  108.     /**  
  109.      * 我们期望的能看懂的中文异常信息  
  110.      */  
  111.     public void printChineseMsg()   
  112.     {   
  113.         System.out.println("异常信息:"+this.getMessage());   
  114.     }   
  115. }  
原创粉丝点击