以前对异常一点也不陌生,但是看完Thinking In Java这一张厚才发现,异常其实是非常复杂的玩意,涉及到java内存的堆栈的查找,程序的中断等等,可见一斑,下面贴上代码,好好研究一下异常,可谓是JAVa的精华啊
package com.bird.thinking;
class MyException extends Exception {// 自己写的异常类,有两个构造方法
private static final long serialVersionUID = 1L;
public MyException() {
}
public MyException(String msg) {
super(msg);
}
}
public class FullConstructots {
/**
* @PAT throws是用来声明一个方法可能抛出的所有异常信息 throw则是指抛出的一个具体的异常类型。
* 通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
* throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
* throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出。
* @param args
* @author bird
*/
public static void f() throws MyException {//调用不带参数的异常构造函数
System.out.println("Throwing MyException from f()");
throw new MyException();
}
public static void g() throws MyException{//调用带参数的异常构造函数
System.out.println("Throws MyEception from g()");
throw new MyException("OH My God in g()");
}
public static void main(String[] args) {
try{
f();
}catch(MyException e){
e.printStackTrace(System.out);
}
try{
g();
}catch(MyException e){
e.printStackTrace(System.out);
}
}
}
输出结果
Throwing MyException from f()
com.bird.thinking.MyException
at com.bird.thinking.FullConstructots.f(FullConstructots.java:27)
at com.bird.thinking.FullConstructots.main(FullConstructots.java:37)
Throws MyEception from g()
com.bird.thinking.MyException: OH My God in g()
at com.bird.thinking.FullConstructots.g(FullConstructots.java:32)
at com.bird.thinking.FullConstructots.main(FullConstructots.java:44)
下面的是将异常记录到日志中的更加正规的方法汇总
package com.bird.thinking;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.logging.Logger;
class LoggingExceptions extends Exception{//使用异常记录日志中,更加规范
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger("LoggingException");
public LoggingExceptions(){
StringWriter trace = new StringWriter();
printStackTrace(new PrintWriter(trace));
logger.severe(trace.toString());
}
}
public class LoggingException {//使用java.util.logging工具将输出记录到日志中
/**
* @param args
* @author bird
*/
public static void main(String[] args) {
try{
throw new LoggingExceptions();
}catch(LoggingExceptions e){
System.err.println("Caughy"+ e);//最好使用错误流去输出异常,这样也是更加规范
}
}
}
输出结果
2011-10-2 21:54:33 com.bird.thinking.LoggingExceptions <init>
严重: com.bird.thinking.LoggingExceptions
at com.bird.thinking.LoggingException.main(LoggingException.java:26)
Caughycom.bird.thinking.LoggingExceptions
看清楚,亲,是红色的哦,亲,不是我自己加的,在Eclipse中运行就是红色,好好看看错误输出流,呵呵。
分享到:
相关推荐
经典,电子书-Thinking In Java,快下吧!
Prentice Hall - Thinking in Java, 3rd Edition.zip
JAVA开发人员的圣经;从JAVA的基础语法到最高级特性(深入的面向对象概念,多线程,自动项目构建,单元测试和调试),本书都能逐步指导你轻松掌握.
Perfect for migrating to Java from a fellow object-oriented language (such as C++), the second edition of Thinking in Java continues the earlier version's thoughtful approach to learning Java inside ...
大象-Thinking in UML.pdf
thinking-in-java thinking-in-java
英文版Thinking in java Thinking in Java Fourth Edition Bruce Eckel President, MindView, Inc.
第四版-Thinking+In+Java-练习题答案
大象--Thinking in UML 配套光盘完整版part2
大象希形 写给读者的话 关于本书 如何阅读本书 光盘使用说明 第一部分 准备篇——需要了解 第1章 为什么需要UML 第2章 建模基础 第二部分 基础篇——在学习中思考 第3章 UML核心元素 第4章 UML核心视图 ...
Thinking in Java 4th Edition Annotated Solutions Guide!
Thinking in java 的源代码,编程习题的源代码
C++编程思想-Thinking in C++
Thinking In Java-Java 编程思想(中英文版 第四版) Thinking In Java-Java 编程思想(中英文版 第四版)
thinking-in-java.pdf
Thinking in Java 4Edition 练习题答案
这个是我花钱买的,现在献给大家......
经典的java编程书籍,中文版,翻译的很好,对我学编程帮助很大!
Thinking in java 电子书,经典java书籍
大象-Thinking in UML 很好的UML 教程