- •Аннотация
- •Лекция 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. Контрольные вопросы
String |
|
Стр. 15 из 33 |
static long |
round(double a) |
Возвращает значение типа long |
|
|
ближайшее по значению к а. (5) |
static long |
round(double a) |
Возвращает значение типа long |
|
|
ближайшее по значению к а. (6) |
static double |
sqrt(double a) |
Возвращает положительный квадратный |
|
|
корень числа a |
static double |
toDegrees(double angrad) |
Преобразует значение угла из радианов |
|
|
в градусы |
static double |
toRadians(double angdeg) |
Преобразует значение угла из градусов |
|
|
в радианы |
Следует обратить внимание, что
1.abs вернет значения типа int, если в качестве параметра будут переданы значения типа byte, short, char.
2.Угол задается в радианах.
3.Если round имеет аргумент double, то возвращается значение типа long, если аргумент типа float, то будет возвращено значение типа int.
4.Операторы и функции для вычисления остатка подробно рассматривались в 3 лекции.
6. Строки
6.1. String
Этот класс используется в Java для представления строк. Он предназначен для хранения не модифицируемых строк. После того как создан экземпляр этого класса, строка уже не может быть модифицирована. Для создания объекта String можно использовать различные варианты конструктора. Наиболее простой - если содержимое строки известно на этапе компиляции - это написать текст в кавычках:
String abc = "abc";
Можно использовать и различные варианты конструктора. Наиболее простой из них - конструктор, получающий на входе строковый литерал.
String s = new String("immutable");
На первый взгляд, эти варианты создания строк отличаются только синтаксисом. На самом деле различие есть, хотя в большинстве случаев его можно и не заметить. Каждый строковый литерал имеет внутреннее представление, как экземпляр класса String. Классы в JAVA могут иметь целый набор таких строк и, когда класс компилируется, экземпляр представляющий литерал, добавляется в этот набор. Однако, если такой литерал уже имеется где-то в другом месте класса, т.е. уже представлен в наборе строковых объектов, то новый экземпляр (фактически копирующий уже существующий) создан не будет. Вместо этого будет создана ссылка на уже имеющийся объект. Т.к. строки не являются модифицируемыми объектами, то это не нанесет никакого урона другим фрагментам программы. С другой стороны, если объект-строка создается с помощью явного вызова
Программирование на Java
Rendered by www.RenderX.com
Стр. 16 из 33 |
Строки |
конструктора, то даже если эти строки будут совершенно идентичными, экземпляры класса String будут отличаться.
В объекте String определен метод equals() который сравнивает две строки на предмет идентичности.
Рассмотрим пример
public class Test { public Test() {
}
public static void main(String[] args) { Test t = new Test();
String s1 = "Hello world !!!";
String s2 = "Hello world !!!";
System.out.println("String`s equally = " + (s1.equals(s2))); System.out.println("Strings are the same = " + (s1==s2));
}
}
в результате на консоль будет выведено
String`s equally = true
Strings are the same = true
Теперь несколько модифицируем код
public class Test { public Test() {
}
public static void main(String[] args) { Test t = new Test();
String s1 = "Hello world !!!";
String s2 = new String("Hello world !!!");
System.out.println("String`s equally = " + (s1.equals(s2))); System.out.println("Strings are the same = " + (s1==s2));
}
}
в результате на консоль будет выведено
String`s equally = true
Strings are the same = false
В первом примере для создания строк используются строковые литералы, поэтому ссылки s1 и s2 ссылаются на один и тот же объект. Во втором случае применены конструкторы, поэтому, несмотря на то, что строки идентичны переменные ссылаются на разные объекты, которые, в сущности, создаются во время выполнения программы и не находятся во множестве строковых констант, которое создается на момент компиляции.
Программирование на Java
Rendered by www.RenderX.com
String |
Стр. 17 из 33 |
Следует обратить внимание, что при создании экземпляров строк во время выполнения, они не
помещаются в набор строковых констант. Однако, можно явно указать на необходимость поместить,
вновь создаваемый экземпляр класса String в этот набор, применив метод intern()
public class Test {
public static void main(String[] args) { Test t = new Test();
String s1 = "Hello world!!!";
String s2 = new String("Hello world!!!").intern(); System.out.println("String`s equally = " + (s1.equals(s2))); System.out.println("Strings are the same = " + (s1==s2));
}
}
в этом случае на консоль будет выведено
String`s equally = true
Strings are the same = true
В такой подход экономит занимаемую программой память, что в некоторых случаях может быть
существенно. Помимо этого, если мы уверены, что все троки находятся в наборе сформированном
при компиляции, для сравнения сток, вместо метода equals() можно использовать оператор ==, который выполняется значительно быстрее.
В JAVA для строк переопределен оператор +. При использовании этого оператора производится конкатенация строк. В классе String так же определен метод
public String concat(String s);
он возвращает новый объект строку дополненный справа строкой s.
Следует еще раз обратить внимание, что строки являются не модифицируемыми объектами. И если используется оператор конкатенации или какой-либо вспомогательный метод класса String то
изменения строки не произойдет, а будет создан новый экземпляр класса String. Так же следует
обратить на использование в методах параметров типа String. Не смотря на то, что String является объектом и передается в метод по ссылке, String не модифицируемый объект и все изменения в методе не повлекут изменений исходного объекта.
public class Test {
public static void main(String[] args) { Test t = new Test();
String s = "prefix"; System.out.println("String before = " + s); t.perform(s);
System.out.println("String after =" + s);
}
private void perform(String s){ System.out.println(s + " suffix");
}
}
String before = prefix prefix suffix
String after =prefix
Программирование на Java
Rendered by www.RenderX.com
Стр. 18 из 33 |
Строки |
В этом примере видно, что строка s в действительности не изменяется.
Рассмотрим другой пример.
public class Test {
public static void main(String[] args) { Test t = new Test();
String s = " prefix !"; System.out.println(s); s = s.trim(); System.out.println(s); s = s.concat(" suffix"); System.out.println(s);
}
}
prefix ! prefix ! prefix ! suffix
В данном случае может сложиться впечатление, что строку можно изменять. В действительности это не так. После выполнения операций trim и concat создается новый объект - строка, ссылка s, будет указывать на новый объект-строку.
Как уже отмечалось ранее, строка состоит из шестнадцатибитовых UNICODE символов. Однако во многих случаях требуется работать с восьмибитовыми символами (ввод/вывод, работа с базой данных и т.д.). Преобразование строки в последовательность байтов (восьмибитовые символы) производится с методами
byte[] getBytes(); - возвращает последовательность байтов, в кодировке принятой по умолчанию. (Как правило зависит от настроек операционной системы)
byte[] getBytes(String encoding); - возвращает последовательность байтов, в кодировке encoding;
Для выполнения обратной операции (преобразования байтов в строку) необходимо сконструировать новый объект-строку.
String(byte[] bytes); - создает строку из последовательности байтов в кодировке принятой по умолчанию;
String(byte[] bytes,String enc); - создает строку из последовательности байтов в указанной кодировке.
6.2. StringBuffer
Этот класс используется для создания и модификации строковых выражений, которые после можно превратить в String. Он реализован на основе массива char[] и, в отличии от String, после создания объекта, значение строки, в нем содержащейся может быть изменено.
Рассмотрим наиболее часто используемые конструкторы класса StringBuffer
StringBuffer () - создает пустой StringBuffer
Программирование на Java
Rendered by www.RenderX.com
StringBuffer |
Стр. 19 из 33 |
StringBuffer(String s) - в качестве параметра используется объект String
StringBuffer (int capacity) - создает экземпляр класса StringBuffer c заранее заданным размером. Задание размера не означает, что нельзя будет манипулировать со строками, длинной более указанной при создании объекта, а всего лишь говорит о том, что при манипулировании строками, длина которых меньше указанной, не потребуется дополнительного выделения памяти.
Типичный пример использования StringBuffer может быть продемонстрирован следующим кодом:
public class Test {
public static void main(String[] args) { Test t = new Test();
String s = new String("ssssss"); StringBuffer sb = new StringBuffer("bbbbbb"); s.concat("-aaa");
sb.append("-aaa"); System.out.println(s); System.out.println(sb);
}
}
В результате на экран будет выведено следующее:
ssssss bbbbbb-aaa
В данном примере можно заметить, что объект String остался неизменным, а объект
StringBuffer изменился.
Основные методы, используемые для модификации StringBuffer - это:
public StringBuffer append(String str) - добавляет переданную строку str к уже имеющейся в объекте;
public StringBuffer insert(int offset, String str) - вставка строки, начиная с позиции offset (пропустив offset символов)
Стоит обратить внимание, что оба этих метода имеют варианты, принимающие в качестве параметров различные примитивные типы Java вместо String. При использовании этих методов, значение этого примитивного типа сначала будет представлено строкой, как это произошло бы вызовом метода String.valueOf(), после чего будет вызван этот же метод, передав полученное значение.
Еще один важный момент, связанный с этими методами - они возвращают сам объект, на котором вызываются. Таким образом, возможно их использование в цепочке. Например:
В результате на экран будет выведено:
abcdef
Программирование на Java
Rendered by www.RenderX.com