Есть ли накладные расходы в Java для использования блока try/catch, а не if block (если предположить, что вложенный код в противном случае не запрашивает)?
Например, возьмите следующие две простые реализации метода "безопасной обрезки" для строк:
public String tryTrim(String raw) {
try {
return raw.trim();
} catch (Exception e) {
}
return null;
}
public String ifTrim(String raw) {
if (raw == null) {
return null;
}
return raw.trim();
}
Если вход raw
встречается редко null
, есть ли разница в производительности между двумя методами?
Кроме того, является хорошим шаблоном программирования для использования подхода tryTrim()
для упрощения компоновки кода, особенно когда многие if blocks проверяют редкие условия ошибки избежать, заключая код в один блок try/catch?
Например, обычный метод имеет метод с N parameters
, который использует M <= N
из них рядом с его началом, быстро и детерминированно, если какой-либо такой параметр является "недопустимым" (например, нулевой или пустой строка), не затрагивая остальную часть кода.
В таких случаях вместо того, чтобы писать k * M
, если блоки (где k
- среднее количество проверок на один параметр, например k = 2
для пустых или пустых строк), Блок try/catch значительно сократит код, и комментарий 1-2 строки может быть использован для явного указания "нетрадиционной" логики.
Такой шаблон также ускорит этот метод, особенно если условия ошибки происходят редко, и это сделало бы это без ущерба для безопасности программы (при условии, что условия ошибки являются "нормальными", например, как в методе обработки строк, где null или пустые значения приемлемы, хотя и редко присутствуют).