| Назад
    Вперед 1.6. Обработка исключенийВ примере демонстрируются приемы обработки
    исключений нескольких типов, возникающих в
    приложениях Java.  Исходный текст примера Архив проекта для Java WorkShop 2.0  Немного теорииМеханизм исключений, предусмотренный в языке
    программирования Java, упрощает обработку ошибок.
    Вместо того чтобы проверять значение,
    возвращаемое функциями и методами, вы можете
    использовать для обнаружения и обработки ошибок
    структурные операторы, такие как try и catch.  Методы стандартных библиотек классов Java
    возбуждают исключения при возникновении
    ошибочных ситуаций. Заключив "ненадежный" с
    точки зрения возникновения ошибок код в блок try,
    вы можете перехватить и обработать исключения в
    блоке catch.  Заметим, что исключения возникают и в таких
    распространенных ситуациях, как выход за пределы
    массива или строки в процессе индексации,
    деление на нуль, попытка использования ссылки со
    значением null, недопустимое преобразование
    классов и так далее. С помощью исключений все
    подобные ошибки нетрудно обнаружить и
    обработать во время выполнения приложения.  Описание примераВ нашем примере мы покажем типичные ситуации, в
    которых возникают исключения.  Исключение ArrayIndexOutOfBoundsExceptionЭто исключение возникает, когда программа
    пытается адресовать элементы за пределами
    массива.  В нашем примере мы используем исключение
    ArrayIndexOutOfBoundsException для завершения цикла обработки
    массива при достижении его границы:  int i = 0;
int[] nArray = new int[5];
    
while(true)
{
  try
  {
    nArray[i] = i;
  }
  catch(Exception ex)
  {
    System.out.println("\n" + ex.toString()); 
    break;
  }
      
  System.out.print(i); 
  i++;
}Если не предусмотреть обработку исключения,
    программа завершится аварийно. Как только
    значение переменной i достигнет пяти, будет
    вызван системный обработчик исключений.  Наш обработчик, заданный в теле оператора catch,
    выводит название исключения на консоль, а затем
    прерывает выполнение цикла при помощи оператора
    break. Таким образом, программа продолжает свою
    работу "штатным" образом несмотря на
    предпринятую попытку выхода за границы массива.  Сообщение об исключении, отображенное
    приведенным выше фрагментом кода на консоли,
    выглядит следующим образом:  01234
java.lang.ArrayIndexOutOfBoundsException: 5 Исключение ArithmeticExceptionНиже мы выполняем попытку деления числа 5 на
    нуль:  i = 0;
try
{
  i = 5/i;
}
catch(Exception ex)
{
  System.out.println(ex.toString()); 
}В результате такой попытки возникает
    исключение ArithmeticException и наша программа выводит
    на консоль соответствующее сообщение,
    показанное ниже:  java.lang.ArithmeticException: / by zero Исключение ArrayStoreExceptionЕсли попытаться записать в ячейку массива
    ссылку на объект неправильного типа, возникнет
    исключение ArrayStoreException.  Ниже мы создаем массив класса Object,
    предназначенный для хранения строк класса String:  Object szStr[] = new String[10];
    
try
{
  szStr[0] = new Character('*');
}
catch(Exception ex)
{
  System.out.println(ex.toString()); 
}При попытке записать в первый элемент этого
    массива ссылку на объект класса Character возникает
    исключение:  java.lang.ArrayStoreException Исключение ClassCastExceptionВ языке программирования Java вы не можете
    выполнять явное преобразование типов
    произвольным образом. Если выполнить такое
    преобразование для классов, не связанных
    "узами" наследования, или другим
    недопустимым способом,  возникнет исключение
    ClassCastException.  Ниже мы создаем ссылку на объект класса Character,
    а затем пытаемся выполнить преобразование этой
    ссылки к типу Byte:  Object ch = new Character('*');
    
try
{
  System.out.println((Byte)ch);
}
catch(Exception ex)
{
  System.out.println(ex.toString()); 
}В результате возникает исключение:  java.lang.ClassCastException: 
  java.lang.Character Исключение NegativeArraySizeExceptionЭто исключение возникает при попытке создать
    массив отрицательного размера.  В приведенном ниже фрагменте кода мы создаем
    массив с размером -5:  try
{
  int[] nNegArray = new int[-5];
}
catch(Exception ex)
{
  System.out.println(ex.toString()); 
}При этом возникает исключение NegativeArraySizeException:  java.lang.NegativeArraySizeException Исключение NullPointerExceptionЕсли попытаться использовать в программе
    ссылку, содержащую значение null, возникнет
    исключение NullPointerException.  Ниже мы создаем ссылку на массив nNulArray,
    записываем в нее значение null, а затем пытаемся
    определить размер массива, вызывая для этого
    метод length:  int[] nNulArray = new int[5];
nNulArray = null;
    
try
{
  i = nNulArray.length;
}
catch(Exception ex)
{
  System.out.println(ex.toString()); 
}В результате возникает исключение:  java.lang.NullPointerException Исключение StringIndexOutOfBoundsExceptionВ Java есть методы, позволяющие работать с
    отдельными символами строк класса String. Например,
    метод charAt позволяет извлечь символ,
    расположенный в заданной позиции. Если указать
    позицию, лежащую за границей строки, возникнет
    исключение StringIndexOutOfBoundsException.  Ниже мы предпринимаем попытку извлечения
    десятого символа из строки, в которой имеется
    только три символа:  String szShortString = "123";
    
try
{
  char chr = szShortString.charAt(10);
}
catch(Exception ex)
{
  System.out.println(ex.toString()); 
}При этом возникает исключение, а на экране
    появляется сообщение следующего вида:  java.lang.StringIndexOutOfBoundsException: 
  String index out of range: 10 Назад Вперед |