Главная страница
Навигация по странице:

  • Индивидуальные задания

  • Контрольные вопросы

  • Лабораторная работа 1 2 лабораторная работа 2 31 лабораторная работа 3 44 лабораторная работа 4 74


    Скачать 1.76 Mb.
    НазваниеЛабораторная работа 1 2 лабораторная работа 2 31 лабораторная работа 3 44 лабораторная работа 4 74
    Дата12.03.2021
    Размер1.76 Mb.
    Формат файлаdoc
    Имя файлаOOP_Lab_Rus.doc
    ТипЛабораторная работа
    #184105
    страница27 из 31
    1   ...   23   24   25   26   27   28   29   30   31

    ЛАБОРАТОРНАЯ РАБОТА №7



    Тема: Обработка исключений.

    Цель: Изучить механизм обработки исключений Java

    Теоретические ведомости

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

    Рассмотренные вопросы:

    7.1. Исключения.

    7.2. Основные принципы обработки исключений.

    7.3. Типы исключений.

    7.4. Операторы try, catch и throw.

    7.5. Блок finally.

    7.6. Встроенные исключения.

    7.7. Создание собственных классов исключений.

    7.8. Особые случаи
    Обработка исключений

    7.1. Исключения

    При выполнении программы могут возникать ошибки. В одних случаях это вызвано ошибками программиста, в других - внешними причинами. Например, может возникнуть ошибка ввода/вывода при работе с файлом или сетевым соединением. В классических языках программирования, например, в С, требовалось проверять некое условие, которое указывало на наличие ошибки, и в зависимости от этого предпринимать те или иные действия.

    Например:

    ...

    int statusCode = someAction();

    if (statusCode){

    ... обработка ошибки

    } else {

    statusCode = anotherAction();

    if(statusCode) {

    ... обработка ошибки ...

    }

    }

    ...

    В Java появилось более простое и элегантное решение - обработка исключительных ситуаций.

    try{

    someAction();

    anotherAction();

    } catch(Exception e) {

    // обработка исключительной ситуации

    }

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

    7.2. Основные принципы обработки исключений.

    Исключение java представляет собой объект, который описывает исключительную (то есть, ошибочную) ситуацию, возникающую в части программного кода. Когда такая исключительная ситуация возникает, создается объект, представляющий исключение, который возбуждается в методе, вызвавшем ошибку. Этот метод может либо обработать исключение самостоятельно, либо пропустить eгo. В обоих случаях, в некоторой точке исключение перехватывается и обрабатывается. Исключения могут генерироваться системой времени выполнения java, либо они могут быть сгенерированы вручную вашим кодом. Исключения, которые возбуждает java, имеют отношение к фундаментальным ошибкам, которые нарушают правила языка java либо ограничения системы выполнения java. Вручную сгенерированные исключения обычно применяются для того, чтобы сообщить о некоторых ошибочных ситуациях тому, кто вызвал данный метод.

    Обработка исключений Jаvа управляется пятью ключевыми словами: try, catch, throw, throws и finally. Если кратко, они работают следующим образом. Операторы программы, которые вы хотите отслеживать на предмет исключений, помещаются в блок try. Если исключение возникает в блоке try, оно возбуждается. Ваш код может перехватить исключение (используя catch) и обработать егo некоторым осмысленным способом. Сгенерированные системой исключения автоматически возбуждаются системой времени выполнения java. Чтобы вручную возбудить исключение, используется ключевое слово throw. Любое исключение, которое возбуждается внутри метода, должно быть специфи­цировано в eгo интерфейсе ключевым словом throws. Любой код, который в обязатель­ном порядке должен быть выполнен после завершения блока try, помещается в блок finally. Ниже показана общая форма блока обработки исключений.

    try {

    // блок кода, в котором отслеживаются ошибки

    ­}

    catch (Тип­_исключения­_l ехОb) {

    // обработчик исключений типа ExceptionTypel

    ­}

    catch (Тип­_исключения_­2 ехОb) {

    // обработчик исключений типа ExceptionType2

    ­}

    / / ...

    finally {

    // блок кода, который должен быть выполнен после завершения блока try

    ­Здесь Тип ­_исключения ­– тип исключения, которое возникает.

    7.3. Типы исключений

    ­Все типы исключений являются подклассами встроенного класса Trowable. То есть Trowable расположен на вершине иерархии классов исключений. Немедленно под Trowable в ней находятся два подкласса, которые разделяют все исключения на две отдельные ветви. Одну ветвь возглавляет Exception. Этот класс используется для ис­ключительных условий, которые пользовательская программа должна перехватывать.

    Это также класс, от которого вы будете наследовать свои подклассы при создании ваших собственных типов исключений. У класса Exception имеется важный подкласс по имени RuntimeException. Исключения этого типа автоматически определяются для программ, которые вы пишете, и включают такие вещи, как деление на ноль и ошибочная индекса­ция массивов.

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

    ­7.4. Операторы try, catch и throw.

    Хотя обработчик исключений по умолчанию, который предоставляет система времени выполнения java, удобен для отладки, обычно вы захотите обрабатывать исключения самостоятельно. Это дает два существенных преимущества. Во-­первых, вы получаете возможность исправить ошибку. Во-вторых, предотвращается автоматическое прерыва­ние выполнения программы. Большинство пользователей будут недовольны (и это как минимум), если ваша программа будет останавливаться и распечатывать трассировку стека всякий раз при возникновении ошибки. К счастью, предотвратить это достаточно просто.

    Чтобы противостоять и обрабатывать ошибки времени выполнения, нужно просто по­местить код, который вы хотите наблюдать, внутрь блока try. Непосредственно за блоком try следует включить конструкцию catch, которая специфицирует тип перехватываемо­го исключения.

    Конструкция try-catch.

    В общем случае конструкция выглядит так:

    try {

    ...

    } catch(SomeExceptionClass e) {

    ...

    } catch(AnotherExceptionClass e) {

    ...

    }

    Работает она следующим образом. Сначала выполняется код, заключенный в фигурные скобки оператора try. Если во время его выполнения не происходит никаких нештатных ситуаций, то далее управление передается за закрывающую фигурную скобку последнего оператора catch, ассоциированного с данным оператором try.

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

    Возникла исключительная ситуация, класс которой указан в качестве параметра одного из блоков catch. В этом случае производится выполнение блока кода, ассоциированного с данным catch (заключенного в фигурные скобки). Далее, если код в этом блоке завершается нормально, то и весь оператор try завершается нормально и управление передается на оператор (выражение), следующий за закрывающей фигурной скобкой последнего catch. Если код в catch завершается не штатно, то и весь try завершается нештатно по той же причине.

    Если возникла исключительная ситуация, класс которой не указан в качестве аргумента ни в одном catch, то выполнение всего try завершается нештатно.

    Конструкция try-catch-finally.

    Оператор finally предназначен для того, чтобы обеспечить гарантированное выполнение какого-либо фрагмента кода. Вне зависимости от того, возникла ли исключительная ситуация в блоке try, задан ли подходящий блок catch, не возникла ли ошибка в самом блоке catch,- все равно блок finally будет в конце концов исполнен.

    Последовательность выполнения такой конструкции следующая: если оператор try выполнен нормально, то будет выполнен блок finally. В свою очередь, если оператор finally выполняется нормально, то и весь оператор try выполняется нормально.

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

    Если в списке операторов catch не находится такого, который обработал бы возникшее исключение, то все равно выполняется блок finally. В этом случае, если finally завершится нормально, весь try завершится ненормально по той же причине, по которой было нарушено исполнение try.

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

    Рассмотрим пример применения конструкции try-catch-finally.

    try {

    byte [] buffer = new byte[128];

    FileInputStream fis =

    new FileInputStream("file.txt");

    while(fis.read(buffer) > 0) {

    ... обработка данных ...

    }

    } catch(IOException es) {

    ... обработка исключения ...

    } finally {

    fis.flush();

    fis.close();

    }

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

    В конструкции try-catch-finally обязательным является использование одной из частей оператора catch или finally. То есть конструкция

    try {

    ...

    } finally {

    ...

    }

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

    Если обработка исключительной ситуации в коде не предусмотрена, то при ее возникновении выполнение метода будет прекращено и исключительная ситуация будет передана для обработки коду более высокого уровня. Таким образом, если исключительная ситуация произойдет в вызываемом методе, то управление будет передано вызывающему методу и обработку исключительной ситуации должен произвести он. Если исключительная ситуация возникла в коде самого высокого уровня (например, методе main()), то управление будет передано исполняющей системе Java и выполнение программы будет прекращено (более точно - будет остановлен поток исполнения, в котором произошла такая ошибка).

    Использование оператора throw.

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

    Например:

    ...

    public int calculate(int theValue) {

    if( theValue < 0) {

    throw new Exception(

    "Параметр для вычисления не должен

    быть отрицательным");

    }

    }

    ...

    В данном случае предполагается, что в качестве параметра методу может быть передано только положительное значение; если это условие не выполнено, то с помощью оператора throw порождается исключительная ситуация. (Для успешной компиляции также требуется в заголовке метода указать throws Exception - это выражение рассматривается ниже.)

    Метод должен делегировать обработку исключительной ситуации вызвавшему его коду. Для этого в сигнатуре метода применяется ключевое слово throws, после которого должны быть перечислены через запятую все исключительные ситуации, которые может вызывать данный метод. То есть приведенный выше пример должен быть приведен к следующему виду:

    ...

    public int calculate(int theValue)

    throws Exception {

    if( theValue < 0) {

    throw new Exception(

    "Some descriptive info");

    }

    }

    ...

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

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

    В этом случае ошибка появляется вторично.

    Например:

    ...

    try {

    ...

    } catch(IOException ex) {

    ...

    // Обработка исключительной ситуации

    ...

    // Повторное возбуждение исключительной

    // ситуации

    throw ex;

    }

    Рассмотрим еще один случай.

    Предположим, что оператор throw применяется внутри конструкции try-catch.

    try {

    ...

    throw new IOException();

    ...

    } catch(Exception e) {

    ...

    }

    В этом случае исключение, возбужденное в блоке try, не будет передано для обработки на более высокий уровень иерархии, а обработается в пределах блока try-catch, так как здесь содержится оператор, который может это исключение перехватить. То есть произойдет неявная передача управления на соответствующий блок catch.

    ­ 7.5. Блок finaly.

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

    Например, если метод при входе открывает файл и закрывает eгo при выходе, вероятно, вы не захотите, чтобы выполнение кода, закрывающего файл, было пропущено из-­за при­менения механизма обработки исключений. Ключевое слово finally предназначено для того, чтобы справиться с такой ситуацией.

    finally создает блок кода, который будет выполнен после завершения блока try/catch, но перед кодом, следующим за try/catch. Блок finally выполняется независи­мо от того, возбуждено исключение или нет. Если исключение возбуждено, блок finally выполняется, даже если ни один оператор catch этому исключению не соответствует. В любой момент, когда метод собирается возвратить управление вызывающему коду из­нутри блока try / catch ­ из-за необработанного исключения, или явным применением оператора return ­ блок finally будет выполнен перед возвратом управления из мe­тода. Это может быть удобно для закрытия файловых дескрипторов либо освобождения других ресурсов, которые были получены в начале метода и должны быть освобождены перед возвратом. Оператор finally необязателен. Однако каждый оператор try требует наличия, по крайней мере, одного оператора catch или finally. Ниже приведен пример программы, которая показывает три метода, возвращающих управление разными спосо­бами, но ни один из них не пропускает выполнения блока finally.

    class FinallyDemo {

    // Возбуждает исключение из метода.

    static void procA() {

    try {

    Sуstеm.оut.рrintln("внутри procA");

    throw new RиntimeException ("демо") ;

    } finally {

    Sуstеm.оut.рrintln("блок finally procA");

    ­}

    }

    // Возврат управления в блоке try.

    static void procB() {

    try {

    Sуstеm.оut.рrintln("ВНутри procB");

    return;

    ­} finally {

    Sуstеm.оut.рrintln("блок finally procB");

    }

    }

    ­//Нормальное выполнение блока try.

    static void procC () {

    try {

    Sуstеm.оut.рrintln ("внутри procC");

    } finally {

    Sуstеm.оut.рrintln ("блок finally procC");

    ­}

    }

    public static void main(String args[])

    try {

    procA() ;

    } catch (Exception е) {

    Sуstеm.оut.рrintln ("Исключение перехвачено");

    ­}

    procB () ;

    procC();

    }

    }

    ­В этом примере procA () преждевременно прерывает выполнение в блоке try, возбу­ждая исключение. Блок finally все равно выполняется. В procB () возврат управления осуществляется в блоке try оператором return. Блок finally выполняется перед воз­вратом из procB (). В procC () блок try выполняется нормально, без ошибок. Однако блок finally выполняется все равно.

    ­Если блок finally ассоциируется с try, то finally будет выполнен по завершении try.

    Вот результат, сгенерированный предыдущей программой:

    ­внутри procA

    блок finally procA

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

    внутри procB

    блок finally procB

    внутри procC

    блок finally procC

    ­7.6. Встроенные исключения.

    Внутри стандартного пакета java.lang определено несколько классов исключений. Некоторые из них использовались в предшествующих примерах. Наиболее общие из этих исключений являются подклассами стандартноrо типа RuntimeException. Как уже объяснялось ранее, эти исключения не нужно включать в список throws метода ­ они называются непроверяемыми исключениями, поскольку компилятор не проверяет факт обработки или возбуждения методом таких исключений. Непроверяемые исключения, определенные в java.lang, описаны в табл. 7.1. В табл. 7.2 перечислены те из исключений, определенных в java.lang, которые должны быть включены в списки throws методов, которые могут их генерировать, и не обрабатывают самостоятельно. Они назы­ваются проверяемыми исключениями. В java также определено несколько других типов исключений, имеющих отношение к библиотекам классов.

    Таблица 7.1. Непроверяемые подклассы RunTimeException, пределенные java.lang

    Исключение

    Описание

    ArithmeticException

    Арифметическая ошибка, такая как деление на ноль.

    ArrayIndexOutOfBoundsException

    Выход индекса за границу массива.

    ArrayStoreException

    Присваивание элементу массива объекта несовмести­мого типа

    ClassCastException

    Неверное приведение.

    EnumConstantNotPresentException

    Попытка использования неопределенного значения перечисления.

    IllegalArgumentException

    Неверный аргумент использован при вызове метода.

    IllegalMonitorStateException

    Неверная операция мониторинга, такая как ожидание незаблокированного потока.

    IllegalStateException

    Окружение или приложение в некорректном состоянии.

    IllegalThreadStateException

    Запрошенная операция несовместима с текущим coстоянием потока.

    IndexOutOfBoundsException

    Некоторый тип индекса вышел за допустимые пределы.

    NegativeArraySizeException

    Создан массив отрицательного размера.

    NullPointerException

    Неверное использование нулевой ссылки.

    NumberFormatException

    Неверное преобразование строки в числовой формат.

    SecurityException

    Попытка нарушения безопасности.

    StringlndexOutOfBounds


    Попытка использования индекса за пределами строки.

    TypeNotPresentException

    Тип не найден (добавлено в J2SE 5).

    unsupportedOperationException

    Обнаружена неподдерживаемая операция.


    Таблица 7.2. Проверяемые исключения, определенные в java.lang

    Исключение

    Описание

    ClassNotFoundException

    Класс не найден.

    CloneNotSupportedException

    Попытка клонировать объект, который не реализует интерфейс Cloneable.

    IllegalAccessException

    Доступ к классу не разрешен.

    InstantiationException

    Попытка создать объект абстрактного класса или интерфейса.

    InterruptedException

    Один поток прерван другим потоком.

    NoSuchFieldException

    Запрошенное поле не существует.

    NoSuchМethodException

    Запрошенный метод не существует.


    7.7. Создание собственных классов исключений.

    Хотя встроенные исключения java обрабатывают большинство частых ошибок, вероятно, вам потребуется создать ваши собственные типы исключений для обработки ситуа­ций, специфичных для ваших приложений. Это достаточно просто сделать: просто оп­ределите подкласс Exception (который, разумеется, является подклассом Throwable). Ваши подклассы не обязаны реализовывать что­-либо ­ важно само их присутствие в системе типов, которое позволит использовать их как исключения.

    Класс Exception не определяет никаких собственных методов. Естественно, он насле­дует методы, представленные в Throwable. Таким образом, всем исключениям, включая те, что вы создадите сами, доступны методы, определенные в Throwable. Они все пере­числены в табл. 7.3.

    ­Таблица 7.3. Методы, определенные в Тhrowable

    Метод

    Описание

    Throwable fillInStackTrace(­)

    Возвращает объект Throwable, содержащий пол­ную трассировку стека. Этот объект может быть возбужден повторно.

    Throwable getCause()

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

    String getLocalizedМessage()

    Возвращает локализованное описание исключения.

    String getMessage()

    Возвращает описание исключения

    StackTraceElement[] getStackTrace()

    Возвращает массив, содержащий трасси­ровку стека и состоящий из элементов типа StackTraceElement. Метод в верхушке стека ­ это метод, который был вызван непосредственно перед тем, как было возбуждено исключение. Этот метод содержится в первом элементе массива. Класс StackTraceElement дает вашей программе доступ к информации о каждом элементе в трассировке, такой как имя eгo метода.

    Throwable initCause(

    Throwable исключение)

    Ассоциирует исключение с вызывающим исклю­чением, как причиной этоrо вызывающего исклю­чения. Возвращает ссылку на исключение.

    void printStackTrace()

    Отображает трассировку стека.

    void printStackTrace (PrintStream ПОТОК)

    Посылает трассировку стека в заданный поток.

    void printStackTrace (PrintWriter ПОТОК)

    Посылает трассировку стека в заданный поток.

    void setStackTrace(

    StackTraceElement элементы[])

    Посылает трассировку стека в элементы, пере­

    данные в элементы. Этот метод предназначен для специализированных приложений, а не для ноpмального применения.

    String toString()

    Возвращает объект String, содержащий описание исключения. Этот метод вызывается из println () при выводе объекта Throwable.


    ­Вы можете также переопределить один или более из этих методов в собственных клас­сах исключений.

    Exception определяет четыре конструктора. Два были добавлены в JDK 1.4 для под­держки цепочек исключений. Другие два показаны здесь:

    ­Exception ()

    Exception(String msg)

    Первая форма создает исключение, не имеющее описания. Вторая ­ позволяет специ­фицировать описание исключения.

    Хотя указание такого описания часто полезно при создании исключения, иногда все же лучше переопределить toString (), и вот почему. Версия toString(), определенная Throwable (от которого наследуется Exception) сначала отображает имя исключения, за которым следует двоеточие, а после него ­ ваше описание. Переопределив toString (), вы можете предотвратить отображение имени исключения и двоеточия. Это проясняет вывод, что весьма желательно в некоторых случаях.

    7.8 Особые случаи

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

    Рассмотрим такую ситуацию:

    import java.io.*;

    public class Test {

    public Test() {

    }

    public static void main(String[] args) {

    Test test = new Test();

    try {

    test.doFileInput("bogus.file");

    }

    catch (IOException ex) {

    System.out.println("Second exception handle stack trace");

    ex.printStackTrace();

    }

    }

    private String doFileInput(String fileName)

    throws FileNotFoundException,IOException {

    String retStr = "";

    java.io.FileInputStream fis = null;

    try {

    fis = new java.io.FileInputStream(fileName);

    }

    catch (FileNotFoundException ex) {

    System.out.println("First exception handle stack trace");

    ex.printStackTrace();

    throw ex;

    }

    return retStr;

    }

    }

    Результат работы будет выглядеть следующим образом:

    java.io.FileNotFoundException: bogus.file (The system cannot find

    the file specified)

    at java.io.FileInputStream.open(Native Method)

    at java.io.FileInputStream.(FileInputStream.java:64)

    at experiment.Test.doFileInput(Test.java:33)

    at experiment.Test.main(Test.java:21)

    First exception handle stack trace

    java.io.FileNotFoundException: bogus.file (The system cannot find

    the file specified)

    at java.io.FileInputStream.open(Native Method)

    at java.io.FileInputStream.(FileInputStream.java:64)

    at experiment.Test.doFileInput(Test.java:33)

    at experiment.Test.main(Test.java:21)

    Second exception handle stack trace

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

    Рассмотрим другой пример:

    import java.io.*;

    public class Test {

    public Test() {

    }

    public static void main(String[] args) {

    Test test = new Test();

    try {

    test.doFileInput();

    }

    catch (IOException ex) {

    System.out.println("Exception hash code " + ex.hashCode());

    ex.printStackTrace();

    }

    }

    private String doFileInput()

    throws FileNotFoundException,IOException{

    String retStr = "";

    java.io.FileInputStream fis = null;

    try {

    fis = new java.io.FileInputStream("bogus.file");

    }

    catch (FileNotFoundException ex) {

    System.out.println("Exception hash code " + ex.hashCode());

    ex.printStackTrace();

    fis = new java.io.FileInputStream("anotherBogus.file");

    throw ex;

    }

    return retStr;

    }

    }

    java.io.FileNotFoundException: bogus.file (The system cannot find

    the file specified)

    at java.io.FileInputStream.open(Native Method)

    at java.io.FileInputStream.(FileInputStream.java:64)

    at experiment.Test.doFileInput(Test.java:33)

    at experiment.Test.main(Test.java:21)

    Exception hash code 3214658

    java.io.FileNotFoundException: (The system cannot find the path

    specified)

    at java.io.FileInputStream.open(Native Method)

    at java.io.FileInputStream.(FileInputStream.java:64)

    at experiment.Test.doFileInput(Test.java:38)

    at experiment.Test.main(Test.java:21)

    Exception hash code 6129586

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

    1. Вычислить и отобразить факториал числа, заданного в командной строке. Обработать все возможные ошыбки пользовательского ввода.

    2. Написать программу, получающую в качестве аргументов в командной строке два числа и печатующую подстроку заданной строки, определенную заданными числами. Например,

    hello 1 3 должна вывести ell

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

    1. Для заданной целой матрицы размером m x n определить индексы всех ее седловых точек. Элемент матрицы назовем седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот, является наибольшим в своей строке и наименьшим в своем столбце.

    2. Реализовать приложение, вычисляющее для последовательности чисел, представляющих величины углов, следующие тригонометрические функции:

    • сумма синусов/косинусов значений,

    • разность синусов/косинусов значений,

    • произведение синусов/косинусов введенных значений.

    Единица измерения углов должна указываться как параметр командной строки. Для представления единиц измерения и спользуйте константы с типом int. Для хранения значений, необходимо использоват массив с типом double. Объявления методов должны выглядет следующим образом:

    / **

    @param angles – массив значений углов;

    @param type -единица измерения, имеющее значение о -

    ной из констант

    @return сумму синусов значений углов;

    */

    public static double

    getSumSinuses(double[] angles,int type);

    С помощью перегрузки реализуйте методы, позволяющие указывать количество значащих знаков для резул татов выполнения операций. Дополнит приложение, таким образом, чтобы имелась возможность формирования исходной числовой последовательности числами, сформированными генератором случайных чисел. Реализовать класс объявляемой исключительной ситуации, для проверки корректности вводимых данных. Объект данной исключительной ситуации содержать в себе информацию о значении, обработка которого вызвала данную исключительную ситуацию.
    Контрольные вопросы

    1. Что такое исключение.

    2. Основные принципы обработки исключений.

    3. Какие основные типы исключений вы можете назвать.

    4. Для чего используются операторы try, catch и throw.

    5. В каких ситуациях применяется слово finally.

    6. Какие классы исключений определены внутри стандартного пакета java.lang.

    7. Как создать собственный класс исключений.


    Список используемой литературы

    Основная литература

    1. Г.Шилдт. Полный справочник по Java SE6 , 7-е изд. – М.: "Вильямс",2007

    2. Б.Эккель. Философия Java , 4е изд. – М.: "Питер" ,2009

    3. Шилдт Г., Ноутон П. Java 2– М.: "Вильямс", 2007

    Дополнительная литература

    1. Нотон П.JAVA:Справ.руководство:Пер.с англ./Под ред.А.Тихонова.-М.:БИНОМ:Восточ.Кн.Компания,1996:Восточ.Кн.Компания.-447с..-(Club Computer)

    2. Патрик Нотон, Герберт Шилдт Полный справочник по Java.- McGraw-Hill,1997, Издательство "Диалектика",1997

    3. Дэвид Флэнэген Java in a Nutshell.- O'Reilly & Associates, Inc., 1997, Издательская группа BHV, Киев, 1998

    4. Ренеган Э.Дж.(мл.)1001 адрес WEB для программистов:Новейший путеводитель программиста по ресурсам World Wide Web:Пер.с англ..-Минск:Попурри,1997.-512с.ил.

    5. Сокольский М.В.Все об Intranet и Internet.-М.:Элиот,1998.-254с.ил.

    6. Чен М.С. и др.Программирование на JAVA:1001 совет:Наиболее полное руководство по Java и Visual J++:Пер.с англ./Чен М.С.,Грифис С.В.,Изи Э.Ф..-Минск:Попурри,1997.-640с.ил.+ Прил.(1диск.)

    7. Майкл Эферган Java: справочник.- QUE Corporation, 1997, Издательство "Питер Ком", 1998

    8. Джо Вебер Технология Java в подлиннике.- QUE Corporation, 1996, "BHV-Санкт-Петербург",1997

    9. Джейсон Мейнджер Java: Основы программирования.- McGraw-Hill,Inc.,1996, Издательская группа BHV, Киев,1997

    10. И.Ю.Баженова Язык программирования Java.- АО "Диалог-МИФИ", 1997

    11. Джон Родли Создание Java-апплетов.- The Coriolis Group,Inc.,1996, Издательство НИПФ "ДиаСофт Лтд.",1996

    12. Майкл Томас, Пратик Пател, Алан Хадсон, Доналд Болл(мл.) Секреты программирования для Internet на Java.- Ventana Press, Ventana Communications Group, U.S.A.,1996, Издательство "Питер Пресс", 1997

    13. Аарон И.Волш Основы программирования на Java для World Wide Web.- IDG Books Worldwide,Inc.,1996, Издательство "Диалектика",1996

    14. Кен Арнольд, Джеймс Гослинг Язык программирования Java.- Addison-Wesley Longman,U.S.A.,1996, Издательство "Питер-Пресс", 1997

    15. Нейл Бартлетт, Алекс Лесли, Стив Симкин Программирование на Java. Путеводитель.- The Coriolis Group,Inc.,1996, Издательство НИПФ "ДиаСофт Лтд.",1996

    16. Крис Джамса Библиотека программиста Java.- Jamsa Press, 1996, ООО "Попурри", 1996

    1   ...   23   24   25   26   27   28   29   30   31


    написать администратору сайта