- •Аннотация
- •Лекция 1. Что такое Java? История создания.
- •1. Что такое Java?
- •2. История создания Java
- •2.1. Сложности внутри Sun Microsystems
- •2.2. Проект Green
- •2.3. Компания FirstPerson
- •2.4. World Wide Web
- •2.5. Возрождение Oak
- •2.6. Java выходит в свет
- •3. История развития Java
- •3.1. Браузеры
- •3.2. Сетевые компьютеры
- •3.3. Платформа Java
- •4. Заключение
- •5. Контрольные вопросы
- •Аннотация
- •1. Основы объектно-ориентированного программирования
- •1.1. Методология процедурно-ориентированного программирования
- •1.2. Методология объектно-ориентированного программирования
- •1.3. Объекты
- •1.3.1. Состояние.
- •1.3.2. Поведение
- •1.3.3. Уникальность
- •1.4. Классы
- •1.4.1. Инкапсуляция
- •1.4.2. Полиморфизм
- •1.5. Типы отношений между классами
- •1.5.1. Агрегация
- •1.5.2. Ассоциация
- •1.5.3. Наследование
- •1.5.4. Метаклассы
- •1.6. Достоинства ООП
- •1.7. Недостатки ООП
- •1.8. Заключение
- •1.9. Контрольные вопросы
- •Аннотация
- •Лекция 3. Лексика языка
- •1. Лексика языка
- •1.1. Кодировка
- •1.2. Анализ программы
- •1.2.1. Пробелы
- •1.2.2. Комментарии
- •1.2.3. Лексемы
- •1.3. Виды лексем
- •1.3.1. Идентификаторы
- •1.3.2. Ключевые слова
- •1.3.3. Литералы
- •1.3.3.1. Целочисленные литералы
- •1.3.3.2. Дробные литералы
- •1.3.3.3. Логические литералы
- •1.3.3.4. Символьные литералы
- •1.3.3.5. Строковые литералы
- •1.3.3.6. Null литерал
- •1.3.3.7. Разделители
- •1.3.3.8. Операторы
- •1.3.3.9. Заключение
- •1.4. Дополнение: Работа с операторами
- •1.4.1. Операторы присваивания и сравнения
- •1.4.2. Арифметические операции
- •1.4.3. Логические операторы
- •1.4.4. Битовые операции
- •1.5. Заключение
- •1.6. Контрольные вопросы
- •Аннотация
- •Лекция 4. Типы данных
- •1. Введение
- •2. Переменные
- •3. Примитивные и ссылочные типы данных
- •3.1. Примитивные типы
- •3.2. Целочисленные типы
- •4. Дробные типы
- •5. Булевский тип
- •6. Ссылочные типы
- •6.1. Объекты и правила работы с ними
- •6.2. Класс Object
- •6.3. Класс String
- •6.4. Класс Class
- •7. Заключение
- •8. Заключение
- •9. Контрольные вопросы
- •Аннотация
- •Лекция 5. Имена. Пакеты
- •1. Введение
- •2. Имена
- •2.1. Простые и составные имена. Элементы.
- •2.2. Имена и идентификаторы
- •2.3. Область видимости (введение)
- •3. Пакеты
- •3.1. Элементы пакета
- •3.2. Платформенная поддержка пакетов
- •3.3. Модуль компиляции
- •3.3.1. Объявление пакета
- •3.3.2. Импорт-выражения
- •3.3.3. Объявление верхнего уровня
- •3.4. Уникальность имен пакетов
- •4. Область видимости имен
- •4.1. "Затеняющее" объявление (Shadowing)
- •4.2. "Заслоняющее" объявление (Obscuring)
- •5. Соглашения по именованию
- •6. Заключение
- •7. Контрольные вопросы
- •Аннотация
- •Лекция 6. Объявление классов
- •1. Введение
- •2. Модификаторы доступа
- •2.1. Предназначение модификаторов доступа
- •2.2. Разграничение доступа в Java
- •3. Объявление классов
- •3.1. Заголовок класса
- •3.2. Тело класса
- •3.3. Объявление полей
- •3.4. Объявление методов
- •3.5. Объявление конструкторов
- •3.6. Инициализаторы
- •4. Дополнительные свойства классов
- •4.1. Метод main
- •4.2. Параметры методов
- •4.3. Перегруженные методы
- •5. Заключение
- •6. Контрольные вопросы
- •Аннотация
- •Лекция 7. Преобразование типов
- •1. Введение
- •2. Виды приведений
- •2.1. Тождественное преобразование
- •2.2. Преобразование примитивных типов (расширение и сужение)
- •2.3. Преобразование ссылочных типов (расширение и сужение)
- •2.4. Преобразование к строке
- •2.5. Запрещенные преобразования
- •3. Применение приведений
- •3.1. Присвоение значений
- •3.2. Вызов метода
- •3.3. Явное приведение
- •3.4. Оператор конкатенации строк
- •3.5. Числовое расширение
- •3.5.1. Унарное числовое расширение
- •3.5.2. Бинарное числовое расширение
- •4. Тип переменной и тип ее значения
- •5. Заключение
- •6. Контрольные вопросы
- •Аннотация
- •1. Введение
- •2. Статические элементы
- •3. Ключевые слова this и super
- •4. Ключевое слово abstract
- •5. Интерфейсы
- •5.1. Объявление интерфейсов
- •5.2. Реализация интерфейса
- •5.3. Применение интерфейсов
- •6. Полиморфизм
- •6.1. Поля
- •6.2. Методы
- •6.3. Полиморфизм и объекты
- •7. Заключение
- •8. Контрольные вопросы
- •Аннотация
- •Лекция 9. Массивы
- •1. Введение
- •2. Массивы, как тип данных в Java
- •2.1. Объявление массивов
- •2.2. Инициализация массивов
- •2.3. Многомерные массивы
- •2.4. Класс массива
- •3. Преобразование типов для массивов
- •3.1. Ошибка ArrayStoreException
- •3.2. Переменные типа массив, и их значения
- •4. Клонирование
- •4.1. Клонирование массивов
- •5. Заключение
- •6. Контрольные вопросы
- •Аннотация
- •Лекция 10. Операторы и структура кода
- •1. Управление ходом программы
- •2. Нормальное и прерванное выполнение операторов
- •3. Блоки и локальные переменные
- •4. Пустой оператор
- •5. Метки
- •6. Оператор if
- •7. Оператор switch
- •8. Управление циклами
- •8.1. Цикл while
- •8.2. Цикл do
- •8.3. Цикл for
- •9. Операторы break и continue
- •9.1. Оператор continue
- •9.2. Оператор break
- •10. Именованные блоки
- •11. Оператор return
- •12. Оператор synchronized
- •13.1. Причины возникновения ошибок
- •13.2. Обработка исключительных ситуаций
- •13.2.1. Конструкция try-catch
- •13.2.2. Конструкция try-catch-finally
- •13.3. Использование оператора throw
- •13.4. Обрабатываемые и необрабатываемые исключения
- •13.5. Создание пользовательских классов исключений
- •13.6. Переопределение методов и исключения
- •13.7. Особые случаи
- •14. Заключение
- •15. Контрольные вопросы
- •Аннотация
- •Лекция 11. Пакет java.awt
- •1. Введение
- •2. Апплеты
- •2.1. Тег HTML <Applet>
- •2.2. Передача параметров
- •2.3. Контекст апплета
- •2.4. Отладочная печать
- •2.5. Порядок инициализации апплета
- •2.6. Перерисовка
- •2.7. Задание размеров графических изображений
- •2.8. Простые методы класса Graphics
- •2.9. Цвет
- •2.9.1. Методы класса Color
- •2.10. Шрифты
- •2.10.1. Использование шрифтов
- •2.10.2. Позиционирование и шрифты: FontMetrics
- •2.10.3. Использование FontMetrics
- •2.10.4. Центрирование текста
- •3. Базовые классы
- •4. Основные компоненты
- •5. Менеджеры компоновки
- •6. Окна
- •7. Меню
- •8. Обработка событий
- •8.1. Рисование "каракулей" в Java
- •8.2. Рисование "каракулей" с использованием встроенных классов
- •9. Заключение
- •10. Контрольные вопросы
- •Аннотация
- •Лекция 12. Потоки выполнения. Синхронизация
- •1. Введение
- •2. Многопоточная архитектура
- •3. Базовые классы для работы с потоками
- •3.1. Класс Thread
- •3.2. Интерфейс Runnable
- •3.3. Работа с приоритетами
- •3.4. Демон-потоки
- •4. Синхронизация
- •4.1. Хранение переменных в памяти
- •4.2. Модификатор volatile
- •4.3. Блокировки
- •5. Методы wait(), notify(), notifyAll() класса Object
- •6. Контрольные вопросы
- •Аннотация
- •Лекция 13. Пакет java.lang.
- •1. Введение
- •2. Object
- •3. Class
- •4. Wrapper Classes
- •4.1. Integer
- •4.2. Character
- •4.3. Boolean
- •4.4. Void
- •5. Math
- •6. Строки
- •6.1. String
- •6.2. StringBuffer
- •7. Системные классы
- •7.1. ClassLoader
- •7.2. SecurityManager - менеджер безопасности
- •7.3. System
- •7.4. Runtime
- •7.5. Process
- •8. Потоки исполнения
- •8.1. Runnable
- •8.2. Thread
- •8.3. ThreadGroup
- •9. Исключения
- •10. Заключение
- •11. Контрольные вопросы
- •Аннотация
- •Лекция 14. Пакет java.util
- •1. Введение
- •2. Работа с датами и временем
- •2.1. Класс Date
- •2.2. Классы Calendar и GregorianCalendar
- •2.3. Класс TimeZone
- •2.4. Класс SimpleTimeZone
- •3. Интерфейс Observer и класс Observable
- •4. Коллекции
- •4.1. Интерфейсы
- •4.1.1. Интерфейс Collection
- •4.1.2. Интерфейс Set
- •4.1.3. Интерфейс List
- •4.1.4. Интерфейс Map
- •4.1.5. Интерфейс SortedSet
- •4.1.6. Интерфейс SortedMap
- •4.1.7. Интерфейс Iterator
- •4.2. Aбстрактные классы используемые при работе с коллекциями.
- •4.3. Конкретные классы коллекций
- •4.4. Класс Collections
- •5. Класс Properties
- •6. Интерфейс Comparator
- •7. Класс Arrays
- •8. Класс StringTokenizer
- •9. Класс BitSet
- •10. Класс Random
- •11. Локализация
- •11.1. Класс Locale
- •11.2. Класс ResourceBundle
- •12. Заключение
- •13. Контрольные вопросы
- •Аннотация
- •Лекция 15. Пакет java.io
- •1. Система ввода/вывода. Потоки данных (stream)
- •1.1. Классы InputStream и OutputStream
- •1.2. Классы-реализации потоков данных
- •1.2.1. Классы ByteArrayInputStream и ByteArrayOutputStream
- •1.2.2. Классы FileInputStream и FileOutputStream
- •1.2.3. PipedInputStream и PipedOutputStream
- •1.2.4. StringBufferInputStream
- •1.2.5. SequenceInputStream
- •1.3. Классы FilterInputStreeam и FilterOutputStream. Их наследники.
- •1.3.1. BufferedInputStream и BufferedOutputStream
- •1.3.2. LineNumberInputStream
- •1.3.3. PushBackInputStream
- •1.3.4. PrintStream
- •1.3.5. DataInputStream и DataOutputStream
- •2. Serialization
- •2.1. Версии классов
- •3. Классы Reader и Writer. Их наследники.
- •4. Класс StreamTokenizer
- •5. Работа с файловой системой.
- •5.1. Класс File
- •5.2. Класс RandomAccessFile
- •6. Заключение
- •7. Контрольные вопросы
- •Аннотация
- •Лекция 16. Введение в сетевые протоколы
- •1. Основы модели OSI
- •2. Physical layer (layer 1)
- •3. Data layer (layer 2)
- •3.1. LLC sublayer.
- •3.2. MAC sublayer.
- •4. Network layer (layer 3)
- •4.1. Class A
- •4.2. Class B
- •4.3. Class CClass DClass E
- •5. Transport layer (layer 4)
- •6. Session layer (layer 5)
- •7. Presentation layer (layer 6)
- •8. Application layer (layer 7)
- •9. Утилиты для работы с сетью
- •9.1. IPCONFIG (IFCONFIG)
- •9.3. Ping
- •9.4. Traceroute
- •9.5. Route
- •9.6. Netstat
- •9.7. Задания для практического занятия
- •10. Пакет java.net
- •11. Заключение
- •12. Контрольные вопросы
Конструкция try-catch |
Стр. 25 из 51 |
независящим от него причинам (произошел разрыв сетевого соединения, сбой аппаратного обеспечения, например, жесткого диска, и др.).
Асинхронные ошибки гораздо сложнее в обнаружении и исправлении. Обычному разработчику очень затруднительно выявить причины сбоев в виртуальной машине. Это могут быть ошибка создателей JVM, несовместимость с операционной системой, аппаратный сбой и многое другое. Все же современные виртуальные машины реализованы довольно хорошо, и подобные сбои происходят крайне редко (при условии использования качественных комплектующих).
Аналогичная ситуация наблюдается и в случае с принудительной остановкой потоков исполнения. Поскольку это действие выполняется операционной системой, никогда нельзя предсказать, в каком именно месте остановится поток. Это означает, что программа может многократно отработать корректно, а потом неожиданно дать сбой просто из-за того, что поток остановился в каком-то другом месте. По этой причине принудительная остановка крайне не рекомендуется. В соответствующей лекции приводятся примеры корректного управления жизненным циклом потока.
При возникновении исключительной ситуации управление передается от кода, вызвавшего исключительную ситуацию, на ближайший блок catch (или вверх по стеку), и создается объект, унаследованный от класса Throwable или его потомков (см. диаграмму иерархии классов исключений), который содержит информацию об исключительной ситуации и используется при ее обработке. Собственно в блоке catch указывается именно класс обрабатываемой ситуации. Подробно обработка ошибок рассматривается ниже.
Иерархия по которой передается информация об исключительной ситуации зависит от того, где эта исключительная ситуация возникла. Если это
•метод, то управление будет передаваться в то место, где этот метод был вызван;
•конструктор, то управление будет передаваться туда, где попытались создать объект (как правило, применяя оператор new);
•если это статический инициализатор, то управление будет передано туда, где произошло первое обращение классу, потребовавшее его инициализацию.
Допускается создание собственных классов исключительных ситуаций. Осуществляется это с помощью механизма наследования, т.е. класс пользовательской исключительной ситуации, должен быть унаследован от класс Throwable или его потомков.
13.2. Обработка исключительных ситуаций
13.2.1. Конструкция try-catch
В общем случае конструкция выглядит так.
try{
…
}catch(SomeExceptionClass e){
…
}catch(AnotherExceptionClass e){
…
}
Программирование на Java
Rendered by www.RenderX.com
Стр. 26 из 51 |
Ошибки при работе программы. Исключения (Exceptions). |
Работает она следующим образом. Сначала выполняется код заключенный в фигурные скобки оператора try. Если во время его выполнения не происходит никаких нештатных ситуаций, то далее управление передается, за закрывающую фигурную скобку, последнего оператор catch ассоциированного с данным оператором try.
В случае если в пределах try возникает исключительная ситуация, то далее выполнение кода производится по одному из ниже перечисленных сценариев.
•возникла исключительная ситуация, класс которой указан в качестве параметра одного из блоков catch. В этом случае производится выполнение блока кода ассоциированного с этим catch (заключенного в фигурные скобки). Далее если код в этом блоке завершается нормально, то и весть оператор try завершается нормально и управление передается на оператор (выражение) следующий за закрывающей фигурной скобкой последнего catch ассоциированного с данным try. Если код в catch завершается нештатно, то и весь try завершается нештатно по той же причине.
•если возникла исключительная ситуация, которая класс которой не указан в качестве аргумента, ни в одном catch, то выполнение всего try завершается нештатно.
Если в последовательности операторов могут возникнуть как ошибки ввода/вывода так и ошибки арифметических вычислений, вовсе нет нужды помещать различные фрагменты кода в разные операторы try{}catch(){}. Достаточно обеспечить несколько catch() для различных типов исключений.
13.2.2. Конструкция try-catch-finally
Оператор finally предназначен для того, что бы обеспечить гарантированное выполнение какого-либо фрагмента кода.
Последовательность выполнения такой конструкции будет следующей: Если оператор try выполнен нормально, то будет выполнен блок finally. В свою очередь, если оператор finally выполняется нормально, то весь оператор try выполняется нормально. Если происходит преждевременное окончание выполнения блока finally, то весть оператор try завершается предварительно по тем же причинам.
•существует оператор catch, который перехватывает данный тип исключения, происходит выполнение связанного с catch блока.
-Если блок catch выполняется нормально, то выполняется блок finally
•в свою очередь если блок finally завершается нормально, то весь try завершается нормально.
•Если finally завершается предварительно, то и весь оператор try завершается предварительно по той же причине.
-Если блок catch завершается ненормально, то выполняется блок finally
•в свою очередь, если блок finally завершается нормально, то оператор try завершается не нормально, по той же причине, по которой не нормально завершился блок catch
•если блок finally завершается ненормально, то весь блок try завершается ненормально, по той же причине, что и блок finally
Программирование на Java
Rendered by www.RenderX.com
Конструкция try-catch-finally |
Стр. 27 из 51 |
•в списке операторов catch не находится такого, который обработал бы возникшее исключение. Все равно выполняется блок finally. В этом случае, если
-finally завершится нормально, весь try завершится не нормально по той же причине по которой было нарушено исполнение try.
-finally завершится ненормально, то try завершится ненормально по той же причине, по которой ненормально завершился finally
Если оператор try завершился нормально, то выполнится блок finally. И если
•блок finally завершится нормально, то весь try завершится нормально
•блок finally завершится не нормально, то весь try завершится не нормально, по той же причине.
Следует обратить внимание, что при использовании конструкции finally, блок кода ассоциированный с ним будет выполнятся всегда. Если во время обработки исключительной ситуации, возникнет новая исключительная ситуация, то исключительная ситуация, которая послужила первопричиной будет потеряна.
Рассмотрим пример применения конструкции 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();
}
Следует обратить внимание, что использование flush() не является обязательным в данном контексте, т.к. буфер ввода/вывода будет очищен при вызове close() указания, и здесь использован для большей наглядности.
Если в данном примере поместить операторы очистки буфера и закрытия файла сразу после окончания обработки данных, то при возникновении ошибки ввода вывода, корректного закрытия файла не произойдет. Следует отметить, что блок finally, будет выполнен в любом случае, вне зависимости от того произошла обработка исключения или нет, возникло это исключение или нет.
В конструкции try-catch-finally обязательным является использование одной из частей оператора catch или finally. То есть, конструкция
try{
...
}finally{
Программирование на Java
Rendered by www.RenderX.com
Стр. 28 из 51 |
Ошибки при работе программы. Исключения (Exceptions). |
...
}
является вполне допустимой. В этом случае блок finally при возникновении исключительной ситуации будет выполнен, хотя сама исключительная ситуация обработана не будет и будет передана для обработки на более высокий уровень иерархии.
Следует рассмотреть два специальных случая использования finally.
try{
…
}catch(Exception e){
…
System.exit(0);
}finally{
…
}
в этом случае блок finally выполнен НЕ БУДЕТ т.к. выполнение данного потока будет прекращено.
Пример применения оператора return:
try{
…
return 0;
}
catch(MyException ex){
…
System.out.println("Exception"); return -1;
}
finally{
…
System.out.println("Finally");
}
В этом случае последовательность действий будет следующей.
Если исключения не произойдет будет исполнен лишь блок finally метод вернет значение
0
На консоль будет выведено Finally
Если произойдет исключение MyException, то будет выполнен блок finally и метод вернет значение -1.
На консоль будет выведено
Exception
Finally
Программирование на Java
Rendered by www.RenderX.com