Latest web development tutorials

Обработка исключений Java

Исключение составляют некоторые ошибки в программе, но не все ошибки исключения, и иногда ошибки можно избежать.

Например, ваш код меньше, точка с запятой, а затем запустить из результатов запрашивать неправильный java.lang.Error, если вы используете System.out.println (11/0), то вы делаете, потому что вы используете делитель 0 Это будет сгенерировано исключение java.lang.ArithmeticException.

Есть много причин для возникновения исключения, как правило, содержит следующие категории:

  • ввод данных пользователем незаконных данных.
  • Чтобы открыть файл не существует.
  • подключения к сети связи прерывается или переполнение памяти виртуальной машины Java.

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

Для того, чтобы понять, обработки исключений Java, как это работает, вам необходимо иметь следующие три вида исключений:

  • Проверено исключение: наиболее представительным проверяется исключение является исключением из - за ошибки пользователя или проблемы, то программист непредвиденное. Например, если вы хотите, чтобы открыть файл, не существует, возникает исключение, исключение не может быть просто игнорируются во время компиляции.
  • Исключение может быть программистом , чтобы избежать неправильного функционирования: исключение времени выполнения. В отличие от проверяемого исключения, исключение во время выполнения могут быть проигнорированы во время компиляции.
  • Ошибка: ошибка не ненормальным, но от вопроса о контроле программиста. Ошибка в коде, как правило, игнорируются. Например, когда переполнение стека возникает ошибка, они не могут проверить во время компиляции.

Иерархия классов исключений

Все классы исключений наследуют от java.lang.Exception подкласса.

Исключение класса является подкласс Throwable класса. В дополнение к классу исключений, Throwable существует подкласс Error.

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

Среда выполнения ошибки используется для указания ошибки происходит.

Например, переполнение памяти виртуальной машины Java. В целом, программа не восстанавливается после ошибки.

Исключение класса имеет две основные подкатегории: IOException класса и класса RuntimeException.

Встроенный класс Java (следующий будет объяснено), она имеет большинство обычных проверок и непроверенной исключения.


Встроенный класс исключений Java

Язык Java определяет несколько классов исключений в стандартном пакете java.lang.

Стандартные классы выполнения исключений являются подклассами наиболее распространенных классов исключений. Так как пакет java.lang загружается по умолчанию для всех программ Java, так что большинство из классов во время выполнения исключения наследственных аномалий могут быть использованы непосредственно.

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

ненормальный описание
ArithmeticException Когда аномальные условия эксплуатации, это исключение. Например, целое "деление на ноль" кинули экземпляр этого класса.
ArrayIndexOutOfBoundsException С незаконным индексом для доступа массив брошено. Если индекс отрицателен или больше или равен размеру массива, индекс является незаконным индекс.
ArrayStoreException Попытка сохранить неправильный тип объекта в массив исключений брошенными.
ClassCastException При попытке бросить объект не является экземпляром подкласса Брошенный.
IllegalArgumentException Брошенный, чтобы указать, что метод был принят незаконный или несоответствующий аргумент.
IllegalMonitorStateException Брошенный, чтобы указать, что поток пытается ждать на мониторе объекта или уведомить другие объекты ожидают монитор потоков без монитора, указанного.
IllegalStateException В случае незаконного или неподходящее время, чтобы вызвать метод для генерации сигнала. Другими словами, среда Java или Java-приложение не в соответствующем состоянии для запрошенной операции.
IllegalThreadStateException Тема не в соответствующем состоянии, когда запрошенная операция требуется выброшен.
IndexOutOfBoundsException Это указывает на индекс сортировки (например, сортировка массива, строка или вектор), брошенный вне диапазона.
NegativeArraySizeException Если приложение пытается создать массив с отрицательным размером, Метательное.
NullPointerException Когда приложение пытается использовать объект нуждается в локальной null при броске
NumberFormatException Когда приложение пытается преобразовать строку в числовой тип, но, что строка не может быть преобразована в соответствующий формат, вогнутое из аномалию.
SecurityException По диспетчер безопасности генерирует исключение, то это указывает на нарушение безопасности.
StringIndexOutOfBoundsException Это исключение из String броски методы , чтобы указать , что индекс является как отрицательным , больше , чем размер строки.
UnsupportedOperationException Если запрошенная операция не поддерживается Метательное.

В следующей таблице перечислены Java определены в пакете java.lang классы проверяемых исключений.

ненормальный описание
ClassNotFoundException Приложение пытается загрузить класс, вы не можете найти соответствующий класс Метательное.
CloneNotSupportedException При вызове Object класса clone метод для клонирования объекта, но класс объекта не может реализовать Cloneable интерфейс Метательное.
IllegalAccessException Когда отказано в доступе к классу Брошенный.
InstantiationException При попытке использовать Class класс newInstance создать экземпляр метода класса, обозначенный объект класса , потому что это интерфейс или абстрактный класс не может быть создан, преподнес аномалию.
InterruptedException Поток прерывается другим потоком, это исключение.
NoSuchFieldException Переменная запросили, не существует
NoSuchMethodException Метод запросили, не существует

аномалия

Следующий список является основным методом Throwable класс:

Нет . Метод и Описание
1 Строка GetMessage общественности ()
Возвращает подробную информацию о произошло исключение. Новости инициализируется в конструкторе класса Throwable.
2 общественного Throwable getCause ()
Возвращает Throwable объект, который представляет причину исключения.
3 общественного Строка ToString ()
Результаты с помощью GetMessage () возвращает имя класса Cascade.
4 общественного недействительными printStackTrace ()
Печать ToString () результат и уровень стека для System.err, а именно выходной поток ошибок.
5 общественного StackTraceElement [] getStackTrace ()
Он возвращает массив, содержащий уровень стека. 0 подстрочный элемент представляет собой вершину стека, последний элемент представляет собой способ вызова стека нижней части стека.
6 общественного Throwable fillInStackTrace ()
Throwable стек объект заполнен с текущим уровнем уровня стека вызовов, добавляется к уровню стека любой предыдущей информации.

Поймать исключение

Использование попытаться поймать ключевые слова могут поймать исключение. попробуйте / поймать блок на место исключения, которые могут произойти.

Синтаксис код попытка / поймать блок вызывается код защиты с помощью попытаться / поймать выглядит следующим образом:

try
{
   // 程序代码
}catch(ExceptionName e1)
{
   //Catch 块
}

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

Если исключение содержится в блоке улова, исключение будет передано в блок поймать и передать параметр этого метода является то же самое.

примеров

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

// 文件名 : ExcepTest.java
import java.io.*;
public class ExcepTest{

   public static void main(String args[]){
      try{
         int a[] = new int[2];
         System.out.println("Access element three :" + a[3]);
      }catch(ArrayIndexOutOfBoundsException e){
         System.out.println("Exception thrown  :" + e);
      }
      System.out.println("Out of the block");
   }
}

Выше компиляции кода и запустить следующий вывод:

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
Out of the block

Несколько блоков улова

Множество задвижка кодовых блоков после кодового блока называется попытка следовать многократного захвата.

Множественный синтаксис улова блока выглядит следующим образом:

 try{
    // 程序代码
 }catch(异常类型1 异常的变量名1){
    // 程序代码
 }catch(异常类型2 异常的变量名2){
    // 程序代码
 }catch(异常类型2 异常的变量名2){
    // 程序代码
 }

Приведенный выше фрагмент кода содержит три блока улова.

Вы можете добавить любое количество улова блоков за заявления попробовать.

Если исключение происходит в коде защиты, создается исключение на первый блок улова.

Если вы бросаете несоответствие исключение тип данных ExceptionType1, где он будет захвачен.

Если нет, то он будет передан на второй блок улова.

Таким образом, до тех пор пока исключение не пойманной любым уловом или блока.

примеров

Этот пример показывает, как с помощью нескольких попытаться / поймать.

try
{
   file = new FileInputStream(fileName);
   x = (byte) file.read();
}catch(IOException i)
{
   i.printStackTrace();
   return -1;
}catch(FileNotFoundException f) //Not valid!
{
   f.printStackTrace();
   return -1;
}

броски / броска Ключевые слова:

Если метод не отражает проверяемое исключение, то метод должен использовать броски ключевое слово, чтобы объявить. бросает ключевое слово помещается в конце подписи метода.

Вы можете также использовать ключевое слово бросить бросить исключение, будь то новое или вновь инстанцирован в плен.

Следующая декларация метод генерирует исключение RemoteException:

import java.io.*;
public class className
{
   public void deposit(double amount) throws RemoteException
   {
      // Method implementation
      throw new RemoteException();
   }
   //Remainder of class definition
}

Метод может быть объявлен, чтобы бросить несколько исключений, разделенных запятой между несколькими исключениями.

Например, следующее объявление метод бросает RemoteException и InsufficientFundsException:

import java.io.*;
public class className
{
   public void withdraw(double amount) throws RemoteException,
                              InsufficientFundsException
   {
       // Method implementation
   }
   //Remainder of class definition
}

наконец, ключевое слово

наконец, ключевое слово используется для создания блоков кода после того, как блок кода попытаться выполнить.

происходит ли или не является исключением, наконец, код блочного кода всегда будет выполняться.

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

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

 try{
    // 程序代码
 }catch(异常类型1 异常的变量名1){
    // 程序代码
 }catch(异常类型2 异常的变量名2){
    // 程序代码
 }finally{
    // 程序代码
 }
 

примеров

 public class ExcepTest{

   public static void main(String args[]){
      int a[] = new int[2];
      try{
         System.out.println("Access element three :" + a[3]);
      }catch(ArrayIndexOutOfBoundsException e){
         System.out.println("Exception thrown  :" + e);
      }
      finally{
         a[0] = 6;
         System.out.println("First element value: " +a[0]);
         System.out.println("The finally statement is executed");
      }
   }
}

Приведенные выше примеры скомпилированные получены следующие результаты:

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
First element value: 6
The finally statement is executed

Обратите внимание, что следующие вопросы:

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

Заявление пользовательских исключений

В Java, вы можете настроить исключение. Следующие пункты нужно помнить, чтобы написать свои собственные классы исключений.

  • Все исключения должны быть Throwable подклассы.
  • Если вы хотите написать проверенный класс исключений, вам необходимо наследовать класс исключения.
  • Если вы хотите написать класс выполнения исключений, вам нужно наследовать класс RuntimeException.

Вы можете определить свой собственный класс исключений следующим образом:

class MyException extends Exception{
}

Наследование класса Exception, чтобы создать классы исключений проверяются классы исключений.

Следующий класс InsufficientFundsException является определенный пользователем класс исключения, который наследует от Exception.

Класс исключения и любые другие классы, содержит переменные и методы.

примеров

// 文件名InsufficientFundsException.java
import java.io.*;

public class InsufficientFundsException extends Exception
{
   private double amount;
   public InsufficientFundsException(double amount)
   {
      this.amount = amount;
   } 
   public double getAmount()
   {
      return amount;
   }
}

Чтобы продемонстрировать, как использовать наш пользовательский класс исключений,

В следующем CheckingAccount класса содержит метод вывести () бросает исключение InsufficientFundsException.

// 文件名称 CheckingAccount.java
import java.io.*;

public class CheckingAccount
{
   private double balance;
   private int number;
   public CheckingAccount(int number)
   {
      this.number = number;
   }
   public void deposit(double amount)
   {
      balance += amount;
   }
   public void withdraw(double amount) throws
                              InsufficientFundsException
   {
      if(amount <= balance)
      {
         balance -= amount;
      }
      else
      {
         double needs = amount - balance;
         throw new InsufficientFundsException(needs);
      }
   }
   public double getBalance()
   {
      return balance;
   }
   public int getNumber()
   {
      return number;
   }
}

В следующей программе показано, как вызывать класс BankDemo CheckingAccount депозит () и вывести () метод.

//文件名称 BankDemo.java
public class BankDemo
{
   public static void main(String [] args)
   {
      CheckingAccount c = new CheckingAccount(101);
      System.out.println("Depositing $500...");
      c.deposit(500.00);
      try
      {
         System.out.println("\nWithdrawing $100...");
         c.withdraw(100.00);
         System.out.println("\nWithdrawing $600...");
         c.withdraw(600.00);
      }catch(InsufficientFundsException e)
      {
         System.out.println("Sorry, but you are short $"
                                  + e.getAmount());
         e.printStackTrace();
      }
    }
}

Компиляция вышеуказанные три файла, и запустить программу BankDemo, получить результаты следующим образом:

Depositing $500...

Withdrawing $100...

Withdrawing $600...
Sorry, but you are short $200.0
InsufficientFundsException
        at CheckingAccount.withdraw(CheckingAccount.java:25)
        at BankDemo.main(BankDemo.java:13)

возражение по существу дела

Она определяет два типа исключений и ошибок в Java.

  • JVM (Java Virtual Machine) исключение: исключение брошенный JVM или ошибок. Например: класс NullPointerException, класс ArrayIndexOutOfBoundsException, класс ClassCastException.
  • Исключение на уровне программы: Программа API программой или выброшен. Например, класс IllegalArgumentException, IllegalStateException класса.