`
zy19982004
  • 浏览: 661863 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:251950
社区版块
存档分类
最新评论

Java异常学习二:异常栈轨迹

 
阅读更多

一.打印栈轨迹的方法

  1. 主动调用Throwable对象的printStackTrace()=printStackTrace(System.err),printStackTrace(PrintStream),printStackTrace(PrintWriter)中的其中一个。
  2. 如果一个Exception没有被处理,直接在main方法后面throws,程序退出前将调用异常的printStackTrace()方法,最终是Exception in thread "main" + printStackTrace()

二.栈轨迹

  1. 栈轨迹显示了"把你带到异常抛出的地点"。
  2. 上面三个方法调用this.getOurStackTrace()获得栈轨迹;同时Throwable提供了public的方法getStackTrace()获得栈轨迹(实际返回getOurStackTrace().clone())。
  3. getStackTrace()将返回栈轨迹中元素所构成的数组,其中每一个元素都是一帧。元素0是栈顶元素,栈顶元素为调用序列里的最后一个方法,栈底元素是第一个方法。
    package com.jyz.study.jdk.exception;
    
    
    /**
     * 栈轨迹
     * @author JoyoungZhang@gmail.com
     *
     */
    public class StackTrace {
        
        public static void main(String[] args) {
    	test1();
        }
    
        private static void test1(){
    	test2();
        }
        
        private static void test2(){
    	test3();
        }
        
        private static void test3(){
    	throw new  NullPointerException("str is null");
        }
    
    }
     
    Exception in thread "main" java.lang.NullPointerException: str is null
    	at com.jyz.study.jdk.exception.StackTrace.test3(StackTrace.java:24)
    	at com.jyz.study.jdk.exception.StackTrace.test2(StackTrace.java:20)
    	at com.jyz.study.jdk.exception.StackTrace.test1(StackTrace.java:16)
    	at com.jyz.study.jdk.exception.StackTrace.main(StackTrace.java:12)
     

三.fillInStackTrace方法 

  1. native fillInStackTrace()方法将返回一个Throwable对象,它是通过把当前调用栈信息填入原来那个异常对象儿建立的,所以返回的还是原来的异常。
  2. 调用此方法的那一行将成为异常新的发生地,有关原来异常发生点的信息会丢失。它的效果等价于捕获一个异常后,重新抛出另外一种异常。两者不同的是,fillInStackTrace后的异常还是原来的异常(只是少了栈轨迹而已);而重新抛出一个异常的话,完全跟原异常信息无关了(当然也没有栈轨迹)。
    package com.jyz.study.jdk.exception;
    
    
    /**
     * 栈轨迹
     * fillInStackTrace
     * @author JoyoungZhang@gmail.com
     *
     */
    public class FillInStackTrace {
        
        public static void main(String[] args) throws Exception {
    	test1();
        }
    
        private static void test1() throws Exception{
    	try{
    	    test2();
    	}catch(NullPointerException ex){
    //1	    throw (Exception)ex.fillInStackTrace();
    //2	    throw new Exception();
    	}
        }
        
        private static void test2(){
    	test3();
        }
        
        private static void test3(){
    	throw new  NullPointerException("str is null");
        }
    
    }
  3. 1和2的异常栈信息均如图。不同的是this本身的信息,控制台第一行打印的就是this。
    1的栈信息
    Exception in thread "main" java.lang.NullPointerException: str is null
    	at com.jyz.study.jdk.exception.FillInStackTrace.test1(FillInStackTrace.java:20)
    	at com.jyz.study.jdk.exception.FillInStackTrace.main(FillInStackTrace.java:13)
    
    2的栈信息
    Exception in thread "main" java.lang.Exception
    	at com.jyz.study.jdk.exception.FillInStackTrace.test1(FillInStackTrace.java:21)
    	at com.jyz.study.jdk.exception.FillInStackTrace.main(FillInStackTrace.java:13)
    
     

 

分享到:
评论

相关推荐

    解析Java异常的栈轨迹及其相关方法

    【Java异常栈轨迹详解】 Java异常的栈轨迹是调试程序时非常重要的工具,它记录了异常发生时程序执行的顺序,帮助开发者追踪问题源头。本文将深入解析Java异常的栈轨迹及其相关方法,主要包括`printStackTrace()`和`...

    浅析java异常栈

    3. 异常栈轨迹:异常栈轨迹是指Throwable 对象抛出过程中所经历的多个方法调用层。 Java 获取异常堆栈信息的方法有两种: 方法一:使用printStackTrace() 方法 printStackTrace() 方法是Throwable 对象的一个方法...

    Java 异常的栈轨迹(Stack Trace)详解及实例代码

    Java 异常的栈轨迹详解及实例代码 Java 异常的栈轨迹(Stack Trace)是指在 Java 程序中抛出异常时,记录下异常的发生位置和调用过程的信息。这种信息对于调试和排查问题非常重要。 1.printStackTrace() 方法 ...

    JAVA基础--如何通过异常处理错误

    在main方法中,我们使用try-catch块来捕获这个异常,并使用printStackTrace()方法来输出异常的栈轨迹。 二、捕获异常 在JAVA中,有两种方式来捕获异常:try-catch块和throw关键字。 1. try块 try块是用于捕获...

    CoreJava学习笔记

    Java异常类的层次结构以Throwable类为根节点,向下分支为Error和Exception两个子类。 **一些未检查的异常:** 未检查的异常通常是由于程序错误引起的,例如NullPointerException。 **写你自己的异常:** 可以...

    计算机等级考试二级java模拟题四.pdf

    以上知识点涵盖了Java异常处理、JVM虚拟机、日期和时间处理、面向对象编程(继承、构造函数)、数组操作以及接口的使用。这些都是Java编程的基础知识,对于通过计算机等级考试二级Java模拟题至关重要。在实际编程中...

    Android捕获异常并实现文件的上传

    // 这里添加你需要上传的异常数据字段,如:异常栈轨迹、设备信息等 } ``` 然后,初始化Retrofit实例并创建API服务对象: ```java Retrofit retrofit = new Retrofit.Builder() .baseUrl(...

    Java项目:16款java游戏(java+swing)

    通过学习和分析这些游戏源码,开发者可以加深对Java语言和Swing库的理解,提高编程技巧,同时也能了解到如何将编程理论应用于实际项目中。这些游戏虽然简单,但涵盖了丰富的编程概念,对于初学者来说是极好的实践...

    深入java虚拟机(第二版)

    10. **异常处理与栈轨迹**:了解Java异常处理机制,以及如何通过堆栈轨迹分析程序运行状态。 11. **JVM诊断工具**:介绍JDK提供的JConsole、VisualVM、JMX、JInfo、JMap、JStack等工具,用于监控和分析JVM的状态。 ...

    java源码 java 桌球小游戏仅一份代码 2018127

    "java 源码 代码"这三个标签进一步确认了这个项目是关于Java编程语言的源代码,暗示我们可以从中学习到Java编程技巧、游戏逻辑实现以及可能的基础图形界面设计。 【文件名解析】 "mygame"是压缩包内的文件名,通常...

    06JVM是如何处理异常的1

    异常实例的创建伴随着栈轨迹的生成,这是一个详细记录异常发生时调用堆栈信息的过程,包括方法名、类名、文件名和行号。这个过程在性能上相对昂贵,因此不建议缓存异常实例以重用,因为这可能会导致错误的异常定位。...

    深入JAVA虚拟机.rar

    - **异常栈轨迹**:记录异常发生时的调用栈信息,便于调试。 8. **类文件结构** - **魔数**:标识文件是否为JAVA字节码文件。 - **常量池**:存储类信息、字符串、字段、方法等的引用。 - **访问标志**:标识类...

    坦克大战java课设源码

    【坦克大战Java课设源码】是一份基于Java编程语言实现的经典游戏——坦克大战的完整代码,适合计算机科学与技术专业学生或Java初学者进行学习和研究。这个游戏项目旨在帮助学生掌握Java编程基础,理解面向对象编程...

    java java查bug 查bug bug 查错 源码

    4. **异常处理**:Java异常处理机制是查找错误的重要线索。捕获并打印堆栈轨迹可以帮助我们了解异常发生的具体位置和原因。 5. **单元测试**:JUnit和其他测试框架如TestNG可以编写自动化测试用例,确保代码在修改...

    JVM面试题 PDD 下载

    8. **异常处理**:对异常处理的理解,如如何合理抛出和捕获异常,理解异常栈轨迹。 9. **线程与并发**:JVM中的线程模型,同步原语(如synchronized、volatile),线程池的使用等。 10. **类文件结构**:了解字节...

    Java植物大战僵尸源代码下载

    通过学习和分析这个游戏的源代码,开发者不仅可以提升Java编程技能,还能学习到游戏开发的全过程,包括设计、实现、测试和优化。这是一个绝佳的学习实践项目,对于想要进入游戏开发领域的程序员来说,是非常有价值的...

    JAVA面试宝典.zip

    Java面试宝典是每个Java开发者在求职或晋升时不可或缺的参考资料。这份压缩包"JAVA面试宝典.zip"包含了2020年最新的程序员面试必备知识,涵盖了多个热门技术领域,如Java、Redis、SpringBoot、Netty、虚拟机、前端、...

    Java Thread Dumps 分析

    Java线程转储(Thread Dump)是Java应用程序在特定时间点对所有运行线程的状态快照,它包含每个线程的详细信息,如线程ID、线程名称、线程状态以及栈轨迹。分析Java线程转储对于诊断Java应用程序中的性能问题、死锁...

    捕鱼达人 java 代码

    5. **数据结构**:游戏中可能使用数组、列表、队列、栈等数据结构来存储游戏状态,如鱼群的位置、炮弹的轨迹等。合理选择和使用数据结构能有效提高程序效率。 6. **算法应用**:比如,碰撞检测可能需要使用矩形碰撞...

    exception 需要解决的问题

    例如,异常的栈轨迹可以帮助定位问题发生的精确位置,而自定义异常则可以提供更丰富的错误信息,便于调试。 工具在异常处理中也发挥着关键作用。例如,IDE如IntelliJ IDEA和Eclipse提供了强大的调试工具,能够显示...

Global site tag (gtag.js) - Google Analytics