在 Java 中始终抛出相同的异常实例
人们总是告诉我,Java异常处理非常昂贵。
我在问,在程序开始时创建特定类型的异常实例,而不创建一个新实例,总是抛出相同的异常对象,这是否是一种很好的做法。
我只想举个例子。常用代码:
if (!checkSomething(myObject))
throw new CustomException("your object is invalid");
另类:
static CustomException MYEXP = new CustomException("your object is invalid");
//somewhere else
if (!checkSomething(myObject))
throw MYEXP;
当然,我在这里做了一些假设:
-
MyCustomException
没有参数 - 无论何时是一种好的做法,客户端代码都是基于异常处理,重构不是一种选择。
所以问题是:
- 这是一种很好的做法吗?
- 这会损坏某些 JVM 机制吗?
- 如果 1 是 yes,是否有可能提高性能?(我认为不是,但不确定)
- 如果1和3是肯定的,为什么不作为实践赞助?
- 如果1不是,为什么马丁·奥德斯基(Martin Odersky)在Scala的介绍中告诉Scala,在某些情况下这就是Scala的工作方式?(在第28.30分钟,他告诉break的实现会引发异常,观众说这很耗时,他回答说不是每次都创建异常)福斯德姆 2009
我希望这不是一个无聊/愚蠢的问题,我对此感到好奇。我认为异常处理的真正成本是处理而不是创建。
编辑增加了对FOSDEM演示的精确讨论的参考
免责声明:我的代码都不像提议的那样工作,我无意管理这样的异常,我只是在做一个“假设”问题,这种好奇心是由该视频的传出而产生的。我想:如果它是在Scala中完成的,为什么不是在Java中完成的呢?