当前位置: 首页 > 面试题库 >

为什么Throwable.fillInStackTrace()方法是公共的?为什么有人使用它?

孙经艺
2023-03-14
问题内容

我很好奇,为什么是方法fillInStackTracejava.lang.Throwable公开?

此方法从调用它的位置替换原始堆栈跟踪,从而删除了定位异常所需的信息。它可以用于混淆,但无需付出太多努力,因为新的堆栈跟踪将直接指向混淆代码。更好的方法是简单地隐藏异常或抛出新异常。

但是我找不到在现存的上调用此方法的 合理 理由Throwable。所以问题是:为什么这种方法是公开的?后面有什么意义吗?


问题答案:

原因之一是性能。抛出和捕获异常很便宜;昂贵的部分是填充堆栈跟踪。如果您fillInStackTrace()不执行任何操作,则创建异常也很便宜。

对于廉价的异常,您可以将异常用于流控制,这可以使代码在某些情况下更易读。在实现需要更高级的流控制
JVM语言时,可以使用它们,并且在编写actors库时它们很有用。



 类似资料:
  • 问题内容: 并且它的jQuery特定表弟一直以Javascript代码弹出。 这些构造如何工作,它们可以解决什么问题? 实例赞赏 问题答案: 随着JavaScript框架的日益普及,该标志已在许多不同的场合使用。因此,为减轻可能的冲突,可以使用以下构造: 具体来说,这是一个 匿名 函数声明,该声明 立即 通过将主要jQuery对象作为参数来执行。在该函数内部,您可以用来引用该对象,而不必担心其他框

  • 问题内容: 当我用方法覆盖方法时,Java编译器不会抱怨。这里到底发生了什么?由于父方法的可见性较低,它是覆盖还是隐藏父方法? 问题答案: 子类始终可以扩大访问修饰符,因为它仍然是超类的有效替代。从Java规范中有关覆盖和隐藏的需求: 覆盖或隐藏方法的访问修饰符(第6.6节)必须至少提供与覆盖或隐藏方法相同的访问权限,如下所示: 如果覆盖或隐藏方法是公共的,则覆盖或隐藏方法必须是公共的;否则,将发

  • Java 对字段具有不同的访问级别: 由于封装的概念,我们总是尝试使用<code>private</code>修饰符,以及所需访问级别的getter和setter。这个答案显示了它的各种优点。既然getter和setter很酷,我们应该在什么时候选择<code>public/protected/default对象字段 到<代码>私有对象字段 澄清:我完全理解为什么以及什么是getter、sette

  • 问题内容: 我经常在PHP中看到包含include.inc文件的示例。.inc是什么意思?它的作用是什么?使用它的缺点和优点是什么? 问题答案: 它没有任何意义,只是一个文件扩展名。如果扩展名是.inc的文件被设计为包含在其他PHP文件中,这是某些人的惯例,但这只是惯例。 它确实存在一个可能的缺点,即通常没有将服务器配置为将.inc文件解析为php,因此,如果该文件位于您的Web根目录中,并且您的

  • 问题内容: 什么是反射,为什么有用? 我对Java特别感兴趣,但是我认为原理在任何语言中都是相同的。 问题答案: 名称反射用于描述能够检查同一系统(或本身)中的其他代码的代码。 例如,假设您在Java中有一个未知类型的对象,并且想在该对象上调用“ doSomething”方法(如果存在)。除非对象符合已知的接口,否则Java的静态类型化系统并不是真正为支持该类型而设计的,但是使用反射,您的代码可以

  • 换句话说,为什么重载解决先于访问控制?这很奇怪。你认为是一致的吗?我的代码工作了,然后我添加了一个方法,我的工作代码根本不编译。