Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
230102 5к / СПО / УПП.doc
Скачиваний:
36
Добавлен:
20.04.2015
Размер:
465.41 Кб
Скачать

2.1. Обработка критических ошибок и методы их локализации в языке Java..

Язык Javaпозволяет программисту описывать алгоритм обработки ошибок как обработку "бросаемых" исключений. Исключение - это попросту название некоторой ошибки. При возникновении ошибки происходит бросок исключения и возникает прерывание.JVMпроизводит поиск метода, обрабатывающего прерывание. Если обработка прерывания не указана, то происходит ошибка времени выполнения.

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

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

try {

if (i==0) { throw new Exeptioni;} //Бросок исключения

}

catch(Exeptioni e){

System.out.printin("Перехвачено исключение Exeptioni");

}

catch (Exeption2 e) {

}

catch (Exeption3 e) {

}

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

Любое исключение - это объект, являющийся экземпляром класса Exeption. Для определения своего собственного исключения следует только объявить класс для этого исключения.

class Exeptioni extends Exeption {...} // Объявление.исключения

public void MeMetod () throws Exeptioni, Exeption2 { ...}

// Исключение

// объявляется, но не перехватывается

Любое исключение, возникающее при выполнении метода, должно быть объявлено или перехвачено. Если исключение перехватывается, то управление передается соответствующему блоку catchвнутри метода. Если исключение объявляется, то управление будет передано "вниз" по иерархии вызовов методов методу, обрабатывающему это исключение.

3. Ввод/вывод данных в консольном режиме.

Для вывода данных в консольном режиме используется функция из пакета System. Этот пакет автоматически подключается любым компиляторомJava.

  • System.out.print(объект)- выводит строку текста на экран, курсор остается на текущей строке;

  • System.out.println(объект) – выводит строку теста, курсор переходит на следующую строку;

С вводом информации с клавиатуры дело обстоит сложнее, поскольку системный пакет имеет только объект связанный с потоком ввода. Для того, чтобы ввести информацию с клавиатуры нам необходимо связать этот объект с объектом выполняющим чтение потока. Для этого необходимо подключить класс java.io.InputStreamReader, который обеспечивает преобразование данных потока в текстовую информацию. Вся работа с файлами и потоками ввода вывода в случае ошибки генерирует так называемые исключительные ситуации для обработки которых необходимо подключить класс обработчик исключений ввода-выводаjava.io.IOException.

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

// Объявляем переменную в которой будет помещен

// результат ввода информации

String a;

// Определяем блок обработки исключительных ситуаций

try {

// Объявляем и создаем объект преобразования данных потока

// В текстовой вид

InputStreamReader is=new InputStreamReader(System.in);

// Объявляем текстовой буфер, длина которого соответствует

// максимальной длине строки.

char buf[] = new char[128];

// После этого в этот буфер производим чтение

is.read(buf);

// Этот буфер мы преобразовываем к строке

a=String.valueOf(buf);

// После этого закрываем блок обработки исключительных ситуаций.

}

// И описываем поведение системы в случае возникновения

// ошибки при чтении данных

catch (IO Exception e) {

System.out.println(e.getMessage());

a = null;

}

Для ввода числовой информации также необходимо сначала получить строку текста, после чего с помощью класса преобразователя преобразуется к значению числового типа. Для исполнения данной операции необходимо подключить библиотеку обработки ошибок преобразования чисел java.lang.NumbericFormatExceptionи класс – оболочку типа данных, к которой необходимо преобразоватьjava.lang.Double;

// Объявляем переменную в которой будет помещен

// результат ввода информации

double a;

// Определяем блок обработки исключительных ситуаций

try{

// Объявляем и создаем объект преобразования данных потока

// В текстовой вид

InputStreamReader is = new InputStreamReader(System.in);

// Объявляем текстовой буфер, длина которого соответствует

// максимальной длине строки.

char buf[] = new char[128];

// После этого в этот буфер производим чтение

is.read (buf);

//преобразовываем к вещественному типу

a=Double.valueOf(String.valueOf(buf).trim()).double Value();

// После этого закрываем блок обработки исключительных ситуаций.

}

// описываем поведение системы в случае возникновения

// ошибки при чтении данных

catch (IOException e){

System.out.println(e.getMessage());

a = 0;

}

// описываем поведение системы в случае возникновения

// ошибки при преобразовании текстовых данных в

// вещественное число

catch (NumbericFormatException e1) {

System.out.println (e1.getMessage());

a=0;

}

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

import java.io.IOException;

import java.io.InputStreamReader;

import java.lang.NumbericFormatReader;

import java.lang.Double;

// объявляем класс

Class m_cls {

// создаем функцию чтения строки

public String read_str() {

// Объявляем переменную в которой будет помещен

// результат ввода информации

String a;

// Определяем блок обработки исключительных ситуаций

try {

// Объявляем и создаем объект преобразования данных потока

// В текстовой вид

InputStreamReader is=new InputStreamReader(System.in);

// Объявляем текстовой буфер, длина которого соответствует

// максимальной длине строки.

char buf[] = new char[128];

// После этого в этот буфер производим чтение

is.read(buf);

// Этот буфер мы преобразовываем к строке

a=String.valueOf(buf);

// После этого закрываем блок обработки исключительных ситуаций.

}

// И описываем поведение системы в случае возникновения

// ошибки при чтении данных

catch (IO Exception e) {

System.out.println(e.getMessage());

a = null;

}

if (a = = null) return “”;

return a.trim();

}

// и функцию чтения вещественного числа

public double read_double() {

// Объявляем переменную в которой будет помещен

// результат ввода информации

double a = 0;

// Определяем блок обработки исключительных ситуаций

try {

a=Double.valueOf(read_str()).doubleValue();

}

// И описываем поведение системы в случае возникновения

// ошибки при чтении данных

catch (NumbericFormatException e){

System.out.println(e.getMessage());

a=0;

}

return a;

}

}

Соседние файлы в папке СПО