异常的探索-Thinking in java

以前对异常一点也不陌生,但是看完Thinking In Java这一张厚才发现,异常其实是非常复杂的玩意,涉及到java内存的堆栈的查找,程序的中断等等,可见一斑,下面贴上代码,好好研究一下异常,可谓是JAVa的精华啊

    

  1. package com.bird.thinking;  
  2.   
  3. class MyException extends Exception {// 自己写的异常类,有两个构造方法  
  4.   
  5.     private static final long serialVersionUID = 1L;  
  6.   
  7.     public MyException() {  
  8.     }  
  9.   
  10.     public MyException(String msg) {  
  11.         super(msg);  
  12.     }  
  13. }  
  14.   
  15. public class FullConstructots {  
  16.   
  17.     /** 
  18.      * @PAT throws是用来声明一个方法可能抛出的所有异常信息 throw则是指抛出的一个具体的异常类型。 
  19.      *      通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。 
  20.      *      throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法; 
  21.      *      throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出。 
  22.      * @param args 
  23.      * @author bird 
  24.      */  
  25.     public static void f() throws MyException {//调用不带参数的异常构造函数  
  26.         System.out.println("Throwing MyException from f()");  
  27.         throw new MyException();  
  28.     }  
  29.       
  30.     public static void g() throws MyException{//调用带参数的异常构造函数  
  31.         System.out.println("Throws MyEception from g()");  
  32.         throw new MyException("OH My God in g()");  
  33.     }  
  34.   
  35.     public static void main(String[] args) {  
  36.         try{  
  37.             f();  
  38.         }catch(MyException e){  
  39.             e.printStackTrace(System.out);  
  40.         }  
  41.           
  42.           
  43.         try{  
  44.             g();  
  45.         }catch(MyException e){  
  46.             e.printStackTrace(System.out);  
  47.         }  
  48.   
  49.     }  
  50.   
  51. }  

输出结果

  1. Throwing MyException from f()  
  2. com.bird.thinking.MyException  
  3.     at com.bird.thinking.FullConstructots.f(FullConstructots.java:27)  
  4.     at com.bird.thinking.FullConstructots.main(FullConstructots.java:37)  
  5. Throws MyEception from g()  
  6. com.bird.thinking.MyException: OH My God in g()  
  7.     at com.bird.thinking.FullConstructots.g(FullConstructots.java:32)  
  8.     at com.bird.thinking.FullConstructots.main(FullConstructots.java:44)<span style="color:#ff0000;">  
  9. </span>  

下面的是将异常记录到日志中的更加正规的方法汇总

  1. package com.bird.thinking;  
  2.   
  3. import java.io.PrintWriter;  
  4. import java.io.StringWriter;  
  5. import java.util.logging.Logger;  
  6.   
  7.   
  8. class LoggingExceptions extends Exception{//使用异常记录日志中,更加规范  
  9.       
  10.     private static final long serialVersionUID = 1L;  
  11.     private static Logger logger = Logger.getLogger("LoggingException");  
  12.     public LoggingExceptions(){  
  13.         StringWriter trace = new StringWriter();  
  14.         printStackTrace(new PrintWriter(trace));  
  15.         logger.severe(trace.toString());  
  16.     }  
  17. }  
  18. public class LoggingException {//使用java.util.logging工具将输出记录到日志中  
  19.   
  20.     /** 
  21.      * @param args 
  22.      * @author bird 
  23.      */  
  24.     public static void main(String[] args) {  
  25.         try{  
  26.             throw new LoggingExceptions();  
  27.         }catch(LoggingExceptions e){  
  28.             System.err.println("Caughy"+ e);//最好使用错误流去输出异常,这样也是更加规范  
  29.         }  
  30.     }  
  31.   
  32. }  

输出结果

  1. 2011-10-2 21:54:33 com.bird.thinking.LoggingExceptions <init>  
  2. 严重: com.bird.thinking.LoggingExceptions  
  3.     at com.bird.thinking.LoggingException.main(LoggingException.java:26)  
  4.   
  5. Caughycom.bird.thinking.LoggingExceptions  

看清楚,亲,是红色的哦,亲,不是我自己加的,在Eclipse中运行就是红色,好好看看错误输出流,呵呵。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值