比较Java中已检查和未检查的异常(性能、基准测试)

比较Java中已检查和未检查的异常(性能、基准测试),java,exception,exception-handling,checked-exceptions,Java,Exception,Exception Handling,Checked Exceptions,是否存在这样的情况,即在创建异常时,可以同时使用选中的异常和未选中的异常?从性能的角度来看,速度和性能可以相互衡量,为异常构建堆栈跟踪无论如何是生成异常时最长的操作 选中和未选中的异常仅在编译时起作用。Java编译器强制您捕获已检查的异常或在方法签名中声明它们。它本应能提高程序的安全性,但大多数人认为它不值得它带来的设计问题 甚至还有Lomboks神奇的注释来克服这种编译时检查。在JVM类文件级别上,无论方法的throws子句如何,都可以抛出所有异常(无论是否选中),这就是为什么这样做。正如其他

是否存在这样的情况,即在创建异常时,可以同时使用选中的异常和未选中的异常?从性能的角度来看,速度和性能可以相互衡量,为异常构建堆栈跟踪无论如何是生成异常时最长的操作

选中和未选中的异常仅在编译时起作用。Java编译器强制您捕获已检查的异常或在方法签名中声明它们。它本应能提高程序的安全性,但大多数人认为它不值得它带来的设计问题


甚至还有Lomboks神奇的注释来克服这种编译时检查。在JVM类文件级别上,无论方法的throws子句如何,都可以抛出所有异常(无论是否选中),这就是为什么这样做。

正如其他人所说,选中的异常和未选中的异常之间没有性能差异

但是,如果您认为抛出或处理异常的性能可能对您的应用程序很重要,那么您就大错特错了

异常旨在告诉调用方您的方法无法完成其任务。如果这种情况经常发生,从而影响程序的整体性能,那么您就有一个比性能更大的问题-您有一个非功能程序


当你发现一个方法不能完成它的任务时,总是抛出异常,并且只在你可以合理地继续的地方捕获异常,即使在你的调用堆栈中嵌套的某个方法发生了一些未指明的故障之后也是如此。这就是异常告诉你的——通常是一些顶级的,比如桌面应用程序的菜单栏操作。为了避免编写大量抛出类,未经检查的异常可能会有所帮助,但这是基于观点的

抛出异常非常昂贵,因为您需要计算所有堆栈跟踪,因为它通常有助于提高性能,只需返回null/-1/等。 或者您可以使用Exception的构造函数而不使用writableStackTrace。它是构造函数中的最后一个参数。

受保护的例外字符串消息, 可抛弃的事业, 布尔使能抑制, 布尔可写堆栈跟踪

如果创建自己的异常,则始终可以使用未经检查的异常。唯一的区别在于是否必须定义方法引发特定异常。检查异常实际上仅在编译时强制执行。是否检查异常对性能没有任何影响。但它们确实在设计的清晰性上有所不同。这是一个观点和争论的问题。从性能的角度来看,没有区别:抛出异常总是非常昂贵的。但是,由于例外情况会发生,这是可以的。是否使用选中或未选中的异常,则取决于设计。你的学校说你必须使用检查过的异常,因为它们迫使你和使用你的代码的人遵守你方法的约定,另一个学派说,如果你使用检查异常,你最终会用很多无用的try/catch块污染你的代码……我个人讨厌检查异常,因为我认为代码可读性和清晰性应该是最重要的,你不应该写太多代码来处理异常情况,而是普通的。但这只是我对这个话题的观点,其他观点也同样有效。