【问题标题】:Java Constructor Call Being Ignored / No Error ThrownJava 构造函数调用被忽略/没有抛出错误
【发布时间】:2013-03-22 22:30:38
【问题描述】:

如果这在其他地方已经涵盖,我提前道歉,但所涉及的模糊/常用术语意味着我发现了很多不相关的点击,没有任何帮助。由于我的项目相当大,我认为提供 M(N)WE 对我来说是不合理的,所以我正在寻找关于还有什么要检查的想法。这是代码块:

try {
    myClassObject = new MyClass(string1, string2, string3, otherClassObject); (1)
    System.out.println("Test"); (2)
} catch (Exception e){ 
    System.out.println(e.getMessage() + " " + e.getStackTrace()); (3)
}

我的构造函数(1) 永远不会被调用。然而,(2) 和 (3) 都没有被调用(即测试字符串永远不会被打印,也不会打印异常)。根据我对 try-catch 块的理解,这应该是不可能的。

我使用 Eclipse 的调试模式并且能够越过那条线。所有 4 个对象都已定义并且可以很好地打印(所以这不是访问问题)。在调试模式下查看时,所有 4 个对象都有其预期值。但是,调试模式从 (1) 跳到我的代码的其余部分,从不点击 (2) 或 (3)。永远不会到达放置在 MyClass 的构造函数中的调试点。

我可以调用 MyClass 的默认构造函数来代替 4 参数构造函数,它的行为符合需要。然后,我可以在 (2) 之后复制/粘贴 4 参数构造函数的内容,并正确设置所有 4 个参数,并根据需要创建对象。显然这是一个可行的解决方法,但我找不到 4 参数构造函数失败的原因。

简而言之,我不知道这怎么可能,更不用说如何阻止它发生了。

编辑:我已经多次对代码执行了 clean -> build -> debug,所以我相当有信心这不是 .class 问题。以防万一我删除了.bin并刷新了,但没有效果。

【问题讨论】:

  • 我假设您调试了一个与您的源不同步的 .class 文件(字节码)。手动删除bin,按F5。
  • 尝试创建新项目然后尝试调试它。可能有缓存值导致文件不同步
  • 我同意之前的评论。您可以使用 Eclipse 菜单中的Project / Clean...
  • 我们是计算机工程师,遇到紧急情况不要犹豫使用“重启”
  • 剩下的可能性是 MyClass 的构造函数捕获另一个异常或抛出另一个与 Exception 不同的异常。

标签: java constructor try-catch


【解决方案1】:

会不会有一个错误没有实现 Throwable 并因此无法被捕获?你在构造函数中做什么?例如 ChuckNorris 例外 :) Uncatchable ChuckNorrisException

【讨论】:

  • 创建一个新项目修复了它。不过,作为参考,我的构造函数只调用了 4 个集合,每个参数一个。然而,即使它抛出了一个错误,我认为调试模式仍然允许我单步执行并看到正在抛出的错误。
猜你喜欢
  • 1970-01-01
  • 2020-11-07
  • 2015-04-26
  • 2016-07-12
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
相关资源
最近更新 更多