- •Аннотация
- •Лекция 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. Контрольные вопросы
Стр. 6 из 42 |
Работа с датами и временем |
Rule 1: 2002 August 31 19:30:15
Rule 2: 2002 September 30 19:30:15
Как видно из результатов работы приведенного выше кода, действие правила 1 изменилось, по сравнению с методом add, а правило 2 действует так же.
2.3. Класс TimeZone
Класс TimeZone предназначен для совместного использования с классами Calendar и DateFormat. Класс абстрактный, поэтому нельзя создать конкретный экземпляр этого с помощью конструктора. Для этого определен статический метод getDefault(), который возвращает экземпляр класса TimeZone с настройками взятыми из настроек операционной системы под управлением которой работает JVM. Для того, что бы получить экземпляр TimeZone с конкретными настройками, можно воспользоваться статическим методом getTimeZone(String ID), в качестве параметра, которому передается наименование конкретного временного пояса, для которого необходимо получить объект TimeZone. Нигде не определено публичного набора полей определяющих возможный набор параметров для getTimeZone. Вместо этого определен статический метод String[] getAvailableIds() который возвращает массив строк с возможными параметрами для getTimeZone. Можно так определить набор возможных параметров для конкретного временного пояса
(рассчитывается относительно Гринвича) String[] getAvailableIds(int offset);
Рассмотрим пример в котором на консоль последовательно выводятся
•временная зона по умолчанию
•список всех возможных временных зон
•список временных зон которые совпадают с текущей временной зоной.
Следует обратить внимание что на консоль выводится полное наименование временной зоны. Именно в таком формате следует передавать параметр для getTimeZone(). Хотя и допускается указание строки, которую возвращает метод getDisplayName(), так же возможно указание временного пояса в формате "GMT-8:00".
public class Test { public Test() {
}
public static void main(String[] args) { Test test = new Test();
TimeZone tz = TimeZone.getDefault(); int rawOffset = tz.getRawOffset();
System.out.println("Current TimeZone" + tz.getDisplayName() + tz.getID() + "\n\n");
// Dispaly all available TimeZones System.out.println("All Available TimeZones \n"); String[] idArr = tz.getAvailableIDs();
for(int cnt=0;cnt < idArr.length;cnt++){ tz = TimeZone.getTimeZone(idArr[cnt]);
System.out.println(test.padr(tz.getDisplayName() + tz.getID(),64)
Программирование на Java
Rendered by www.RenderX.com
Класс TimeZone |
Стр. 7 из 42 |
+" raw offset=" + tz.getRawOffset() + ";hour offset=(" + tz.getRawOffset()/ (1000 * 60 * 60 ) + ")");
}
//Dispaly all available TimeZones same as for Moscow System.out.println("\n\n TimeZones same as for Moscow \n"); idArr = tz.getAvailableIDs(rawOffset);
for(int cnt=0;cnt < idArr.length;cnt++){ tz = TimeZone.getTimeZone(idArr[cnt]);
System.out.println(test.padr(tz.getDisplayName()+ tz.getID(),64)
+" raw offset=" + tz.getRawOffset() + ";hour offset=(" + tz.getRawOffset()/ (1000 * 60 * 60 ) + ")");
}
}
String padr(String str,int len){ if(len - str.length() > 0){
char[] buf = new char[len - str.length()]; Arrays.fill(buf,' ');
return str + new String(buf); }else{
return str.substring(0,len);
}
}
}
Current TimeZone Moscow Standard TimeEurope/Moscow
All Available TimeZones
… полный список временных зон приведен в приложении XXX …
TimeZones same as for Moscow
Eastern African |
TimeAfrica/Addis_Aba |
raw offset=10800000;hour offset=(3) |
Eastern African |
TimeAfrica/Asmera |
raw offset=10800000;hour offset=(3) |
Eastern African |
TimeAfrica/Dar_es_Sa |
raw offset=10800000;hour offset=(3) |
Eastern African |
TimeAfrica/Djibouti |
raw offset=10800000;hour offset=(3) |
Eastern African |
TimeAfrica/Kampala |
raw offset=10800000;hour offset=(3) |
Eastern African |
TimeAfrica/Khartoum |
raw offset=10800000;hour offset=(3) |
Eastern African |
TimeAfrica/Mogadishu |
raw offset=10800000;hour offset=(3) |
Eastern African |
TimeAfrica/Nairobi |
raw offset=10800000;hour offset=(3) |
Arabia Standard |
TimeAsia/Aden |
raw offset=10800000;hour offset=(3) |
Arabia Standard |
TimeAsia/Baghdad |
raw offset=10800000;hour offset=(3) |
Arabia Standard |
TimeAsia/Bahrain |
raw offset=10800000;hour offset=(3) |
Arabia Standard |
TimeAsia/Kuwait |
raw offset=10800000;hour offset=(3) |
Arabia Standard |
TimeAsia/Qatar |
raw offset=10800000;hour offset=(3) |
Программирование на Java
Rendered by www.RenderX.com
Стр. 8 из 42 |
Работа с датами и временем |
Arabia Standard TimeAsia/Riyadh |
raw offset=10800000;hour offset=(3) |
Eastern African TimeEAT |
raw offset=10800000;hour offset=(3) |
Moscow Standard TimeEurope/Moscow |
raw offset=10800000;hour offset=(3) |
Eastern African TimeIndian/Antananar |
raw offset=10800000;hour offset=(3) |
Eastern African TimeIndian/Comoro |
raw offset=10800000;hour offset=(3) |
Eastern African TimeIndian/Mayotte |
raw offset=10800000;hour offset=(3) |
2.4. Класс SimpleTimeZone
Класс SimpleTimeZone являясь потомком TimeZone реализует его абстрактные методы и предназначен для использования в настройках использующих Григорианский календарь.
Вбольшинстве случаев нет необходимости создавать экземпляр этого класса с помощью конструктора. Вместо этого лучше использовать статические методы которые возвращают экземпляр класса TimeZone рассмотренные в предыдущем параграфе. Единственная, пожалуй, причина для использования конструктора - необходимость задания нестандартных правил перехода на зимнее и летнее время.
Вклассе SimpleTimeZone определено три конструктора. Рассмотрим наиболее полный, с точки зрения функциональности) вариант, который помимо временной зоны задает летнее и зимнее время.
public SimpleTimeZone(int rawOffset, String ID,
int startMonth, int startDay,
int startDayOfWeek, int startTime,
int endMonth, int endDay,
int endDayOfWeek, int endTime)
rawOffset - временное смещение относительно гринвича
ID - идентификатор временной зоны. (см. пред.параграф) startMonth - месяц перехода на летнее время
startDay - день месяца перехода на летнее время* startDayOfWeek - день недели перехода на летнее время*
startTime - время перехода на летнее время (указывается в миллисекундах) endMonth - месяц окончания действия летнего времени
endDay - день окончания действия летнего времени* endDayOfWeek - день недели окончания действия летнего времени*
endTime - время окончания действия летнего времени (указывается в миллисекундах)
Месяц перехода времени начинает отсчитываться с нуля. Для этих целей можно применять константы определенные в классе Calendar, например Calendar.JANUARY
Программирование на Java
Rendered by www.RenderX.com
Класс SimpleTimeZone |
Стр. 9 из 42 |
Перевод часов на зимний и летний вариант исчисления времени определяется специальным правительственным указом. Обычно переход на летнее время происходит в 2 часа в последнее воскресенье марта, а переход на зимнее время - в 3 часа в последнее воскресенье октября.
Алгоритм расчета таков
•если startDay 1 и установлен день недели, то будет вычисляться первый день недели startDayOfWeek месяца startMonth ( например первое воскресенье)
•если startDay -1, и установлен день недели, то будет вычисляться последний день недели startDayOfWeek месяца startMonth (например последнее воскресенье)
•если день недели startDayOfWeek установлен в 0, то будет вычисляться число startDay конкретного месяца startMonth
•для того что бы установить день недели после конкретного числа специфицируется отрицательное значение дня недели. Например, что бы указать первый понедельник после 23 февраля используется вот такой набор startDayOfWeek=-MONDAY, startMonth=FEBRUARY, startDay=23
•для того что бы указать последний день недели перед каким-либо числом, указывается отрицательное значение этого числа и отрицательное значение дня недели. Например, для того что бы указать последнюю субботу перед 23 февраля необходимо задать такой набор параметров startDayOfWeek=- -SATURDAY, startMonth=FEBRUARY, startDay=-23
•все вышеперечисленное относится так же и к окончанию действия летнего времени.
Рассмотрим пример получения текущей временной зоны с заданием перехода на зимнее и летнее время для России по умолчанию.
public class Test { public Test() {
}
public static void main(String[] args) { Test test = new Test();
SimpleTimeZone stz = new SimpleTimeZone( TimeZone.getDefault().getRawOffset() ,TimeZone.getDefault().getID() ,Calendar.MARCH
,-1 ,Calendar.SUNDAY
,test.getTime(2,0,0,0)
,Calendar.OCTOBER ,-1 ,Calendar.SUNDAY
,test.getTime(3,0,0,0)
);
System.out.println(stz.toString());
}
int getTime(int hour,int min,int sec,int ms){
return hour * 3600000 + min * 60000 + sec * 1000 + ms;
Программирование на Java
Rendered by www.RenderX.com