在Java中,在没有实际错误的情况下使用throw/catch作为逻辑的一部分通常是一个坏主意(在某种程度上),因为抛出和捕获异常的代价很高,并且在循环中多次执行这个操作通常比其他不涉及抛出异常的控制结构慢得多。
我的问题是,成本是在throw/catch本身产生的,还是在创建Exception对象时产生的(因为它获得了很多运行时信息,包括执行堆栈)?
换句话说,如果我
Exception e = new Exception();
但不要扔,这是扔的大部分成本,还是扔+接的处理成本高?
我不是在问把代码放在try/catch块中是否会增加执行该代码的成本,我是在问捕获异常是否是昂贵的部分,或者创建(调用的构造函数)异常是否是昂贵的部分。
另一种问法是,如果我创建一个异常实例,并反复抛出并捕获它,这是否比每次抛出都创建一个新异常要快得多?