Arhn - архитектура программирования

Оператор возврата с try/catch

Я знаю, что для многих из вас это может показаться глупым вопросом, но я изучаю Android/Java, и у меня все еще есть неясные понятия.

В этом случае я не уверен, как лучше всего использовать оператор return в блоке try/catch.

Вот как я объявил свой метод, где мне нужно это использовать:

public JSONArray parseXmlResponse(String response) {

        JSONArray addressComp = null;
        JSONObject jsonObject = new JSONObject();

        try {
            jsonObject = new JSONObject(response);
            addressComp = jsonObject.getJSONArray("results").getJSONObject(0).getJSONArray("address_components");
        }catch (JSONException e) {
            e.printStackTrace();
        }
        return addressComp;
    }

Насколько я знаю, здесь метод всегда возвращает "addressComp", даже если он нулевой.
Но я видел, что другие люди делали бы это по-другому:

public JSONArray parseXmlResponse(String response) {

        JSONArray addressComp = null;
        JSONObject jsonObject = new JSONObject();

        try {
            jsonObject = new JSONObject(response);
            addressComp = jsonObject.getJSONArray("results").getJSONObject(0).getJSONArray("address_components");
            return addressComp;
        }catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

Но это меня немного смущает.
Установка здесь return null не приведет к тому, что значение всегда будет возвращаться как null, даже если addressComp имеет реальное значение?


  • Если исключения не возникает, возврат происходит в конце блока try. В этот момент возвращается addressComp, что не равно нулю. 12.02.2014
  • return null; недостижимый код. 12.02.2014
  • @Petter Итак, как вы говорите, если исключений не возникает и он проходит через блок try, он возвращает то, что находится в блоке try, и перепрыгивает через возвращаемое нулевое значение. 12.02.2014
  • @ᴍarounᴍaroun Нет, это не так. Если один из операторов в блоке try вызывает исключение JSONException, он не достигнет return addressComp; и, следовательно, достигнет return null; после печати трассировки стека. 12.02.2014
  • @blalasaadri Ты прав. 12.02.2014

Ответы:


1

Установка возвращаемого значения null не приведет к тому, что значение всегда будет возвращаться как null, даже если addressComp имеет реальное значение?

Нет, как только он дойдет до первого оператора return, он будет return addressComp, а строка return null никогда не будет выполнена. Просто убедитесь, что вы проверяете null в переменной, которая принимает это значение, если это вызовет проблемы.

Изменить

JSONArray jArray = parseXmlResponse(someString);
if (jArray != null)
{
     //run some code
}
else
{
    //it's null so run some other code
}
12.02.2014
  • Итак, следующим шагом должно быть установка другого блока try/catch для перехвата NULLPOINTEREXCEPTION, где переменная принимает значение ta, верно? 12.02.2014
  • Это не обязательно должен быть блок try/catch. Позвольте мне отредактировать с коротким примером 12.02.2014

  • 2

    Эти методы достигают по существу одного и того же. Во втором случае он дойдет только до оператора return...

    return addressComp;
    

    ... если все, что находится над ним в блоке try, в порядке и не вызывает исключения. Как только это произойдет, метод завершится, и код больше не будет выполняться, поэтому он не достигнет нулевого возврата.

    Однако если в блоке try что-то пойдет не так, он перейдет к блоку catch, распечатает трассировку стека, а затем поток программы пройдет через блок try catch и вернет нулевое значение. Обратите внимание, что как только будет выброшено исключение, НИЧЕГО больше в блоке try не будет запущено.

    Второй метод немного лучше, потому что вы можете, по крайней мере, сообщить о проблемах. Если вы используете первый способ, вам нужно проверить, является ли возвращаемое значение нулевым, прежде чем продолжить.

    12.02.2014
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..