Spec-Zone .ru
спецификации, руководства, описания, API
Домашняя страница > Существенные Классы > Исключения

Ответы на Вопросы и Упражнения

Вопросы

  1. Вопрос: действительно ли следующий код является законным?
    try {
        
    } finally {
       
    }
    
    Ответ: Да, это является законным — и очень полезный A try у оператора не должно быть a catch блокируйте, если у этого есть a finally блок. Если код в try у оператора есть многократные точки выхода и не связанный catch пункты, код в finally блок выполняется независимо от того как try из блока выходят. Таким образом имеет смысл обеспечивать a finally блокируйте всякий раз, когда есть код, который должен всегда выполняться. Это включает код восстановления ресурса, такой как код, чтобы закрыть потоки ввода-вывода.
  2. Вопрос: Какие типы исключения могут быть пойманы следующим обработчиком?
    catch (Exception e) {
         
    }
    
    Что не так с использованием этого типа обработчика исключений?

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

  3. Вопрос: Есть ли что-то не так с этим обработчиком исключений как записано? Это кодирует компиляцию?
    try {
    
    } catch (Exception e) {
       
    } catch (ArithmeticException a) {
        
    }
    
    Ответ: Этот первый обработчик ловит исключения типа Exception; поэтому, это ловит любое исключение, включая ArithmeticException. Второй обработчик никогда не мог достигаться. Этот код не будет компилировать.
  4. Вопрос: Соответствуйте каждую ситуацию в первом списке с элементом во втором списке.
    1. int[] A;
      A[0] = 0;
    2. JVM начинает выполнять Вашу программу, но JVM не может найти классы платформы Java. (Классы платформы Java находятся в classes.zip или rt.jar.)
    3. Программа читает поток и достигает end of stream маркер.
    4. Прежде, чем закрыть поток и после достижения end of stream маркер, программа пытается считать поток снова.
    1. __ ошибка
    2. __ проверенное исключение
    3. __ ошибка компиляции
    4. __ никакое исключение

    Ответ:

    1. 3 (ошибка компиляции). Массив не инициализируется и не будет компилировать.
    2. 1 (ошибка).
    3. 4 (никакое исключение). Когда Вы считаете поток, Вы ожидаете там быть концом потокового маркера. Следует использовать исключения, чтобы поймать неожиданное поведение в Вашей программе.
    4. 2 (проверенное исключение).

Упражнения

  1. Осуществление: Добавьте a readList метод к ListOfNumbers.java. Этот метод должен читать в int значения от файла, напечатайте каждое значение, и добавьте их до конца вектора. Следует зафиксировать все соответствующие ошибки. Вы будете также нуждаться в текстовом файле, содержащем числа, чтобы читать в.

    Ответ: См. ListOfNumbers2.java.

  2. Осуществление: Измените следующий cat метод так, чтобы это скомпилировало:
    public static void cat(File file) {
        RandomAccessFile input = null;
        String line = null;
    
        try {
            input = new RandomAccessFile(file, "r");
            while ((line = input.readLine()) != null) {
                System.out.println(line);
            }
            return;
        } finally {
            if (input != null) {
                input.close();
            }
        }
    }
    

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

    public static void cat(File file) {
        RandomAccessFile input = null;
        String line = null;
    
        try {
            input = new RandomAccessFile(file, "r");
            while ((line = input.readLine()) != null) {
                System.out.println(line);
            }
            return;
        } catch(FileNotFoundException fnf) {
            System.err.format("File: %s not found%n", file);
        } catch(IOException e) {
            System.err.println(e.toString());
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch(IOException io) {
                }
            }
        }
    }
    
«ПредыдущийTOC

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Вопросы и Упражнения