Java if vs. try / catch overhead

Есть ли в Java накладные расходы на использование блока try / catch , в отличие от блока if (при условии, что вложенный код в противном случае не запрашивает этого)?

Например, возьмите следующие две простые реализации метода «безопасной обрезки» для строк:

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();
}

Если необработанный ввод редко null , есть ли разница в производительности между двумя методами?

Кроме того, это хороший шаблон программирования для использования tryTrim () подход для упрощения макета кода, особенно когда можно избежать многих блоков if , проверяющих редкие условия ошибки, заключив код в один блок try / catch?

Например, это общий случай, когда метод с N параметров , который использует M <= N из них около своего начала, быстро и детерминированно терпит неудачу, если какой-либо такой параметр i s "недопустимый" (например, пустая или пустая строка), не влияя на остальную часть кода.

В таких случаях вместо записи k * M if блоков (где k - среднее количество проверок на параметр, например k = 2 для нулевых или пустых строк), блок try / catch значительно сократит код, и можно использовать комментарий 1-2 строки, чтобы явно отметить «нетрадиционную» логику .

Такой шаблон также ускорит метод, особенно если условия ошибки возникают редко, и это будет сделано без ущерба для безопасности программы (при условии, что условия ошибки являются «нормальными», например, как в методе обработки строк, где null или пустые значения допустимы, хотя и редко).

55
задан PNS 23 June 2016 в 11:08
поделиться