1. Что такое исключение?
Во -первых, давайте посмотрим на пример на рисунке ниже:
В этом примере код ошибки существует путем деления на 0. Исключение из -за деления на 0: arithmeticexception
HelloException.java
пакет com.yiibai.tutorial.exception; public class helloexception {public static void main (string [] args) {System.out.println ("Three"); // это разделение без проблем. int value = 10/2; System.out.println ("два"); // это разделение без проблем. значение = 10/1; System.out.println ("One"); // У этого подразделения есть проблема, разделенная на 0. // Ошибка произошла здесь. значение = 10/0; // и следующий код не будет выполнен. System.out.println («Давай пойдем!»); }}Запуск этого примера приведет:
Вы можете увидеть уведомления на экране консоли. Уведомления об ошибках очень ясны, включая информацию о строках кода.
Давайте посмотрим на следующую программу через процесс на рисунке ниже:
Мы изменим код вышеупомянутого осуществления.
Hellocatchexception.java
пакет com.yiibai.tutorial.exception; public class hellocatchexception {public static void main (string [] args) {system.out.println ("three"); // это разделение без проблем. int value = 10/2; System.out.println ("два"); // это разделение без проблем. значение = 10/1; System.out.println ("One"); Try {// У этого подразделения есть проблема, разделенная на 0. // Здесь произошла ошибка. значение = 10/0; // и следующий код не будет выполнен. System.out.println ("value =" + value); } catch (arithmeticexception e) {// Код в блоке Catch будет выполнена System.out.println ("error:" + e.getmessage ()); // код в блоке подъема будет выполнен System.out.println («Игнорировать ...»); } // Этот код выполняется System.out.println ("Let's Go!"); }}Запуск результатов образца:
Три
Два
Один
Ошибка: / по нулю
Игнорировать ...
Пойдем!
Мы объясним следующую процедуру следующим образом по потоку примера изображения.
2. Иерархия исключений <br /> Это модель иерархического графика исключений Java.
Высокий класс: бросается
Два прямых подклассов - ошибка и исключение.
Существует подкласс Runtimeexception в передаче исключений, включая исключения времени компиляции, не проверенные на Java. Проверьте и отмените проверку во время компиляции, как описано в следующем разделе примера реализации.
Примечание. Ваш класс должен наследовать от двух ветвей: ошибка или исключение, не непосредственно от броска.
Виртуальная машина повышает эту ошибку, когда динамическая ссылка не удается или когда происходит какой -либо другой «жесткий» сбой виртуальной машины. Типичные программы Java не улавливают ошибки, поэтому программы Java не устраняют никаких ошибок. Большинство программ бросают и захватывают объекты, полученные из класса исключений. Исключение указывает на проблему, но эти проблемы не являются серьезными системными проблемами. Большинство программ, которые вы пишете, бросают и поймают исключения.
Класс исключений определяет много подклассов в пакете Java. Эти подклассы показывают, что могут возникнуть различные типы исключений. Например, NegativeArraysizexception указывает на то, что программа пытается создать массив отрицательного размера.
Особое значение подкласса режиссера на языке Java: класс Runtimeexception представляет собой исключение, которое происходит (во время выполнения) в виртуальной машине Java. Примером исключения времени выполнения является исключение Nullyiibaierexception, которое поднимается, когда метод пытается получить доступ к члену объекта посредством нулевой ссылки. Nullyiibaierexception может появиться везде, где программа пытается обогнать объект. Преимущества проверки на исключение часто перевешивают его затраты.
Поскольку исключения во время выполнения вездесущие, тщетно пытаться ловить или указать все время (нечитаемый и некоммерческий код), компилятор позволяет исключениям выполнения, чтобы перейти к Uncaught и указывать.
Пакет Java определяет несколько классов Runtimeexception. Вы можете поймать эти исключения, как и другие. Но нет необходимости в том, чтобы указать, что он бросает исключение времени выполнения. Кроме того, вы можете создать свой собственный подкласс Runtimeexception. Исключения времени выполнения - приведенное ниже обсуждение содержит углубленное обсуждение того, когда и как использовать исключения времени выполнения. 3. Используйте Try-Catch, чтобы справиться с исключениями
Написать классы унаследованы от исключения.
AgeException.java
пакет com.yiibai.tutorial.exception.basic; public Class AgeException расширяет Exception {public AgeException (String Message) {super (сообщение); }} Tooyoungexception.javapackage com.yiibai.tutorial.exception.basic; открытый класс tooyoungexception расширяет egeException {public tooyoungexception (String message) {super (сообщение); }} TooldException.java
пакет com.yiibai.tutorial.exception.basic; открытый класс TooldException расширяет egeException {public tooldException (String Message) {super (сообщение); }} И статический метод проверки возраста на класс AgeUtils.
Ageutils.java
пакет com.yiibai.tutorial.exception.basic; открытый класс ageutils {// Этот метод проверяет возраст. // Если возраст меньше 18, метод будет выбросить исключение Tooyoungexception // Если возраст превышает 40, этот метод будет выбросить исключение TooldException Public Static void -проверку (int age) бросает tooyoungexception, TooldException {if (возраст <18) {// Если возраст меньше, чем 18, исключение будет выпущено // этот метод заканчивается здесь. бросить новое tooyoungexception («возраст» + возраст + «слишком молодой»); } else if (возраст> 40) {// Если возраст превышает 40, будет брошено исключение. // этот метод заканчивается здесь. бросить new tooldException («возраст» + возраст + «слишком старый»); } // Если возраст составляет 18-40. // Этот код будет выполнен. System.out.println («Возраст» + возраст + "ОК!"); }} Проверьте на наличие исключений и неконтролируемых исключений:
AgeException - это исключение, подкласс TooldException и Tooyoungexception2 - это прямые подклассы eareException, поэтому они «проверено исключение»
Метод AgeUtils.checkage (int) сделал исключение и необходимо перечислить объявления их метода через ключевое слово «бросает». Или вы можете объявить больше уровней.
Местоположение AgeUtils.checkage (int) также должно быть обработано, чтобы поймать исключение или продолжать бросать его.
«Проверено исключение» проверяется «Java Compiler».
Есть два варианта:
Trycatchdemo1.java
пакет com.yiibai.tutorial.exception.basic; public class trycatchdemo1 {public static void main (string [] args) {System.out.println ("Start Recruiting ..."); // проверьте возрастную систему.out.println («Проверьте свой возраст»); int возраст = 50; try {ageutils.checkage (возраст); System.out.println («Вы проходите!»); } catch (tooyoungexception e) {// сделай что -нибудь здесь .. System.out.println («Вы слишком молоды, а не проходите!»); System.out.println (e.getMessage ()); } catch (tooldException e) {// сделай что -нибудь здесь .. System.out.println («Вы слишком стары, а не проходите!»); System.out.println (e.getMessage ()); }}} В следующем примере мы поймаем исключение (класс гиперксации) через родительский класс.
Trycatchdemo2.java
пакет com.yiibai.tutorial.exception.basic; public class trycatchdemo2 {public static void main (string [] args) {System.out.println ("Start Recuiting ..."); // проверьте возрастную систему.out.println («Проверьте свой возраст»); int возраст = 15; Попробуйте {// здесь может бросить TooldException или tooyoungexception ageutils.checkage (age); System.out.println («Вы проходите!»); } catch (AgeException e) {// Если происходит исключение, тип возраста // Этот блок улова будет выполнен System.out.println («Ваш возраст недействителен, вы не проходите»); System.out.println (e.getMessage ()); }}} Различные исключения также могут быть сгруппированы в блоки, чтобы обрабатывать, если они обрабатываются таким же образом к логической программе.
Trycatchdemo3.java
пакет com.yiibai.tutorial.exception.basic; public class trycatchdemo3 {public static void main (string [] args) {System.out.println ("Start Recruiting ..."); // проверьте возрастную систему.out.println («Проверьте свой возраст»); int возраст = 15; Попробуйте {// здесь может бросить TooldException или tooyoungexception ageutils.checkage (age); System.out.println («Вы проходите!»); } catch (tooyoungexception | tooldException e) {// поймать много исключений в одном блоке. System.out.println («Ваш возраст недействителен, вы не проходите»); System.out.println (e.getMessage ()); }}} 4. Попробуйте финально
Мы привыкли ловить ошибки с помощью блоков Try-Catch. Попробуйте полностью обработать исключения.
Попробуйте {// сделать что -нибудь здесь} catch (exception1 e) {// сделать что -нибудь здесь} catch (Exception2 e) {// Делать что -то здесь} наконец {// наконец -то блок всегда выполняется // что -то здесь ‘ Trycatchfinallydemo.java
пакет com.yiibai.tutorial.exception.basic; открытый класс trycatchfinallydemo {public static void main (string [] args) {string text = "001234a2"; int value = tointeger (текст); System.out.println ("value =" + value); } public static int tointeger (String Text) {try {System.out.println ("begin parse text:" + text); // Исключение может бросить здесь (NumberFormateXception). int value = integer.parseint (text); возвращаемое значение; } catch (numberFormateXception e) {// В случае «текста» не является числом. // этот блок улова будет выполнен. System.out.println ("Исключение формата номеров" + e.getmessage ()); // Возвращает 0, если число номеров фигурирует return 0; } наконец {System.out.println ("end parse text:" + text); }}}Это процесс программы. Наконец -то блок всегда будет выполнен при любых обстоятельствах.
5. Окружающее исключение
Человек. Ява
Пакет com.yiibai.tutorial.exception.wrap; Public Class Person {public Static Louse Male = "MALE"; публичная статическая финальная строка женщина = "Женщина"; Приватное название строки; частный строковый пол; частный int возраст; Public Person (String name, String Gender, int age) {this.name = name; this.gender = пол; this.age = возраст; } public String getName () {return name; } public void setName (string name) {this.name = name; } public String getGender () {return Gender; } public void setgender (строка пол) {this.gender = gender; } public int getage () {return Age; } public void setage (int age) {this.age = age; }} Genderexception.java
пакет com.yiibai.tutorial.exception.wrap; // Гендерное исключение. Публичный класс genderexception Extends Exception {public genderexception (String Message) {super (сообщение); }} Пакет класса Validexception имеет другие исключения.
Validexception.java
пакет com.yiibai.tutorial.exception.wrap; public class valideexception расширяет Exception {// Обернуть исключение public valideexception (Exception e) {super (e); }} ValidateUtils.java
Пакет com.yiibai.tutorial.exception.wrap; import com.yibai.tutorial.exception.basic.ageutils; public class validateutils {public static void Checkerson (лицо) Throws valideexception {try {// Проверка возраста. // Действительно, если между 18-40 // Этот метод может бросить TooldException, tooyoungexception. Ageutils.checkage (person.getage ()); } catch (Exception e) {// если не действителен // Оберните это исключение с помощью ValideException и бросить новое valideException (e); } // Если этот человек женщина, т.е. недействителен. if (person.getgender (). equals (person.female)) {genderexception e = new genderexception («не принимайте женщин»); бросить новое validexception (e); }}} Warpperexceptiondemo.java
пакет com.yiibai.tutorial.exception.wrap; открытый класс warpperexceptiondemo {public static void main (string [] args) {// один набор участников. Человек = новый человек («жениться», человек. Фимейл, 20); Попробуйте {// исключения могут возникнуть здесь. Validateutils.checkperson (человек); } catch (validexexception wrap) {// Получить реальную причину. // может быть tooyoungexception, tooldException, genderexception исключение canece = (exception) wrap.getCaue (); if (причина! = null) {System.out.println ("не пройти, причина:" + cane.getmessage ()); } else {System.out.println (wrap.getMessage ()); }}}}6. Runtimeexception и подклассы класс Runtimeexception и его подклассы являются «неконтролируемыми исключениями». Это не проверяется во время компиляции компилятором Java. В некоторых случаях вы можете унаследовать от этой ветви, чтобы написать свои собственные исключения.
Ниже приведены некоторые классы, принадлежащие к филиалу Runtimeexception (конечно, это еще не все).
Некоторые примеры обработки исключений этого типа:
6.1- nullyibaierexception
Это наиболее распространенное исключение и обычно вызывает ошибки в программе. Исключение бросается при вызове метода или доступа к поле пустого объекта.
Nullyiibaierexceptiondemo.java
пакет com.yiibai.tutorial.exception.runtime; открытый класс nullyibaierexceptiondemo {// Например, вот метод, который может вернуть нулевую строку. public Static String getString () {if (1 == 2) {return "1 == 2 !!"; } return null; } public static void main (string [] args) {// Это объект, который ссылается не на нуль. String Text1 = "Hello Exception"; // Вызовите метод. Получает длину строки. int length = text1.length (); System.out.println ("Длина текста1 =" + длина); // Это объект, который ссылается на NULL. String Text2 = getString (); // Вызовите метод. Получает длину строки. // nullyiibaierexception будет происходить здесь. // Это исключение происходит во время выполнения (тип runtimeexception) // Компилятор Javac не заставляет вас использовать блок Try-Catch для обработки его длины = text2.length (); System.out.println ("finish!"); }}Результаты запуска примера:
В действительности, Try-Catch можно использовать для улавливания и обработки этого исключения, как при обработке других исключений. Однако это механическое, и обычно мы должны проверить, чтобы объект не был нулевым перед тем, как его использовать.
Вы можете исправить приведенный выше код, чтобы сделать его похожим на следующее, чтобы избежать исключений нулевого указателя:
// Это null object.string text2 = getString (); // Проверьте, чтобы убедиться, что 'text2' не являются null.// вместо использования try-catch.if (text2! = Null) {length = text2.length ();} 6.2- ArryIndexofBoundException
Это исключение происходит, когда вы пытаетесь получить доступ к элементу массива с неверным индексом. Например, массив имеет 10 элементов для доступа, но вы получаете доступ к элементам с индексом 20.
Arrayindexofboundsexceptiondemo.java
пакет com.yiibai.tutorial.exception.runtime; открытый класс arrayindexofboundsexceptiondemo {public static void main (string [] args) {string [] strs = new String [] {one »,« два »,« три »}; // Доступ к элементу имеет индекс 0. String str1 = strs [0]; System.out.println ("String at 0 =" + str1); // Доступ к элементу имеет индекс 5. // ArrayIndexofBoundSexception происходит здесь. String str2 = strs [5]; System.out.println ("String at 5 =" + str2); }} Чтобы избежать arrayindexofboundsexception, мы должны быть больше о проверке массива, чем с использованием Try-Catch.
if (strs.length> 5) {string str2 = strs [5]; System.out.println ("string at 5 =" + str2);} else {System.out.println ("Нет элементов с индексом 5");}Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.