【问题标题】:How to provoke an error in my program to display the printstacktrace如何在我的程序中引发错误以显示 printstacktrace
【发布时间】:2019-08-14 21:25:40
【问题描述】:

如何引发错误,以便在我运行程序时显示exc.printStackTrace(System.out);

public String getName(){
    try {
        if(haveName()) return Name;
        else {
            throw new CorrectNameException("no name");
        }
    } catch (ExistException e) {
        return e.getExc();
    } catch (CorrectNameException exc) {
        exc.printStackTrace(System.out);
        return "nameless";
    }
}

【问题讨论】:

  • 你有什么问题?
  • 没事,我的教授让我在程序中引发错误,以便在程序执行时将附加程序的堆栈跟踪打印在控制台上
  • 您需要了解自己的代码。捕获到 CorrectNameException 时会打印堆栈跟踪。如果执行 else 块,则抛出此类异常然后捕获。如果 haveName() 返回 false,则执行 else 块。因此,要打印堆栈跟踪,haveName() 必须返回 false。你还没有发布它的代码,所以我们不知道它什么时候返回false,什么时候返回true。阅读其代码,并进行逻辑推理。
  • 虽然其中有某种有趣的讽刺意味,但CorrectNameException 这个名字让我不寒而栗。听起来像EverythingIsFineException,通常情况是一切都很好......但是,只是一个评论:在调试的痛苦中,我认为偶尔抛出一个@是合理的987654326@ any在代码中的哪里,只是为了查看调用来自哪里(尽管通常,当您添加断点时,调试器会向您显示)

标签: java printstacktrace


【解决方案1】:

使haveName() 返回假。很简单。

【讨论】:

  • 好吧,我不太聪明,我该怎么做?像这样“ if(haveName()) return false;”
  • public boolean haveName(){return false;}?
【解决方案2】:

根据您发布的问题,答案将是“当 haveName() 方法返回 false”

但是如果您解释完整的用例,我们可以稍微纠正您的代码。据我了解,您的方法是检查两件事。

  • 名字存在与否?
  • 名称是否有效?

所以我对您的查询有几个问题:

  • 方法 haveName() 是否同时检查存在和有效性? (或只为存在)。
  • 您是否在 haveName() 方法中抛出任何异常?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2015-04-24
    • 1970-01-01
    • 2019-02-22
    • 2011-11-05
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多