Как изменить значение переменной в блоке try / catch [duplicate]

Поскольку никто не упомянул сокращение, вот оно:

[0,1,1,0].map{"\($0)"}.reduce(""){$0+$1}//"0110"

В духе функционального программирования

4
задан zeesh91 25 March 2014 в 21:32
поделиться

4 ответа

Объяснение

Из документации Java :

[Блок try] содержит одну или несколько юридических строк кода, которые могут исключение. (Блоки catch и finally объясняются в следующих двух подразделах.)

Исключением является особый вид объекта. Когда вы пишете new Exception(), вы создаете новый объект исключения. Когда вы пишете throw new Exception(), вы создаете новую ошибку, а затем бросаете ее в ближайший блок try-catch, прерывая остальную часть вашего кода.

Когда вы бросаете исключение, он получает , пойманным блоком try-catch, который он вложен в (внутри). То есть, предполагая, что соответствующий блок catch для этого исключения зарегистрирован. Если код не упакован в блок try-catch, программа автоматически отключается, как только возникает ошибка. Используйте try-catch вокруг любого кода или метода, которые могут вызывать ошибку, особенно из-за пользовательского ввода (в пределах разумного).

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

Когда вы добавляете throws к сигнатуре метода, вы сообщаете другим методам, что, если они назовут этот метод, у него есть потенциал для выставить проверенное исключение (это не обязательно для снятия флажка). Обратите внимание, что это throws не throw. Это не действие, оно описывает, что оно иногда выполняет какое-либо действие.

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

Исключения - это способ заставить вашу программу согласованно реагировать на непредвиденные или недействительные ситуации и особенно полезны, когда требуется ввод пользователя, хотя он также полезен в других ситуациях, таких как ввод / вывод файлов.

Примеры

public CircleWithException() throws InvalidRadiusException {
       this(1.0);
}

Здесь CircleWithException() может вызывать InvalidRadiusException (предположительно, этот (1.0) иногда вызывает исключение InvalidRadiusException.)

Код вызов этого метода должен иметь:

try {
    new CircleWithException(); // This calls the method above
} catch (InvalidRadiusException e) { // The object "e" is the exception object that was thrown.
    // this is where you handle it if an error occurs
}

Как я уже говорил, исключение - это только определенный тип объекта, который расширяется Exception

/* Invalid radius class that contains error code */
public class InvalidRadiusException extends Exception {
     private double radius;

/** Construct an exception */
public InvalidRadiusException(double radius) {
       super("Invalid radius " + radius);
       this.radius = radius;
}

/** Return the radius */
public double getRadius() {
    return radius;
 }
}

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

Чтобы выбросить это исключение, вы сначала создаете объект InvalidRadiusException и затем бросаете его:

throw new InvalidRadiusException(1.0);
7
ответ дан sinθ 23 August 2018 в 00:41
поделиться

Вы можете объявить метод throw исключение, если вы не можете (или это не удобно) обрабатывать исключение внутри метода.

В вашем случае вы вызывают метод setRadius внутри конструктора. Если вы считаете, что удобно обрабатывать исключение (которое выбрано setRadius) внутри конструктора, вы можете использовать предложение try-catch:

public CircleWithException(double newRadius) throws InvalidRadiusException {
    try {
        setRadius(newRadius);
        numberOfObjects++;
    } catch (InvalidRadiusException e) {
        setRadius(0); // for example
    }
}

Блок catch содержит то, что вы хотите сделать, если было выбрано исключение. В этом случае я устанавливаю радиус в 0, но вы можете это изменить.

Помните, что это зависит от реализации ваших классов и от того, как вы хотите, чтобы они работали. Если вы не хотите, чтобы конструктор обрабатывал это исключение, вы можете бросить его (как вы уже делаете) и обрабатывать его другими методами.

3
ответ дан Christian 23 August 2018 в 00:41
поделиться
  • 1
    когда вы говорите, бросает в вашей первой строке, заявляя, что если он выбрасывает InvalidRadiusException или что он может его бросить? В этом случае он существует в качестве меры предосторожности? – zeesh91 25 March 2014 в 21:37
  • 2
    Некоторые примеры того, что я хотел сказать, являются вашими конструкторами. Они оба выбрасывают исключение InvalidRadiusException. Но обратите внимание, что они не делают это «прямо». Они называют метод (который фактически имеет строку throw new InvalidRadiusException;), но не обрабатывает его. – Christian 25 March 2014 в 21:39

«throws» - это объявление о том, что метод будет вызывать определенные исключения. Это выполняется компилятором java для проверенных исключений, а не для ошибок или исключенных исключений.

«throw new» - это два ключевых слова в java, поэтому мы можем разбить его ...

  • «throw» - это оператор, который генерирует исключение
  • «new» - это оператор, который создает новый экземпляр объекта

, «try» block позволяет вам выполнять методы, объявляющие, что они генерируют исключения, и именно там вы используете предложение catch, чтобы поймать эти заброшенные исключения.

Кроме того, есть блок try-with-resources где вы можете использовать блок try для работы с расходуемым ресурсом (скажем, потоком), который реализует AutoCloseable, а затем закрывает его.

В блок try также есть «finally», что позволяет вы должны выполнить очистку или любые другие методы, которые ДОЛЖНЫ выполнять после блока try, независимо от того, происходят ли исключения или нет.

2
ответ дан rpg711 23 August 2018 в 00:41
поделиться

Существует два типа исключений

1) Непроверено. Они определены классами Error и RuntimeException и всеми их подклассами. Java не принуждает вас каким-либо образом обрабатывать это исключение.

2) Проверено. Они определены как класс Throwable и все его подклассы, которые не попадают в категорию, определенную в (1). Java заставляет вас обрабатывать эти исключения с помощью try / catch. Если вы вызываете метод, который может генерировать такое исключение (определенное с помощью ключевого слова throws) вне блока try, ваш код не будет компилироваться.

throws: Это способ объявить, что метод может потенциально генерировать исключение, которое должно быть уловлено с помощью try / catch. Например,

public void doSomething() throws MyException { ... }

является объявлением метода, который потенциально может вызвать экземпляр MyException.

try / catch / finally: Это способ обработки исключений, которые могут быть получены каким-то кодом. Коди, которую вы пытаетесь запустить, входит в блок try, код обработки ошибок переходит в блок catch. Необязательный блок finally - это то, что будет выполнено независимо от того, выбрано ли исключение. На самом деле блок finally будет вызван, даже если вы сделаете return внутри вашего try или вашего catch. Например,

try {
    doSomething();
} catch (MyException exception) {
    exception.printStackTrace();
}

или пример использования finally:

MyResource myResource = getMyResource();
try {
    myResource.open();
    doStuffWithMyResource(myResource);
} catch (Exception exception) {
    exception.printStackTrace();
} finally {
    if (myResource.isOpen()) {
        myResource.close();
    }
}
2
ответ дан SamYonnou 23 August 2018 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: