- •Аннотация
- •Лекция 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-finally |
Стр. 29 из 51 |
То, есть сначала отработает блок finally и только после этого будет произведен возврат управления в вызвавший код.
Если,будет возбуждено исключение Exception, которое не обрабатывается в данной конструкции, то будет выполнен блок finally и исключительная ситуация будет передана на обработку вызываемому коду.
В случае, если обработка исключительной ситуации в коде не предусмотрена, то при ее возникновении выполнение метода будет прекращено, и исключительная ситуация будет передана для обработки коду более высокого уровня. Таким образом, если исключительная ситуация произойдет в вызываемом методе, то управление будет передано вызываемому методу и обработку исключительной ситуации должен произвести он. Если исключительная ситуация возникла в коде самого высокого уровня (методе main()), то управление будет передано исполняющей системе Java и выполнение программы будет прекращено.
13.3. Использование оператора throw
Помимо того, что предопределенная исключительная ситуация могла быть возбуждена исполняющей системой Java, программист сам может сгенерировать это условие. Делается это с помощью оператора throw.
Например
….
public int calculate(int theValue){ if( theValue < 0){
throw new Exception("Параметр для вычисления не должен быть отрицательным");
}
}
…
В данном случае, предполагается, в качестве параметра методу может быть передано только положительное значение, если это условие не выполнено, то с помощью оператора throw возбуждается исключительная ситуация. В действительности данный код не будет откомпилирован, т.к. компилятор выдаст сообщение об ошибке. Если в методе возбуждается исключительная ситуация, то должно быть выполнено одно из двух правил
•исключительная ситуация должна быть обработана в теле метода (т.е. код должен возбуждающий исключительную ситуацию, должен быть помещен в блок try {} catch(UserException ue){})
•метод должен делегировать обработку исключительной ситуации вызвавшему его коду. Для этого в сигнатуре метода применятся ключевое слово throws, после которого должны быть перечислены через запятую все исключительные ситуации, которые может вызывать данный метод. Т.е. приведенный выше пример должен быть приведен к следующему виду
….
public int calculate(int theValue) throws Exception{ if( theValue < 0){
throw new Exception("Some descriptive info");
Программирование на Java
Rendered by www.RenderX.com
Стр. 30 из 51 |
Ошибки при работе программы. Исключения (Exceptions). |
}
}
…
Т.о. возбуждение исключительной ситуации в программе производится с помощью оператора throw, слева от которого указывается объект, который может быть приведен к типу Throwable. (Как правило этот объект создается в этом же месте с помощью оператора new, хотя это условие и не является обязательным)
Внекоторых случаях после обработки исключительной ситуации, возможно, возникнет необходимость передать информацию о ней в вызывающий код.
Вэтом случае throw используется вторично.
Например
…
try{
…
}catch(IOException ex){
…
//Обработка исключительной ситуации
…
//Повторное возбуждение исключительной ситуации throw ex;
}
Рассмотрим еще один случай.
Предположим, что оператор throw применяется внутри конструкции try catch.
try{
…
throw new IOException();
…
}catch(Exception e){
…
}
В этом случае, исключение возбужденное в блоке try не будет передано для обработки на более высокий уровень иерархии, а обработается в пределах блока try catch., т.к. тут содержится оператор, который может это исключение перехватить.Т.е. как бы произойдет неявная передача управления, на соответствующий блок cacth
Следует обратить внимание слушателей, что такой способ использования конструкции try catch не рекомендуется, т.к. затраты на обработку будут несравнимо выше, чем при использовании операторов if. Следует обратить так же внимание на то, что блок catch может быть пустым, т.е. не производить никакой обработки, тем не менее исключение будет считаться перехваченным и далее по иерархии передано не будет.
try{
Программирование на Java
Rendered by www.RenderX.com
Стр. 31 из 51
…
throw new IOException();
…
}catch(Exception e){
;
}
в данном случае оператор try завершится нормально.
13.4. Обрабатываемые и необрабатываемые исключения
Все исключительные ситуации можно разделить на две категории обрабатываемые
(checked) и не обрабатываемые (unchecked).
Все исключения, порожденные от java.lang.Exception являются обрабатываемыми. Т.е. во время компиляции проверяется - предусмотрена ли обработка возможных исключительных ситуаций.
Исключения, порожденные от java.lang.RunTimeException, являются необрабатываемыми, и компилятор не требует обязательной их обработки.
Как правило, обрабатываемые исключения предназначены для обработки ситуаций связанных с окружением программы (сетевым, файловым вводом-выводом и др.), которые могут возникнуть вне зависимости от того, корректно написан код или нет. Например, открытие сетевого соединения или файла может привести к возникновению ошибки, и компилятор требует от программиста предусмотреть некие действия для обработки возможных проблем. (Возможно никаких действий предпринято не будет, т.е. блок catch(){} можно оставить пустым, однако компилятор это трактует как обработку исключения и не выдаст сообщения об ошибке компиляции) Все пользовательские исключения, порожденные от java.lang.Exception (или его потомков) являются обрабатываемыми.
Необрабатываемые исключения, это ошибки программы, которые при правильном кодировании возникать не должны (например, java.lang.IndexOfBoundException, java.lang.ArifmeticException возникают соответственно при указании индекса выходящего за границы массива и при делении на ноль). Поэтому, чтобы не загромождать программу, компилятор разрешает не обрабатывать с помощью блоков try{} catch() исключения этого типа.
Исключения, порожденные от Error, так же не являются обрабатываемыми. Эти ошибки предназначены для того что бы уведомить программу о возникновении сбоев которые программным способом устранить сложно, или невозможно вообще. В качестве примера можно привести StackOverflowError, OutOfMemoryError.
Программирование на Java
Rendered by www.RenderX.com
Стр. 32 из 51 |
Ошибки при работе программы. Исключения (Exceptions). |
Следует обратить внимание, что хотя необрабатываемые ошибки не обязательно помещать в блоки try{} catch() …, они обрабатываются точно так же как и обычные ошибки. Т.е. если вы не можете гарантировать, что Вов время выполнения не будет нарушена граница массива (например при динамическом определении размера массива), то код в котором производится обращение к элементам массива следует поместить в блок try{} catch(java.lang.IndexOfBoundException ex) { …}.
Далее, в случае если в подпрограмме могут возникать необрабатываемые ошибки, то указание ключевого слова throws не является обязательным.
Ошибки (Error), говорят о наличии фатальных ситуаций и нет необходимости обрабатывать их. Они могут свидетельствовать об ошибках программы, но, как правило, это неустранимые ошибки виртуальной машины Java. Например, исчерпание свободной памяти, переполнение стека и т.д.
Программирование на Java
Rendered by www.RenderX.com
Стр. 33 из 51
В разработке и проектировании программного обеспечения используется понятие контракта. Более полно это понятие рассматривалось ранее. Одним из аспектов является четкое разграничение ответственности между вызывающим и вызываемым методами. Например при вызове метода производится вычисление квадратного корня (предполагается, что речь идет о натуральных числах), тогда на вход метода не может быть передано отрицательное число. Если это происходит, то метод должен вызвать исключительную ситуацию, так как контракт нарушен. Этот подход наиболее понятен и упрощает программирование, так как метод должен обрабатывать только правильно заданные параметры и не должен знать ничего об обработке неправильных. Кроме того он должен уведомить вызывающий метод о возникновении этой ситуации, сразу по ее возникновению. Для реализации этого подхода рекомендуется использовать обрабатываемее (checked) исключения.
Как было сказано ранее, возможно задание нескольких операторов catch для одного блока try. Если программист желает перехватывать некий набор исключительных ситуаций, он может указать в блоке catch родительский класс вместо перечисления нескольких подклассов. Например можно перехватывать все исключения порожденные от java.lang.Exception следующим образом
try{
…
}
catch(Exception e){
…
}
Так как родителем всех исключений является java.lang.Throwable, то если необходимо в каком - либо месте кода перехватывать все исключительные ситуации, то вполне применима вот такая конструкция
try{
…
}
catch(Throwable e){
…
}
однако следует избегать использования такой конструкции без явных на то причин. Т.к. в блоке catch будут обрабатываться самые разные ошибки, что нарушит структуру кода и усложнит его понимание.
В случае если в конструкции обработки исключений используется несколько операторов catch, то классы исключений нужно перечислять в них последовательно, от менее общих к более общим. Рассмотрим два примера
try{
…
}
catch(Exception e){
…
Программирование на Java
Rendered by www.RenderX.com