java堆栈信息打印
2014-05-10 10:05
337 查看
对于java堆栈信息的打印,对于我们调试代码解决问题是非常有帮助的。java的异常机制会让我们很快的找到错误的位置。例如我的问题如下所示。
启动tomcat出现如下问题:
![](http://img.blog.csdn.net/20140510092055671?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXN1bW1lcmZvcmV2ZXI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这只是堆栈中打印出问题的一小部分,还有很多的Exception,那是从哪一个Exception看起呢?而对于每个Exception打印的堆栈信息又是如何打印的?
对于Exception,会从底层到上层抛出,比如我的项目中用的是spirngMVC spring SpringJAP(在Dao层),如果Dao层出现错误,打印堆栈信息是从SpringMVC controller一直到底层Dao层。
而对于每个Exception打印,是从底层到高层。例如我的A、B、C、D类,四个类,分别A调用B,B调用C的方法,C调用D的方法,并且D抛出异常到C,C到B,B到A,依次类推,直到A捕获异常。代码如下所示:
D类
C类
B类
A类
这样我们运行A类,看到控制台打印的堆栈信息如下所示。
![](http://img.blog.csdn.net/20140510093720984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXN1bW1lcmZvcmV2ZXI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这很明显,我们可以看到对于Exception来说,打印堆栈信息时从底层到高层的。
java中的异常我们是写在try....catch中的catch块去处理的,底层一般采用抛出异常的方式,这样在界面层就能捕捉到异常,如果我们在界面层也没有对异常进行处理,那么异常就会交给jvm来处理。我们也可以采用声明式异常来简化。
我们可以根据不同的异常分类,来确定转向到不同的页面,我们在web.xml中配置如下:
我们可以配置不同的异常类转到不同的页面,我们也可以配置错误号(error-code)。
能更好的利用工具和使用工具会提高我们的效率,好的习惯优于一切,学习的不是错误,学习的是别人解决问题的思路,素质和品质,改变吧。
启动tomcat出现如下问题:
这只是堆栈中打印出问题的一小部分,还有很多的Exception,那是从哪一个Exception看起呢?而对于每个Exception打印的堆栈信息又是如何打印的?
对于Exception,会从底层到上层抛出,比如我的项目中用的是spirngMVC spring SpringJAP(在Dao层),如果Dao层出现错误,打印堆栈信息是从SpringMVC controller一直到底层Dao层。
而对于每个Exception打印,是从底层到高层。例如我的A、B、C、D类,四个类,分别A调用B,B调用C的方法,C调用D的方法,并且D抛出异常到C,C到B,B到A,依次类推,直到A捕获异常。代码如下所示:
D类
public class D { public void eat() throws Exception{ throw new Exception("这是D类的异常"); } }
C类
public class C { public void eatD() throws Exception{ D d = new D(); d.eat(); } }
B类
public class B { public void eatC() throws Exception{ C c = new C(); c.eatD(); } }
A类
public class A { /** * @param args */ public static void main(String[] args) { B b = new B(); try { b.eatC(); } catch (Exception e) { e.printStackTrace(); } } }
这样我们运行A类,看到控制台打印的堆栈信息如下所示。
这很明显,我们可以看到对于Exception来说,打印堆栈信息时从底层到高层的。
java中的异常我们是写在try....catch中的catch块去处理的,底层一般采用抛出异常的方式,这样在界面层就能捕捉到异常,如果我们在界面层也没有对异常进行处理,那么异常就会交给jvm来处理。我们也可以采用声明式异常来简化。
我们可以根据不同的异常分类,来确定转向到不同的页面,我们在web.xml中配置如下:
<error-page> <exception-type>java.lang.Throwable</exception-type> <location>/WEB-INF/views/error/500.jsp</location> </error-page> <error-page> <exception-type>java.lang.IllegalAccessException</exception-type> <location>/WEB-INF/views/error/404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/WEB-INF/views/error/500.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/WEB-INF/views/error/404.jsp</location> </error-page>
我们可以配置不同的异常类转到不同的页面,我们也可以配置错误号(error-code)。
能更好的利用工具和使用工具会提高我们的效率,好的习惯优于一切,学习的不是错误,学习的是别人解决问题的思路,素质和品质,改变吧。
相关文章推荐
- java中的class对象
- spring框架整合使用定时任务框架java quartz的示例代码配置
- Java笔试题解析(一)
- windows eclipse运行mapreduce遇到权限问题该如何解决
- java 求First集和Follow集
- java策略设计模式
- 青蛙跳台阶解法 时间复杂度O(n) 空间复杂度O(1)
- Java中x+=y和x=x+y两种实现的区别
- java:打包
- Java中获取系统属性
- Myeclipse导入不了自己建的包
- java的url有中文参数导致乱码
- POJ-蚂蚁行军问题 1852
- Graphics
- java内存泄漏常见情况
- Java对象的强、软、弱和虚引用
- Java数组定义的方法
- Heritrix在eclipse中的配置过程(1.14.4版本)
- 修改eclipse背景颜色
- JDK动态代理