是否存在可以证明创建异常时可以使用已检查异常和未经检查的异常的情况?然后可以相互测量速度和性能
答案 0 :(得分:0)
从性能的角度来看,构建异常的堆栈跟踪无论如何都是生成异常时的最长操作(details)。
经过检查和未经检查的异常仅在编译时产生差异。 Java编译器强制您捕获已检查的异常或在方法签名中声明它们。它本来应该提高程序安全性,但大多数意见似乎是它不值得它产生的设计问题。
甚至还有Lomboks“神奇的”@SneakyThrows注释来克服这种编译时检查。在JVM(类文件)级别上,无论方法的throws子句如何,都可以抛出所有异常(无论是否检查),这就是为什么这样做的原因。
答案 1 :(得分:0)
正如其他人已经说过的那样,已检查和未检查的异常之间没有性能差异。
但是如果您认为抛出或处理异常的表现对您的应用程序可能很重要,那么您正在做非常错误。
异常是为了告诉调用者您的方法无法完成其任务。如果经常发生这种情况会影响程序的整体性能,那么问题就不仅仅是性能 - 你有一个非功能性的程序!
当你发现一个方法无法完成它的任务时总是抛出异常,并且只有在你的调用堆栈深深嵌套某些方法的某些未指定的失败之后才能合理地继续捕获异常(这是异常告诉你的) ) - 通常,这是一些顶级(例如桌面应用程序的菜单栏操作)。为了避免编写大量的抛出条款,未经检查的异常可能会有所帮助 - 但这是基于意见的。
答案 2 :(得分:0)
抛出异常是非常昂贵的,因为你需要计算所有堆栈跟踪,因为它通常有助于性能只返回null / -1 / etc。 或者您可以使用Exception的构造函数而不使用writableStackTrace。它是构造函数中的最后一个参数。 https://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html
protected Exception(String message,
Throwable cause,
boolean enableSuppression,
boolean writableStackTrace)