Попробуйте, как сеть, которая снимает все исключения, брошенные кодом в Try {}, а затем вручает исключения из кода в уловке {} для обработки. Наконец -то выполните код наконец. Независимо от того, есть ли в коде исключения в коде, и поднимает ли улов, вылов за исключением, код, наконец, будет выполнен.
Хотя предустановленные процессоры, предоставленные системами выполнения Java, полезны для отладки, вы обычно хотите справиться с исключениями самостоятельно. Есть два преимущества для этого: во -первых, это позволяет вам исправлять ошибки. Во -вторых, это может предотвратить автоматическое прекращение программы. Всякий раз, когда возникает ошибка, если ваша программа останавливается и распечатывает дорожку стека, большинство пользователей будут запутаны. К счастью, вы можете легко избежать этой ситуации.
Чтобы остерегаться и справиться с ошибками периода выполнения, просто поместите код, который вы хотите контролировать в блоке TRY. Сразу после блока Try, укажите пример захвата ошибки типа исключения, который вы хотите поймать в пункте «Уловка»:
Попробуйте {Code;
Например:
Импорт java.io.*; // Вызов пакета IO public class SimpleCharinout {public static void main (string args []) {char ch = ''; // Определение символа CH как 'System.out.prin tln (" Введите символ, пожалуйста, «); // Откройте введите символ, попробуйте на экране {// Пожалуйста, поместите код программы, который вы хотите контролировать в блоке Try. Сразу после блока TRY укажите шаблон исключений, который вы хотите захватить в предложении CACT CH = (char) System.in.read (); // Присвоение символов, введенных с клавиатуры, CH} Catch (ioException e) // // Если в приведенном выше коде есть ошибка, вы поймете {} здесь; // нет работы после системы ошибок. символ экрана: // и значение CH}}
Когда мы пишем Java Try..catch, нам часто нужно добавить, наконец, положения, чтобы закрыть некоторые ресурсы ввода -вывода, например,
InputStream IS; try {is = openInputStream (); }}
Но при использовании этого шаблона даже ветераны Java иногда делают некоторые ошибки. Например, в приведенном выше коде, когда функция OpenInputStream () бросает исключение во время выполнения, значение переменной все еще остается нулевым. Поэтому его нельзя поймать блоком уловов, но его непосредственно бросают на вызову. Я лично думаю, что более элегантный способ написания-напрямую вызовать метод ioutils.closequellide (), предоставленный пакетом Commons-IO, чтобы закрыть поток (или инкапсулировать метод Quoptully () самостоятельно).
Существует еще одно преимущество использования этого метода написания, то есть нелегко допустить ошибки при закрытии нескольких ресурсов ввода -вывода, таких как следующий код:
InputStream IS; outputStream OS; try {is = openInputStream (); if (os! = null) os.close ();
Когда возникает ошибка is.close (), OS.Close () не может быть выполнена, в результате чего ресурс, на который ссылается ОС, не выпущен.
Возможно, Oracle также думает, что такая попытка ... поймайте ... наконец -то код шаблона слишком ненужен, поэтому я внес некоторые изменения в пункт TRY в JDK 7, исключив написание некоторого кода, который вручную закрывает ресурсы, создавая код Выглядеть более компактно и проще. Например, приведенный выше код можно изменить на:
try (inputStream IS = openInputStream (); outputStream os = openoutStream ();) {// что -то} catch (ioException e) {e.printstacetrace (e);}
Oracle вызывает оператор Try (..) Здесь является заявление Try-with-resource. Следует отметить, что объекты, на которые ссылаются переменные в Try (..), должны быть экземпляры, которые реализуют интерфейс java.io.autoclosable. То есть ресурс в заявлениях о попытке-ресурсах не ограничивается ресурсами ввода-вывода.
Здесь необходимо предоставить некоторые дополнительные объяснения для некоторых подробностей о заявлении Try-with-resource:
JDK гарантирует, что метод Close () всех ресурсов называется независимо от того, бросает ли метод Close () исключение, и порядок вызова обращается от порядка объявления ресурса.
Все брошенные исключения в заявлении Try-with-resource будут пойманы. Если будут выпущены несколько исключений, последующее исключение будет подавлено. Подавленное исключение может быть получено путем вызова getSupressed (), определяемого выброшенным классом по очереди.
Пример выше,
При выходе из Try .. Поймайте. В исключении, брошенном OS.Close (). Вы можете получить исключение, брошенное is.close () через метод GetSupressed ().
Если ioException происходит при вызове OpenInputStream (), то OpenOutputStream () не будет вызвана, OS.Close () и IS.Close () не будет вызвана, а блок улова ловит брошен при вызове исключения OpenPtReam ().
Если возникает ioException (обозначенное токеном E1), то is.close () все еще будет вызвано Исключение, пойманное блоком улова, составляет E1.
В дополнение к ремоделированию блока Try, JDK 7 также упрощает часть подъема, позволяя объединить несколько пунктов с уловами. например:
try (inputStream IS = openInputStream (); outputStream os = openoutStream ();) {// что -то} catch (ioException | xmlparseexception | xpathexception e) {e.printstacetrace (e);}
Кроме того, когда вы ретвитуют несколько исключений, вам больше не нужно определять тип исключения в деталях. Вам просто нужно объявить исключение, которое необходимо бросить при определении метода. например
// Несмотря на то, что исключение используется здесь, чтобы соответствовать брошеном ioException, компилятор знает, что исключение, которое фактически перенесено на верхний слой, является ioException public void doio () бросает ioException {try {thress new ioException (); ) {throw e;
PS: я не могу придумать никаких преимуществ, которые принесет эта функция
У JDK 7 есть другие интересные новые синтаксические функции, такие как бинарные литералы, сегментация длинных чисел с подчеркиванием, тип вывода общих параметров, коммутатор поддерживает сопоставление строк и т. Д. Теперь JDK 8 представила некоторые полезные функции. Не рассматривая обратную совместимость, соответствующая и гибкая применение некоторых синтаксических функций может сделать наш код более ясным и более кратким в определенной степени.