- •Аннотация
- •Лекция 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 из 51 |
Пустой оператор |
4. Пустой оператор
; Является пустым оператором. Данная конструкция вполне применима там, где не предполагается выполнение никаких действий. Преждевременное завершение пустого оператора невозможно.
5. Метки
Любой оператор или блок может иметь метку. Метку можно указывать в качестве параметра для операторов break и continue. Область видимости метки ограничивается оператором или блоком, к которому она относится. Так в следующем примере мы получим ошибку компиляции.
public class Test { static int x = 5; static {
}
public Test() {
}
public static void main(String[] args) { Test t = new Test();
int x = 1; Lbl1:{
if(x == 0) break Lbl1;
}
Lbl2:{
if(x > 0) break Lbl1;
}
}
}
В случае если имеется несколько вложенных блоков и операторов, то метки внешних блоков будут видимы во внутренних.
Этот пример является вполне корректным.
public class Test { static int x = 5; static {
}
public Test() {
}
public static void main(String[] args) { Test t = new Test();
int L2 = 0;
Программирование на Java
Rendered by www.RenderX.com
Стр. 7 из 51
Test: for(int i = 0; i< 10;i++) { test: for(int j = 0; j< 10;j++) {
if( i*j > 50) break Test;
}
}
}
private void test(){
;
}
}
В этом же примере можно увидеть, что метки используют пространство имен отличное от пространства имен переменных, методов и классов.
Традиционно использование меток не рекомендуется, особенно в объектноориентированных языках, поскольку серьезно усложняет понимание порядка выполнения кода, а значит и его тестирование и отладку. Для Java этот запрет можно считать не столь строгим, поскольку самый опасный метод goto отсутствует. В некоторых ситуациях (как в рассмотренном примере со вложенными циклами) метки необходимы, но, конечно, их применение следует ограничивать лишь самыми необходимыми случаями.
6. Оператор if
Пожалуй, наиболее часто встречающейся конструкцией в Java, как и в любом другом структурном языке программирования, является оператор условного перехода.
В общем случае конструкция выглядит так:
if (логическое выражение) выражение или блок 1 else выражение или блок 2
Логическое выражение может быть любой языковой конструкцией, которая возвращает булевский результат. Заметим отличие от языка C, в котором в качестве логического выражения может быть использованы различные типы данных, где отличное от нуля выражение трактуется как истинное значение, а ноль как ложное. В Java возможно использование только логических выражений.
В случае если логическое выражение принимает значение истина, то выполняется выражение или блок 1, в противном случае выражение или блок 2. Вторая часть оператора (else) не является обязательной и может быть опущена. Т.е. конструкция if(x = 5) System.out.println("Five") является вполне допустимой.
Операторы if-else могут каскадироваться. . Иногда это называют многозвенный if else.
String test = "smb";
if( test.equals("value1"){ ….
}else if (test.equals("value2"){
…
}else if (test.equals("value3"){
Программирование на Java
Rendered by www.RenderX.com
Стр. 8 из 51 |
Оператор if |
…
} else {
…
}
Следует помнить, что оператор else относится к ближайшему к нему оператору if. в данном случае последнее условие else будет выполняться только в том случае, если не выполнено предыдущее. Заключительная конструкция else относится к самому последнему условию if b,и будет выполнено только в том случае, если ни одно из вышеперечисленных условий не будет истинным. В случае если одно из условий выполнено, то все последующие выполняться не будут.
Например:
…
int x = 5; if( x < 4){
System.out.println("Меньше 4");
}else if (x > 4){ System.out.println("Больше 4");
}else if (x == 5){ System.out.println("Равно 4");
}else{
System.out.println("Другое значение");
}
Предложение "Равно 4" в данном случае напечатано не будет.
Следует обратить внимание на то, что в условии могут быть использованы только логические выражения.
Например
int x = 0; if(x) ….
вызовет ошибку компиляции.
Выражение вот такого типа тоже будет ошибочным
int x = 0; if( x = 5) ….
так как здесь происходит не операция сравнения а присвоение значения.
Следует заострить внимание на коротком пути (short circuit) вычисления логических выражений рассмотренных ранее.
В качестве полезного примера можно привести следующий
if( null == stringVal || "" == stringVal ) System.out.println("Значение stringVal не определено")
Программирование на Java
Rendered by www.RenderX.com
Стр. 9 из 51
Данная конструкция выполнится успешно.
if( null == stringVal | "" == stringVal ) System.out.println("Значение stringVal не определено")
В этом случае мы получим ошибку времени выполнения, если stringVal,будет иметь пустое (null) значение.
Следует обратить внимание так же на то, что константы используетсяв левой части оператора сравнения. Если мы будем сравнивать переменную с булевской константой и допустим опечатку
if( x = true)
…
то такая конструкция будет всегда истинна, что возможно отличается от того, что этой конструкцией хотел выразить программист. (Такого рода ошибки, могут обнаруживаться с помощью программ автоматического тестирования)
В этом же случае
if( true = x)
компилятор выдаст ошибку еще во время компиляции.
7. Оператор switch
Оператор switch() в случае необходимости множественного выбора. Выбор осуществляется на основе целочисленного значения.
Структура оператора:
switch(int value){ case const1:
выражение или блок case const2:
выражение или блок case constn:
выражение или блок default:
выражение или блок
}
Причем фраза default не является обязательной
В качестве параметра switch может быть использована переменная типа byte, short, int, char или выражение. Выражение должно в конечном итоге возвращать параметр одного из указанных ранее типов. В операторе case не могут применяться значения примитивного типа long и ссылочных типов Long, String, Integer, Byte и т.д.
Программирование на Java
Rendered by www.RenderX.com
Стр. 10 из 51 |
Оператор switch |
При выполнении оператора switch производится последовательное сравнение значения x с константами указанными после case и в случае совпадения производится выполнение выражения следующего за этим условием. Если выражение выполнено нормально, и нет преждевременного его завершения, то производится выполнение сравнения для последующих case. Если же выражение, следующее за case, завершилось не нормально, то будет прекращено выполнение всего оператора switch.
Если не выполнен ни один оператор case, то выполнится оператор default, если он имеется в данном switch. Если оператора default нет, и ни одно из условий case не выполнено, то ни одно из выражений switch выполнено не будет.
Если какое либо условие case выполнено, то все выполнение switch не прекратится, а будут проверяться следующие за ним условия. Что бы избежать этого, после части кода, которая выполнена, и дальнейшее выполнение не является необходимым, применяется break.
После оператора case должен следовать литерал, который может быть интерпретирован как 32 битовое целое значение. Здесь не могут применяться выражения и переменные, если они не являются final static.
Наиболее часто встречается ошибка, когда программист забывает указать break после выполнения блока кода и производится дальнейшее выполнение условий сравнения в операторе switch(). Следует обратить на это внимание. В качестве хорошего стиля программирования можно порекомендовать использование оператора default.
Рассмотрим пример
int x = 2; switch(x){ case 1: case 2:
System.out.println("Равно 1 или 2"); break;
case 2: case 3
System.out.println("Равно 2 или 3"); break;
default:
System.out.println("Значение не определено");
}
В данном случае на консоль будет выведен результат Равно 1 или 2.Если же убрать операторы break, то будут выведены все три строки.
Вот такая конструкция вызовет ошибку времени компиляции.
int x = 5; switch(x){ case y:
…
break;
}
Программирование на Java
Rendered by www.RenderX.com
Стр. 11 из 51
Если в операторе switch() применяется выражение, следует обратить внимание на результирующий тип выражения. Например
float x = 1.0f; int y = 4; switch(x*y){ case 10:
…
break; case 20:
…
break;
default:
…
}
вызовет ошибку времени компиляции.
Следует обратить внимание так же на следующий ньюанс. Если в операторе switch() указано значение типа byte или short, то соответственно в операторах case должны применяться константы, которые могут быть сохранены в переменной данного типа. Например:
byte x = 5; switch(x){ case 1:
…
break; case 132:
…
break;
default:
…
}
вызовет ошибку компиляции. Так как case 132 превышает максимальное значение, которое может быть сохранено в переменной типа byte; Оператор default не обязательно должен замыкать конструкцию switch case. Он может так же комбинироваться с любым оператором case
Например
public class Test { static int x = 5; static {
}
public Test() {
}
public static void main(String[] args) {
Программирование на Java
Rendered by www.RenderX.com