简短结论:Java 异常本身“会不会影响性能”,取决于你怎么用。
正常业务逻辑不要用异常来控制流程;异常在“发生”时才贵,不抛就不贵。
下面分层说明。
try {
// 没有异常发生
} catch (Exception e) {
}
✅ 所以:try-catch 本身不是性能杀手
throw new RuntimeException("error");
会做:
fillInStackTrace()会遍历调用栈
这是最耗性能的部分:
e.getStackTrace()
异常从方法一层层往外抛:
throw new MyBusinessException("msg");
throw new Exception("msg");
public class NoStackException extends RuntimeException {
@Override
public synchronized Throwable fillInStackTrace() {
return this; // 不填充堆栈
}
}
⚠️ 但可读性 & 调试性会变差
try {
Integer.parseInt(str);
} catch (NumberFormatException e) {
// 正常业务逻辑
}
问题:
✅ 正确方式:
if (str == null || !str.matches("\\d+")) {
// 处理非法输入
}
✅ 用异常的场景:
❌ 不要用异常:
Java 异常不是不能用,而是不能“滥用”。
异常在“抛”的时候才贵,尤其是堆栈追踪。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。