- •Краткая историческая справка.
- •Преимущества языка Java.
- •Недостатки java:
- •Лекция 2. Этапы разработки java-приложений. Этапы разработки java-приложений.
- •Установка jdk.
- •Инсталляция исходных кодов библиотек
- •Инсталляция пакета документации.
- •Тестирование правильности установки и создание простейшей программы
- •Визуальные среды программирования.
- •Лекция 3. Переменные и типы данных. Переменные и типы данных.
- •Подробности о примитивных типах.
- •Лекция 4. Операторы и функции. Операторы и функции.
- •Операторы ветвлений и циклов.
- •Оператор цикла while.
- •Оператор цикла for.
- •Лекция 5. Объектно ориентированное программирование Объектно ориентированное программирование.
- •Определение объекта.
- •Инкапсуляция.
- •Наследование.
- •Полиморфизм (перегрузка).
- •Пример ооп – программы.
- •Отличие перегрузки функций от переопределения.
- •Отличие классов от интерфейсов.
- •Лекция 6. Массивы и строки. Массивы и строки.
- •Многомерные массивы.
- •Приведение типов и динамические массивы.
- •Строки в java.
- •Лекция 7. Организация ввода-вывода данных Организация ввода-вывода данных.
- •Функции стандартной библиотеки ввода/вывода.
- •Новая библиотека ввода/вывода.
- •Классы потокового ввода/вывода из пакета java.Io.
- •Лекция 8. Обработка исключений. Обработка исключений.
- •Классификация исключений.
- •Перехват исключений блоками try/catch.
- •Самостоятельное выбрасывание исключений.
- •Разработка собственных классов исключений.
- •Лекция 9. Потоки. Потоки.
- •1. Cпециальный класс Thread.
- •2. Реализация интерфейса Runnable.
- •Выбор между использованием класса Thread и интерфейса Runnable.
- •Синхронизация потоков с помощью оператора synchronized.
- •Синхронизация потоков с помощью семафоров.
- •Лекция 10. Подключаемые библиотеки java. Подключаемые библиотеки java.
- •Библиотека awt
- •Внутреннее устройство системы обработки событий awt.
- •Библиотека Swing.
Самостоятельное выбрасывание исключений.
В java существует возможность выброса исключений по усмотрению разработчика. При этом, так же как и в процессе перехвата исключений у разработчика есть выбор – обработать исключение самому, или передать его для обработки JVM.
Компилятор java не считает себя умнее разработчика, поэтому прежде чем выбрасывать исключение, необходимо уведомить кампилятор о том, что данный метод может выбросить исключение такого-то типа. Это указывается в сигнатуре функции после её заголовка, но перед открывающей скобкой тела функции. Если может быть выбрашено несколько исключений различного типа, названия их классов можно указать через запятую. После этого можно внутри блока try/catch выбрасывать исключение с помощью инструкции throw. Для примера, выбрасим самостоятельно исключение IOException из метода main(), но тоже самое можно сделать в любом пользовательском методе.
Обратите внимание, что обманывать компилятор с помощью добавления кода с возможностью появления соответствующей ошибки в данном случае необходимости нет.
Обратите так же внимание, что никакой реальной ошибки перед выбросом исключения на самом деле не было. Компилятор в данном случае "верит программисту на слово".
import java.io.IOException;
import java.io.File;
…
public class Welkom {
public static void main(String[] args) throws IOException { // добавлен класс исключения
try {
throw new IOException("моё исключение!");
} catch(IOException e) {
System.out.println("исключение обработано!");
System.out.println(e);
}
} }
В консоли будет выведено:
исключение обработано!
java.io.IOException: моё исключение!
Дело в том, что стандартные классы исключений обычно имеют по два конструктора, один из которых может принимать на вход строку с описанием исключения, чем мы и воспользовались. Если мы не хотим сами обрабатывать это исключение, то можно ограничиться блоком
try {
…
throw new IOException("моё исключение!");
…
} finally { }
без блока catch () { … }.
Однако выбрасывать исключение инструкцией throw … вне блока try/catch компилятор все же не позволяет.
Разработка собственных классов исключений.
Теперь мы можем перехватывать исключения, а также выбрасывать стандартные исключения самостоятельно. А как насчет создания нестандартных исключений? Оказывается java позволяет легко делать и это. Достаточно создать класс, производный от какого – либо наиболее подходящего стандартного класса и предупредить компилятор о возможности его появления путем добавления имени этого класса в сигнатуру функции.
Для примера, создадим собственный класс исключений BigBadaBoom и выбросим исключение этого типа:
import java.io.IOException;
import java.io.File;
public class Welkom {
static class BigBadaBoom extends IOException {
public BigBadaBoom() { }
public BigBadaBoom(String str) { super(str); }
}
public static void main(String[] args) throws BigBadaBoom {
try {
throw new BigBadaBoom("моё исключение!");
}
catch(BigBadaBoom e) {
System.out.println("исключение обработано!");
System.out.println(e);
} }
В консоли будет выведено:
исключение обработано!
welkom.Welkom$BigBadaBoom: моё исключение!
Класс BigBadaBoom объявлен статическим потому, что метод main() статический.
Поскольку мы намереваемся передавать классу – родителю текст описания ошибки, мы в классе BigBadaBoom объявили два конструктора, один из которых принимает на вход строку и передает её конструктору класса – родителя.
