- •Иркутский государственный университет путей сообщения кафедра “информатика” программирование на языке java
- •Иркутск
- •Содержание
- •Предисловие
- •Алфавит языка
- •Ключевые слова
- •Типы данных
- •Литералы (константы)
- •Комментарии
- •Переменные
- •Математические функции
- •Выражения
- •Выражения целого типа
- •Примеры записи выражений целого типа:
- •Примеры вычислений выражений целого типа:
- •Выражения действительного типа
- •Примеры записи выражений действительного типа
- •Примеры вычислений выражений действительного типа:
- •Выражения логического типа
- •Операторы присваивания
- •Variable имяПеременной might not have been initialized
- •Примеры записи операторов присваивания:
- •Ввод и вывод данных
- •Ввод и вывод с помощью диалоговых окон
- •Import javax.Swing.*;
- •Консольный вывод
- •Консольный ввод с помощью класса Scanner
- •Import java.Util.*; //импорт пакета
- •Структура программы
- •Import javax.Swing.*;
- •Import java.Util.*;
- •Алгоритм и его свойства
- •Схемы алгоритмов
- •Пример записи алгоритма:
- •Базовые структуры
- •Цепочка
- •Ветвления
- •Альтернатива
- •If (условие)
- •Вариант 2 – с использованием операции конъюнкции
- •Import javax.Swing.*;
- •Int c, y1, y2, kl, day, month, year;
- •Часто встречающиеся ошибки программирования:
- •Import javax.Swing.*;
- •Переключатель
- •Int month;
- •Часто встречающиеся ошибки программирования:
- •Бесконечные циклы
- •Циклы с предусловием
- •Программа
- •Программа
- •Часто встречающиеся ошибки программирования:
- •Циклы с постусловием
- •Программа
- •Int month;
- •Циклы с параметром
- •Действия цикла:
- •Операторы прерывания break, continue, return, System.Exit
- •Структуры данных
- •Массивы
- •Import javax.Swing.*;
- •Import java.Util.*;
- •Int n, m, matrMin, matrMax;
- •Import javax.Swing.*;
- •Import java.Util.*;
- •Int n, vectorMin, vectorMax, temp;
- •VectorMin, vectorMax, n);
- •Import javax.Swing.*;
- •Import java.Util.*;
- •Int n, vectorMin, vectorMax, temp;
- •VectorMin, vectorMax, n);
- •Методы для работы с массивами
- •Класс String
- •Методы для работы со строками класса String
- •Класс StringBuffer
- •Методы для работы со строками класса StringBuffer
- •Import java.Io.*;
- •Import javax.Swing.*;
- •Import java.Io.*;
- •Import javax.Swing.*;
- •Обработка исключительных ситуаций
- •If (переменная name вышла за диапазон)
- •Import java.Io.*;
- •Import javax.Swing.*;
- •Import java.Io.*;
- •Import javax.Swing.*;
Обработка исключительных ситуаций
В любой программе, даже самой правильной, не имеющей синтаксических ошибок, могут возникнуть ошибки другого рода. Эти ошибки не связаны с синтаксисом программного кода, а связаны с алгоритмом выполнения программы: деление на ноль, выход за пределы массива, переполнение стека при рекурсии. Конечно, лучше отслеживать такие ошибки еще на стадии составления кода программы, то есть предусмотреть такие ситуации и застраховаться от них. Для этого можно использовать проверку выхода значений необходимых переменных за заданный диапазон:
If (переменная name вышла за диапазон)
{
действия программы в аварийной ситуации
}
На это уходит много времени, а сама программа превращается в набор таких проверок. Любая производственная программа, написанная на алгоритмических языках СилиPascal, состоит на2/3из них. Конечно, все случаи предусмотреть нельзя, поэтому рано или поздно какая-нибудь ошибочная ситуация приведет к аварийному завершению программы.
Внимание!Программа должна завершать работу, когда это нужно программисту, а не когда
она этого захочет!
В Javaдля таких целей существует специальное средство – обработка исключительных ситуаций.
Исключительная ситуация– этоошибка, которая возникает при выполнении программы.
Исключение– этообъект, который описывает исключительную ситуацию (ошибку).
При обработке ошибки используется бейсбольная терминология (ну как же, америкосы!). Говорят, что программа выбрасывает(throws) объект-исключение, если произошла исключительная ситуация. Этот объектпролетаетчерез всю программу, появившись сначала в том методе, где произошла ошибка. Программа в одном или нескольких местахпытается(try) егоперехватить(catch) и обработать. Для того, чтобы попытаться (try) перехватить объект-исключение, нужно весь код программы, в котором может возникнуть исключительная ситуация, охватить операторами:
try
{
проверяемый код программы
}
catch (тип исключения)
{
действия в исключительной ситуации
}
Каждый блок catch()перехватывает исключение только одного типа – того, который указан в его аргументе. Но можно написать несколько блоковcatch()для перехвата нескольких типов исключений.
Если исключительных ситуаций не было, то операторы блока tryвыполняются в обычном порядке, после чего выполняются операторы программы, следующие за блокомcatch () – блок перехвата не выполняется.
Если в блоке tryвозникла исключительная ситуация (ошибка), то выполнение этого блока прерывается, и идет перехват исключения в блокахcatch().Если тип этого исключения соответствует типу, указанному в качестве параметра очередного блокаcatch(), то выполняются операторы этого блока перехвата, после чего проверки в следующих блокахcatch ()не выполняются.
Пример: определить значение переменной действительного типаи целого типаi=y/x,причем значение знаменателя ввести с помощью диалогового окна:
package javaapplicationtry;
Import java.Io.*;
Import javax.Swing.*;
public class JavaApplicationTry
{
public static void main(String[] args) throws IOException
{
double x, y=5.0, z=0;
int i;
String input;
input=JOptionPane.showInputDialog("Введите значение знаменателя:");
try
{
x=Double.parseDouble(input); //преобразование типов
z=Math.sqrt(y/x); // извлечение квадратного корня
i=(int)y/(int)x; // целочисленное деление
System.out.println("x=" + x + " z=" + z + " i=" + i);
}
catch (ArithmeticException eArithmetic)
{ // перехват целочисленного деления на ноль
System.out.println("Ошибка: деление на ноль, " + eArithmetic);
}
catch (NumberFormatException eNumberFormat)
{ // перехват ошибки преобразования
System.out.println("Ошибка преобразования из строки в число, " + eNumberFormat);
}
System.out.println("В конце вызова z=" + z);
}
}
В этой программе eArithmetic – объект классаArithmeticException– арифметические ошибки,eNumberFormat – объект классаNumberFormatException –некорректное преобразование строки в число.
При вводе корректногозначения знаменателя, например,x=2.0, на консоль будет выведено:
x=2.0 z=1.5811388300841898 i=2
В конце вызова z=1.5811388300841898
Введем отрицательноезначение знаменателя:x=-2.0:
x=-2.0 z=NaN i=-2
В конце вызова z=NaN
Таким образом, извлечение квадратного корня изотрицательногочисла вJavaразрешенои дает значениеNaN (исключительная ситуацияне возникает).
Введем нулевоезначение знаменателя:x=0.0:
Ошибка: деление на ноль, java.lang.ArithmeticException: / by zero
В конце вызова z=Infinity
Таким образом, деление на нольдействительныхчисел вJavaразрешенои дает значениеInfinity (исключительная ситуацияне возникает). При делении на нольцелыхчисел возникает исключительная ситуация, формируется объект-исключениеeArithmetic, который и перехватывается блокомcatch (ArithmeticException eArithmetic).
Введемнекорректноезначение знаменателя:x=0,0:
Ошибка преобразования из строки в число, java.lang.NumberFormatException: For input string: "0,0"
В конце вызова z=0.0
При этом формируется объект-исключение eNumberFormat, который перехватывается блокомcatch (NumberFormatException eNumberFormat).
Во всех случаях после обработки исключительных ситуаций выполняется оператор, стоящий за всеми блоками catch (), в данном случае:
System.out.println("В конце вызова z=" + z);
Может случиться, что в блоке try возникла ошибка, но подходящего блокаcatchдля ее обработки нет. В этом случае исключениевыбрасываетсяиз метода и передается внешнему (вызывающему его) методу. Согласно правилам языкаJava, исключения, которые не обрабатываются в методе и выбрасываются из него, указываются в заголовке метода после ключевого словаthrows. Правда, нужно указывать не все классы исключений, а тольконеконтролируемые. Исключение передается выше по иерархии методов, и, если обработка его ни в одном из методов не предусмотрена, то используется обработчик исключительной ситуациипо умолчанию, что приводит к аварийному завершению работы программы.
Изменим предыдущую программу, вынеся деление в отдельный метод:
package javaapplicationtry;