- •Аннотация
- •Лекция 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. Контрольные вопросы
Стр. 12 из 51 |
Управление циклами |
Test t = new Test(); int x = 5; switch(x){
case 1: System.out.println("One"); break;
case 2: System.out.println("Two"); break;
default: case 3:
System.out.println("Tree or other");
}
}
}
откомпилируется без ошибок и на консоль будет выведено
Tree or other
В операторе switch не может быть двух case с одинаковыми значениями.
Т.е. конструкция
switch(x){ case 1:
System.out.println("One");
break; case 1:
System.out.println("Two");
break; case 3:
System.out.println("Tree or other value");
}
не допустима.
Так же в конструкции switch может быть применен только один оператор default.
Можно порекомендовать использование оператора switch вместо многозвенного if else, т.к. switch выполняется быстрее.
8. Управление циклами
В языке Java имеется три основных конструкции управления циклами.
•цикл while
•цикл do
•цикл for
Программирование на Java
Rendered by www.RenderX.com
Цикл while |
Стр. 13 из 51 |
8.1. Цикл while
Основная форма цикла while может быть представлена так
while(логическое выражение) повторяющееся выражение или блок;
В данной языковой конструкции повторяющееся выражение или блок, будет исполняться до тех пор, пока логическое выражение будет иметь истинное значение.
Если выражение или блок представляющий тело цикла будет завершен не нормальным образом по причине
•встретился оператор continue, то часть тела цикла следующая за оператором continue будет пропущена и выполнение цикла продолжится с начала. Если continue используется с меткой и метка принадлежит к данному while, то выполнение его будет аналогичным. Если метка не относится к данному while, то его выполнение будет прекращено.
•встретился оператор break, то выполнение цикла будет прекращено
•если выполнение блока будет прекращено по другим причинам (возникла исключительная ситуация), то выполнение while будет прекращено по тем же причинам.
Рассмотрим несколько примеров
public class Test { static int x = 5; static {
}
public Test() {
}
public static void main(String[] args) { Test t = new Test();
int x = 0; while(x < 5){
x++;
if(x % 2 == 0) continue; System.out.print(" " + x);
}
}
}
На консоль будет выведено
1 3 5
т.е. вывод на печать всех четных чисел будет пропущен.
public class Test {
Программирование на Java
Rendered by www.RenderX.com
Стр. 14 из 51 |
Управление циклами |
static int x = 5; static {
}
public Test() {
}
public static void main(String[] args) { Test t = new Test();
int x = 0; int y = 0;
lbl: while(y < 3){ y++;
while(x < 5){ x++;
if(x % 2 == 0) continue lbl; System.out.println("x=" + x + " y="+y);
}
}
}
}
На консоль будет выведено
x=1 y=1 x=3 y=2 x=5 y=3
т.е. при выполнении условия if(x % 2 == 0) continue lbl; цикл по переменной x будет прерван, а цикл по переменной y продолжится с начала.
Советом по применению конструкции может служить использование фигурных скобок, даже если выражение следующее после while(), будет единственным. Т.о. если конструкция в дальнейшем будет расширяться, то можно избежать потенциальных ошибок, т.к. если фигурные скобки опустить, выражение следующее за первым будет трактоваться как независимое, а не связанное с условием while()
Типичный вариант использования выражения while()
int i = 0; while( i++ < 5){
System.out.println("Counter is " + i);
}
Следует помнить, что цикл while(),будет выполнен только в том случае, когда на момент начала его выполнения, логическое выражение будет истинным. Т.о. при выполнении программы, может иметь место ситуация, когда цикл while() не будет выполнен ни разу.
boolean b = false; while(b){
Программирование на Java
Rendered by www.RenderX.com
Цикл do |
Стр. 15 из 51 |
System.out.println("Executed");
}
в данном случае строка System.out.println("Executed"); выполнена не будет.
8.2. Цикл do
Основная форма цикла do имеет следующий вид
do
повторяющееся выражение или блок; while(логическое выражение)
В отличии от цикла while цикл do, будет выполняться до тех пор, пока логическое выражение будет ложным. Вторым важным отличием является то, что do будет выполнен как минимум один раз.
Следует еще раз обратить внимание на использование фигурных скобок. Так же следует подчеркунть, что условие выхода из уикла должно изменяться в самом цикле, в противном случае, однажды начавшись, цикл не будет закончен никогда. То же самое следует отметить для цикла while(). В качестве примера следует привести следующую конструкцию.
boolean b = false; int counter = 0; do{
counter++;
System.out.println("Counter is " + counter); }while(b);
Типичная конструкция цикла do
int counter = 0; do{
counter ++;
System.out.println("Counter is " + counter); }while(counter > 5);
В остальном выполнение цикла do совершенно аналогично выполнению цикла while.
8.3. Цикл for
Довольно часто, необходимо изменять значение какой-либо переменной в заданном диапазоне, и выполнять повторяющуюся последовательность операторов с использованием этой переменной. Для выполнения этой последовательности действий как нельзя лучше подходит конструкция цикла for.
Программирование на Java
Rendered by www.RenderX.com
Стр. 16 из 51 |
Управление циклами |
Основная форма цикла for выглядит следующим образом:
for(выражение инициализации; условие; выражение обновления) повторяющееся выражение или блок;
Ключевыми элементами данной языковой конструкции являются предложения заключенные в круглых скобках и разделенные точкой с запятой.
•выражение инициализации - выполняется до начала выполнения тела цикла. Чаще всего используется как некое стартовое условие (инициализация, или объявление переменной)
•условие - должно быть логическим выражением и трактуется точно так же как логическое выражение в цикле loop(). Тело цикла будет выполняться до тех пор, пока логическое выражение будет истинным. Как и в случае с циклом while() тело цикла может не исполниться ни разу. Это условие срабатывает, если логическое выражение принимает значение ложь до начала выполнения цикла.
•выражение - выполняется сразу после исполнения тела цикла, и до того как проверено условие продолжения выполнения цикла. Обычно здесь используется выражение инкрементации, но может быть применено и любое другое выражение.
Пример использования цикла for()
...
for(counter=0;counter<10;counter++){ System.out.println("Counter is " + counter);
}
В данном примере предполагается, что переменная counter была объявлена ранее. Цикл будет выполнен 10 раз, и будут напечатаны значения счетчика от 0 до 9.
Допускается определять переменную прямо в предложении:
for(int cnt = 0;cnt < 10; cnt++){ System.out.println("Counter is " + cnt);
}
результат выполнения этой конструкции будет аналогичен предыдущему. Однако следует обратить внимание, что область видимости переменной cnt будет ограничена телом цикла. Следует помнить о диапазоне значений переменной счетчика.
В качестве примера можно привести следующую конструкцию:
for(int I = 0;int < 10;i+=){ System.out.println("Value i = " + i);
}
System.out.println("After loop i value = " + i);
В данном случае воникнет ошибка времени компиляции.
for(byte x = 0; x < 256;x++){
Программирование на Java
Rendered by www.RenderX.com
Цикл for |
Стр. 17 из 51 |
...
}
А такая конструкция будет выполняться бесконечно … Максимальное значение x = 127. После превышения этого значения x ,будет присвоено значение -128 и т.о. значение 256 никогда достигнуто не будет.
Следует обратить внимание на то, что предложение будет выполнено в любом случае, будет выполнено тело цикла или нет. В качестве примера можно привести такую конструкцию
int counter = 10;
...
for(counter = 0;cnt > 0;counter++){
...
}
System.out.println("Counter is " + counter);
На выхоже будет получено Counter is 0
Напротив выражение выполняется только при выполнении тела цикла.
int counter = 0; for(;cnt < 1;counter++){
...
}
System.out.println("Counter is " + counter);
На выходе будет получено Counter is 1
Любая часть конструкции for() может быть опущена. В вырожденном случае мы получим оператор for с пустыми значениями
for(;;){
...
}
В данном случае, цикл будет выполняться бесконечно. Эта конструкция аналогична конструкции while(true){}. Условия, в которых она может быть применена, будут рассмотрены позже.
Возможно так же расширенное использование синтаксиса оператора for(). Предложение и выражение могут состоять из нескольких частей разделенных запятыми.
for(i = 0, j = 0; i<5;i++, j+=2){
...
}
использование такой конструкции вполне правомерно.
Следует отметить, что при использовании в конструкции for() нескольких частей, невозможно определение нескольких переменных или смешение определения и инициализации
Программирование на Java
Rendered by www.RenderX.com