- •Аннотация
- •Лекция 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. Контрольные вопросы
Стр. 28 из 33 |
Исключения |
Получить эти значения, можно, конечно же, в любой момент жизни потока - и после его запуска, и после прекращения выполнения. Так же, можно и узнать, в каком состоянии сейчас находится поток - вызовом методов isAlive() - выполняется ли еще, isInterrupted() - прерван ли.
8.3. ThreadGroup
Для того, что бы отдельный поток не мог оказаться "невоспитанным" и начать останавливать
ипрерывать все потоки подряд, введено понятие группы. Поток может оказывать влияние только на потоки, которые находятся в одной с ним группе. Группу потоков представляет класс ThreadGroup. Такая организация позволяет защитить потоки от нежелательного внешнего воздействия. В группе потоков так же могут содержаться другие группы потоков,
итак далее, организуя, таким образом, некоторое дерево, в котором каждый объект ThreadGroup, за исключением коневого, имеет родителя.
9. Исключения
Подробно механизм использования исключений описан в соответствующей лекции. Здесь остановимся только на том, что базовым классом для всех исключений является класс Throwable. Любой класс, который планируется использовать как исключение, должен явным или неявным образом быть от него унаследованным. Класс Throwable, а так же наиболее значимые его наследники - классы: Error, Exception, RuntimeException содержатся именно в пакете java.lang.
10. Заключение
В этой главе Вы получили представление о назначении и возможностях классов, представленных в пакете java.lang. Как Вы теперь знаете, пакет java.lang автоматически импортируется во все Java программы и содержит фундаментальные классы и интерфейсы, которые составляют основу для других пакетов Java.
Были рассмотрены все наиболее важные классы пакета java.lang:
Object, Class – основные классы, представляющие объект и класс объектов;
классы-обертки (Wrapper классы) – так как многие классы работают именно с объектами, иногда бывает необходимо представлять значения примитивных типов Java в виде объектов; в таких случаях используют классы-обертки;
Math – класс, предоставляющий набор статических методов, реализующих наиболее распространенные математические функции;
String и StringBuffer – классы для работы со строками;
System, Runtime, Process, ClassLoader, SecurityManager – системные классы, помогающие взаимодействовать с программным окружением (System, Runtime, Process), загружать классы в JVM (ClassLoader) и управлять безопасностью (SecurityManager);
Thread, ThreadGroup, Runnable – типы, обеспечивающие работу с потоками исполнения в
Java;
Throwable, Error, Exception, RuntimeException – базовые классы для всех исключений.
Программирование на Java
Rendered by www.RenderX.com
Стр. 29 из 33
11. Контрольные вопросы
13-1. В чем различие между следующими кусками кода:
1.String s1 = “abc”;
String s2 = new String(“abc”); boolean result = (s1==s2);
2.String s1 = new String(“abc”); String s2 = new String(“abc”); boolean result = (s1.equals(s2));
a.) Значение result в первом случае будет равно false, в то время как во втором
– true. В первом случае сравниваются значения ссылок s1 и s2, во втором, проверяется, идентичны ли объекты, на которые указывают эти ссылки. При этом s1 и s2 указывают на разные объекты, так как объект s2 был получен применением оператора new, вследствие чего был создан новый объект. В случае если бы s2 был получен тем же способом, что и s1 (то есть String s2 = “abc”;), то обе ссылки s1 и s2 указывали бы на один и тот же объект, так как Java не создает новый экземпляр для строковых литералов, если таковой уже имеется. Вместо этого ссылка будет указывать на уже существующий объект.
13-2. Какие условия должны быть выполнены при переопределении метода equals()?
a.) Переопределение метода equals() предполагает выполнение следующих правил:
1.a) рефлексивность: для любой объектной ссылки x, вызов x.equals(x) возвращает true
2.b) симметричность: для любых объектных ссылок x и y, вызов x.equals(y) возвращает true тогда и только тогда, если вызов y.equals(x) возвращает true
3.c) транзитивность: для любых объектных ссылок x, y и z, если x.equals(y) возвращает true и y.equals(z) возвращает true, тогда вызов x.equals(z) должен вернуть true
4.d) непротиворечивость: для любых объектных ссылок x и y, многократные последовательные вызовы x.equals(y) возвращают одно и то же значение (либо всегда true либо всегда false)
5.e) для любой не равной null объектной ссылки x, вызов x.equals(null) должен вернуть значение false
13-3. Как формально формулируются правила, которым должна следовать реализация метода hashCode()? Как реализован этот метод в классе Object?
Программирование на Java
Rendered by www.RenderX.com
Стр. 30 из 33 |
Контрольные вопросы |
a.) Для реализаций метода hashCode() должны быть выполнены следующие правила:
1.a) в одном запуске программы, для одного объекта при вызове метода hashCode(), должно возвращаться одно и то же int значение, если между этими вызовами НЕ были затронуты данные, используемые для проверки объектов на идентичность в методе equals(). Это число НЕ обязано быть одним и тем же при повторном запуске той же программы, даже если все данные будут идентичны
2.b) если два объекта идентичны, то есть вызов метода equals(Object) возвращает true, тогда вызов метода hashCode() у каждого из этих двух объектов должен возвращать одно и то же значение
3.c) если два объекта различны, то есть вызов метода equals(Object) возвращает false, тогда различие их хеш-кодов желательно, но НЕ обязательно. Различие в хеш-кодах для НЕ идентичных объектов нужно только для обеспечения хорошей производительности при использовании этих объектов в хеш-таблицах.
В классе Object метод hashCode() возвращает значение адреса, где хранится объект. Такая реализация удовлетворяет всем правилам и переопределение метода hashCode() в подклассах Object не требуется, если не был переопределен метод equals().
13-4. Если был переопределен метод equals(), какой еще метод, возможно, понадобится переопределить соответствующим образом, чтобы объекты рассматриваемого класса могли быть корректно использованы в хэш-таблицах?
a.) Среди правил, которым должна удовлетворять реализация метода hashCode(), есть следующее: “если два объекта идентичны, то есть вызов метода equals(Object) возвращает true, тогда вызов метода hashCode() у каждого из этих двух объектов должен возвращать одно и то же значение”.
Соответственно, если метод equals() был переопределен, и объекты этого класса планируется использовать в хеш-таблицах, то в соответствии с указанным правилом, метод hashCode() понадобится переопределить таким образом, что бы возвращались одинаковые значения для объектов, вызов метода equals() для которых возвращает true.
13-5. Как реализованы в классе Object методы equals(), toString(), hashCode() ?
a.) В классе Object методы equals(), toString() и hashCode() имеют следующие реализации:
equals() – возвращает true, если ссылки на объекты совпадают
toString() – возвращает строку, которая составляется следующим образом: название класса, символ ‘@’, значение, возвращаемое вызовом метода hashCode(), представленное в шестнадцатеричном виде
hashCode() – имеет native реализацию, возвращающую адрес, по которому хранится объект.
Программирование на Java
Rendered by www.RenderX.com
Стр. 31 из 33
13-6. Какие объекты могут быть клонированы?
a.) Если клонирование производится встроенным методом Object.clone(), то такие классы необходимо специальным образом помечать, указывая, что они реализуют интерфейс Cloneable. Кроме этого, класс может переопределить метод clone() собственным образом, и обойтись без этого интерфейса.
13-7. Какие существуют ограничения на использование метода newInstance() объектов типа Class для создания экземпляров соответствующего класса?
a.) Вызов этого метода создает объект класса, который представляется данным экземпляром Class. Создание будет происходить с помощью конструктора без параметров. Соответственно, что бы создание прошло успешно, такой конструктор должен иметься в классе, а сам класс не должен быть абстрактным.
13-8. Для каких примитивных типов Java существуют классы-обертки? Что будет получено в результате выполнения: (new Integer(1)).equals(new Byte(1)) ?
a.) Классы-обертки существуют для всех примитивных типов Java – byte, short, char, int, long, float, double, boolean (обертка существуют даже для
«отсутствия типа» – void).
Вызов (new Integer(1)).equals(new Byte(1)) вернет значение false, так как метод equals() в классах-обертках реализован таким образом, что сначала производится сравнение классов сравниваемых объектов, и если они не совпадают – возвращается значение false.
13-9. В чем особенность класса-обертки для void?
a.) Этот класс, в отличие от остальных классов-оберток, НЕ реализует интерфейс java.io.Serializable. Он не имеет открытого конструктора. Более того, экземпляр этого класса вообще не может быть получен.
13-10. Какие модификаторы присутствуют в определении класса Math? Можно ли от него наследоваться? Можно ли создавать экземпляры этого класса?
a.) Класс Math определен с модификаторами public и final. Соответственно, наследование от класса Math не возможно. Кроме того, единственный конструктор этого класса имеет модификатор доступа private и поэтому может быть вызван только из самого класса Math (впрочем, в классе Math нигде нет вызова этого конструктора). Все методы этого класса – статические.
13-11. В чем проявляется сходство String и примитивных типов Java?
a.) Во-первых, для объектов только этого типа существуют соответствующие литералы, которыми можно инициализировать их значения. Во-вторых, только для одного ссылочного типа String определен оператор “+”.
Кроме того, поскольку класс String является final, String-переменные всегда хранят значения точно такого же типа. Объекты класса String являются
Программирование на Java
Rendered by www.RenderX.com
Стр. 32 из 33 |
Контрольные вопросы |
неизменяемыми, поэтому значение переменной не может измениться, если ее передать в качестве аргумента при вызове метода.
13-12. Какой класс используется для представления модифицируемых строк?
a.) Если класс String представляет НЕ модифицируемые строки, то класс StringBuffer позволяет изменять значение строки, которую его объект содержит.
13-13. Какие классы и интерфейсы, необходимые для поддержки многопоточности, определены в пакете java.lang?
a.) Основной класс для обеспечения многопоточности – java.lang.Thread, объекты которого соответствуют потокам. Потоки могут быть объединены в группы потоков, что представляется объектами класса java.lang.ThreadGroup. Создать новый поток можно, унаследовав класс от Thread, либо реализовав интерфейс Runnable.
13-14. Классы каких базовых исключений определены в пакете java.lang ?
a.) Все классы базовых исключений содержатся в пакете java.lang – Throwable, Error, Exception, RuntimeException.
Программирование на Java
Rendered by www.RenderX.com