- •Аннотация
- •Лекция 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. Контрольные вопросы
Стр. 26 из 31 |
Заключение |
3.объект класса Class, описывающий класс Object. Так как класс Point наследуется от Object, описание этого класса также необходимо.
4.объект класса Class, описывающий класс Class. Это обычный Java-класс, который должен быть загружен по общим правилам.
Одно из применений класса Class уже было рассмотрено - использование метода getClass() класса Object. Если продолжить последний пример с точкой:
Class cl=p.getClass(); // это объект №2 из списка
Class cl2=cl.getClass(); // это объект №4 из списка
Class cl3=cl2.getClass(); // опять объект №4
Выражение cl2==cl3 верно.
Другое применение класса Class также приводилось в примере применения технологии reflection.
Кроме прямого использования метаклассса для хранения в памяти описания классов, Java использует эти объекты и для других целей, которые будут рассмотрены ниже (статические переменные, синхронизация статических методов и т.д.).
7. Заключение
Типы данных - одна из ключевых тем курса. Невозможно написать ни одной программы, не используя их. Вот список некоторых мест, где применяются типы:
•объявление типов;
•создание объектов;
•при объявлении полей - тип поля;
•при объявлении методов - входные параметры, возвращаемое значение;
•при объявлении конструкторов - входные параметры;
•оператор приведения типов;
•оператор instanceof;
•объявление локальных переменных;
•многие другие - обработка ошибок, import-выражения и т.д.
Принципиальные различия между примитивными и ссылочными типами данных будет и дальше рассматриваться по ходу курса. Изучение объектной модели Java даст основу для более детального изложения объектных типов - обычных и абстрактных классов, интерфейсов и массивов. После рассмотрения приведения типов будут описаны связи между типом переменной и типом ее значения.
В обсуждении будущей версии Java 1.5 упоминаются темплейты (templates), которые существенно расширят понятия типа данных, если действительно войдут в стандарт языка.
Программирование на Java
Rendered by www.RenderX.com
Стр. 27 из 31
8. Заключение
В этой главе было рассказано, что Java является строго типизированным языком, то есть тип всех переменных и выражений определяется уже компилятором. Это позволяет существенно повысить надежность и качество кода, а также делает необходимым хорошее понимание объектной модели программистами.
Все типы в Java делятся на две группы – фиксированные простые, или примитивные, типы (8 типов) и многочисленная группа объектных типов (классов). Примитивные типы действительно являются хранилищами данных своего типа. Ссылочные переменные хранят ссылку на некоторый объект совместимого типа. Также они могут принимать значение null, не указывая ни на какой объект. JVM подсчитывает количество ссылок на каждый объект, и активизирует механизм автоматической сборки мусора для удаления неиспользуемых более объектов.
Были рассмотрены переменные. Они характеризуются тремя основными параметрами – имя, тип и значение. Любая переменная должна быть объявлена и может быть при этом инициализирована. Возможно использование модификатора final.
Примитивные типы состоят из 5 целочисленных, включая символьный тип, 2 дробных и 1 булевского. Целочисленные литералы имеют ограничения, связанные с типами данных. Были рассмотрены все операторы над примитивными типами, тип возвращаемого значения и тонкости их использования.
Затем изучались объекты, способы их создания, и операторы, выполняющие над ними различные действия, в частности принцип работы оператора instanceof. Далее были рассмотрены самые главные классы в Java – Object, Class, String.
В заключение перечислены все места применения типов в программе.
9. Контрольные вопросы
4-1. Каков будет результат следующего примера?
byte b=3; int c=b; c++;
print(++b==c);
a.) После выполнения второй строки обе переменные хранят значение 3. После третьей строки значение одной из них увеличится на единицу, а в последней строке значение второй переменной также увеличится, и они снова будут равны. Результат равен true.
4-2. Каков будет результат следующего примера?
Point p = new Point(1, 2); int a=p.x;
p = new Point(3, 4); print(a);
Программирование на Java
Rendered by www.RenderX.com
Стр. 28 из 31 |
Контрольные вопросы |
|
a.) Изменение значения ссылочной переменной никак не скажется на |
|
переменной простого типа. Результат равен 1. |
4-3. Каков будет результат следующего примера?
Point p1 = new Point(3, 4); Point p2 = p1;
p1.x=5;
p1 = new Point(4, 4); print(p2.x-p1.x);
a.) В третьей строке обе переменные ссылаются на один и тот же объект, именно его координата x приравнивается 5. Далее переменная p1 начинает ссылаться на другой объект, чья координата x равна 4. Поэтому результат равен 5-4=1.
4-4. Какой будет результат следующих действий?
1/2 1./2 1/2. 1./2.
a.) Результат первого деления будет целым числом, поскольку оба аргумента целые числа, т.е. 0. Результатом следующих трех операций будет дробное число, поскольку как минимум один аргумент дробный, то есть 0.5.
4-5. Перечислите все операторы над числами, обозначение которых включает в себя знак +.
a.) Унарный плюс, числовая операция сложения, инкрементация (префиксная и постфиксная) и конкатенация со строкой. Также оператор присваивания имеет вариант со сложением (+=).
4-6. Приведите пример значения целочисленной переменной x, при которой следующие выражения не верны:
a)x*30/30==x
b)x/30*30==x
a.) Для выражения a) подходит любое значение большее, чем Integer.MAX_VALUE/30, т.е. 71582789. Для выражения b) подходит любое целое число, не делящееся нацело на 30, например, 15.
4-7. Какой будет результат следующей строки (код символа восклицательного знака
33)?
print(“Hello”+’!’);
a.) Результатом будет Hello!
4-8. Какой будет результат следующих действий?
Программирование на Java
Rendered by www.RenderX.com
Стр. 29 из 31
double x=2./0; double y=-1/0.; print(x+y);
a.) Значение переменной x равно POSITIVE_INFINITY, а переменной y NEGATIVE_INFINITY. Их сумма равна NaN.
4-9. Перечислите возможные способы создания объектов в Java.
a.) Объекты всех классов создаются с помощью ключевого слова new, после которого идет имя класса, а затем в круглых скобках перечисляются аргументы.
Объекты класса String создаются для работы со строковыми литералами.
Кроме того, можно породить новый объект, вызвав метод newInstance() класса Class.
4-10. Какой будет результат следующих действий?
Point p1 = new Point(2, 3); Point p2 = new Point(2, 3); print(p1==p2);
p2=p1;
p1.x=3;
print(p1==p2);
a.) При выполнении третьей строки будет выведено значение false. Оператор сравнения проверяет ссылки, а переменные p1 и p2 ссылаются на различные объекты.
В четвертой строке они начинают указывать на один и тот же объект, поэтому последняя строка выведет значение true.
4-11. Эквиваленты ли две следующие операции над ссылочными переменными x1 и x2 (SomeClass2 – тип переменной x2)?
x1 instanceof SomeClass2 x1.getClass().getName().equals(x2.getClass().getName())
a.) Ответ «нет». Проверка имени класса (вторая операция) проверяет, от одного и того ли класса были созданы объекты, на которое ссылаются переменные x1 и x2. Оператор instanceof проверяет типы на совместимость. Если объектs созданы от одного и того же класса, то и их типы, конечно, совместимы. Однако, если значение переменной x1 – объект, порожденный от класса-наследника SomeClass2, а x2 – объект, порожденный от SomeClass2, то instanceof вернет true, а вторая операция
– false.
4-12. При каком условии следующие выражения вернут значение false?
Программирование на Java
Rendered by www.RenderX.com
Стр. 30 из 31 |
Контрольные вопросы |
a)x.toString() instanceof String
b)(x+””) instanceof String
a.) Выражение a) может быть ложным только в случае, когда переменная x ссылается на объект, класс которого переопределил метод toString() так, что последний может вернуть null. Такое переопределение не рекомендуется. Выражение b) всегда вернет true.
4-13. При каком значении ссылочной переменной x следующее выражение всегда будет возвращать истину?
x.getClass()==x
a.) Это выражение будет истинным, только если x ссылается на объект класса Class, который описывает класс Class. Такую ссылку можно получить из любой объектной переменной y, не равной null:
x=y.getClass().getClass()
Программирование на Java
Rendered by www.RenderX.com