- •Аннотация
- •Лекция 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. Контрольные вопросы
Стр. 9 из 33
System.out.println("creating vehicle..."); vehicle = (Vehicle)aClass.newInstance();
System.out.println("create vehicle: " + vehicle.getClass()); vehicle.go();
}catch(ClassNotFoundException e){ System.out.println("Exception: " + e.toString()); }catch(InstantiationException e){ System.out.println("Exception: " + e.toString()); }catch(Throwable th){
System.out.println("Another problem: " + th.toString());
}
}
}
}
Если запустить эту программу, на экран будет выведено следующее:
look for clas for: demo.lang.Automobile creating vehicle...
create vehicle: class demo.lang.Automobile Automobile go!
look for clas for: demo.lang.Truck creating vehicle...
Instantiation exception: java.lang.InstantiationException look for clas for: demo.lang.Tank
Class not found: java.lang.ClassNotFoundException: demo.lang.Tank
Как видим, объект класса Automobile был успешно создан, а дальше с ним работа велась через интерфейс Vehicle. А вот класс Truck был найден, но при создании объекта этого класса, было брошено и, соответственно, обработано исключение java.lang.InstantiationException. Так-как класс java.lang.Tank не был определен, то при попытке получить объект
Class, ему соответствующий, было брошено исключение java.lang.ClassNotFoundException.
4. Wrapper Classes
Во многих случаях бывает предпочтительней работать именно с объектами, а не примитивными типами. Так, например, при использовании коллекций, просто необходимо значения примитивных типов каким-то образом представлять в виде объектов. Для этих целей и предназначены так называемые классы-обертки. Для каждого примитивного типа Java существует свой класс обертка. Такой класс является неизменяемым (то есть, для изменения значения необходимо создавать новый объект), к тому же имеет атрибут final - от него нельзя наследовать класс. Все классы-обертки (кроме Void) реализуют интерфейс Serializable, поэтому объекты любого (кроме Void) класса-обертки могут быть сериализованы. Все классы-обертки содержат статическое поле TYPE - содержащее объект Class, соответствующий примитивному оборачиваемому типу.
Так же классы-обертки содержат статические методы для обеспечения удобного манипулирования соответствующими примитивными типами, например преобразование к строковому виду.
Программирование на Java
Rendered by www.RenderX.com
Стр. 10 из 33 Wrapper Classes
В таблице 1 описаны примитивные типы и соответствующие им классы обертки:
Класс-обертка |
Примитивный тип |
Byte |
byte |
Short |
short |
Character |
char |
Integer |
int |
Long |
long |
Float |
float |
Double |
double |
Boolean |
boolean |
При этом классы обертки числовых типов - Byte, Short, Integer, Long, Float, Double
наследуются от одного класса - Number. В нем содержится код, общий (часть реализована посредством абстрактных методов) для всех классов-оберток числовых типов -
примитивного значения в виде byte, short, int, long, float и double.
Все классы-обертки реализуют интерфейс Comparable. Number реализует интерфейс java.io.Serializable, поэтому все объекты классов-оберток примитивных числовых типов могут быть сериализованы.
Все классы-обертки числовых типов имеют метод equals(Object), сравнивающий примитивные значения объектов.
Стоит быть особо внимательным - результат выполнения (new Integer(1)).equals(new Byte(1)) дает false, хотя сами значения, вокруг которых обернуты объекты - равны. Такой результат получается потому, что во всех таких классах, метод equals() определен таким образом, что сначала
производится проверка, совпадают ли типы (классы) значений, и если нет - сразу возвращается false.
Например в jdk1.3.1 для Integer метод equals() определен следующим образом:
public boolean equals(java.lang.Object obj) { if(obj instanceof java.lang.Integer)
return value == ((java.lang.Integer)obj).intValue();
else
return false;
}
Рассмотрим более подробно некоторые из классов-оберток.
4.1. Integer
Наиболее часто используемые статические методы.
public static int parseInt(String s) - преобразует в int значение строку, представляющую десятичную запись целого числа
public static int parseInt(String s, int radix) - преобразует в int значение строку,
представляющую запись целого числа в системе счисления radix
Оба этих метода могут возбуждать исключение NumberFormatException, если строка, переданная на вход, содержит нецифровые символы.
Не следует путать эти методы, с другой парой похожих методов:
public static Integer valueOf(String s) public static Integer valueOf(String s,int radix)
Программирование на Java
Rendered by www.RenderX.com
Integer |
Стр. 11 из 33 |
Эти методы выполняют аналогичную работу, только результат представляют в виде объекта-обертки.
Существует так же два конструктора для создания экземпляров в класса Integer
Integer(String s) - такой метод, принимающий в качестве параметра строку, представляющую значение, имеется для каждого класса
Integer(int i) - аналогично, для каждого класса-обертки числового примитивного типа, имеется конструктор, принимающий значение оборачиваемого примитивного типа
Первый вариант конструктора так же может возбуждать исключение NumberFormatException
pubic static String toString(int i) - используется для преобразования значения типа int в строку
Далее перечислены методы, преобразующие int в строковое восьмеричное, двоичное и шестнадцатеричное представление:
pubic static String toOctalString(int i) - восьмеричное
pubic static String toBinaryString(int i) - двоичное
pubic static String toHexString(int i) - шестнадцатиричное .
Имеется так же две статические константы:
Integer.MIN_VALUE - минимальное int значение
Integer.MAX_VALUE - максимальное int значение.
Аналогичны константы, равные границам соответствующих типов, определены и для всех остальных классов-оберток числовых примитивных типов.
public int intValue();
возвращает значение примитивного типа для данного Integer. Классы-обертки остальных примитивных целочисленных типов: Byte, Short, Long содержат только аналогичные методы и константы, только определенные для соответствующих типов: byte, short, long.
Пример:
public static void main(String[] args) { int i = 1;
byte b = 1;
String value = "1000"; Integer iObj = new Integer(i); Byte bObj = new Byte(b);
System.out.println("while i==b is " + (i==b)); System.out.println("iObj.equals(bObj) is " + iObj.equals(bObj)); Long lObj = new Long(value);
System.out.println("lObj = " + lObj.toString());
Long sum = new Long(lObj.longValue() + iObj.byteValue() + bObj.shortValue());
System.out.println("The sum = " + sum.doubleValue());
}
Программирование на Java
Rendered by www.RenderX.com
Стр. 12 из 33 |
Wrapper Classes |
В данном примере произвольным образом используются различные варианты классовоберток и их методов. Соответственно, в результате выполнения, на экран будет выведено следующее:
while i==b is true iObj.equals(bObj) is false lObj = 1000
The sum = 1002.0
Оставшиеся классы-обертки числовых типов: Float и Double - помимо описанного для целочисленных примитивных типов, дополнительно содержат определения следующих констант:
NEGATIVE_INFINITY - отрицательная бесконечность
POSITIVE_INFINITY - положительная бесконечность
NaN - НЕ числовое значение (неопределенность, комплексное число и т.д.)
Кроме того, несколько иначе трактуется значение MIN_VALUE - вместо наименьшего значения, оно представляет минимальное положительное (строго > 0) значение, которое может быть представлено соответствующим примитивным типом и, соответственно, классом-оберткой.
Кроме классов-оберток для примитивных числовых типов, определены таковые и для остальных примитивных типов Java:
4.2. Character
Реализует интерфейс Comparable.
Из конструкторов - имеет только один, принимающий char в качестве параметра.
Кроме стандартных методов equals(), hashCode(), toString() еще из НЕ статических, содержит только два метода:
public char charValue() - возвращает обернутое значение char
public int compareTo(Character anotherCharacter) - сравнивает обернутые значения char как числа, то есть возвращает значение return this.value - anotherCharacter.value;
Так-же, для совместимости с интерфейсом Comparable, метод compareTo() определен с параметром Object:
public int compareTo(Object o) - если переданный объект имеет тип Character, результат будет аналогичен вызову compareTo((Character)o), иначе будет брошено исключение
ClassCastException - так-как Character можно сравнивать только с Character.
Статических методов в классе Character довольно много, все их здесь перечислять смысла не имеет. Все они могут быть довольно полезны. Большинство - это методы, принимающие char и проверяющие всевозможные свойства - является ли цифрой, буквой, буквой заглавного или строчного шрифта, может ли с него начинаться переменная в Java, и т.д. Например:
public static boolean isDigit(char c) - проверяет, является ли char цифрой
Программирование на Java
Rendered by www.RenderX.com