- •Основы программирования на языке java в среде eclipse
- •Ответственный за выпуск: в.И. Павловський, зав. Кафедрою информационных и компьютерных систем, канд. Техн. Наук, доцент.
- •2.1 Задание на лабораторную работу 19
- •1.2 Краткие теоретические сведения
- •7.3 Порядок выполнения работы 103
- •7.4 Содержимое отчета 103
- •7.5 Контрольные вопросы 104
- •Введение
- •1Лабораторная работа №1 Изучение среды разработки Eclipse
- •1.1 Задание на лабораторную работу
- •1.2.1Создание проекта
- •1.2.2Создание нового класса Java
- •1.3 Порядок выполнения работы
- •1.4 Содержимое отчета
- •Краткие теоретические сведения.
- •1.5 Контрольные вопросы
- •2Лабораторная работа №2 Основы языка Java
- •2.1 Задание на лабораторную работу
- •2.2 Краткие теоретические сведения
- •2.2.1Создание объектов
- •2.2.2Примитивные типы
- •2.2.3Числа высокой точности
- •2.2.4Уничтожение объектов
- •2.2.5Видимость имен
- •2.2.6Использование других компонентов
- •2.2.7Ключевое слово static
- •2.2.8Массивы
- •2.2.9Обработка ошибок с помощью исключений
- •2.3 Порядок выполнения работы
- •2.4 Содержимое отчета
- •2.5 Контрольные вопросы и задания
- •3Лабораторная работа №3 Объектная модель языка Java
- •3.1 Задание на лабораторную работу
- •3.2 Краткие теоретические сведения
- •3.3 Порядок выполнения работы
- •Краткие теоретические сведения.
- •4.2 Краткие теоретические сведения
- •4.2.1Классы дерева и узла
- •4.2.2Вопросы сокрытия реализации
- •4.2.3Пользовательский интерфейс
- •4.3 Порядок выполнения работы
- •4.4 Содержимое отчета
- •Краткие теоретические сведения.
- •4.5 Контрольные вопросы
- •5Лабораторная работа №5 Изучение основ объектно-ориентированного программирования на языке Java. Часть 2
- •5.1 Задание на лабораторную работу
- •5.2 Краткие теоретические сведения
- •5.2.1Классы деревьев и интерфейсы
- •5.2.2Рекурсивный проход по деревьям разных классов
- •5.2.3Расширение ранее созданных классов специфическими операциями пользователей
- •5.2.4Вопросы оптимизации кода
- •5.3 Порядок выполнения работы
- •5.4 Содержимое отчета
- •Краткие теоретические сведения.
- •5.5 Контрольные вопросы
- •6Лабораторная работа №6 Изучение коллекций Java и системы ввода-вывода
- •6.1 Задание на лабораторную работу
- •6.2 Краткие теоретические сведения
- •6.2.1Представление и реализация дерева на основе коллекций
- •В описании узла дерева необходимо создать и инициализировать объект класса список или набор сыновей, например
- •Количество сыновей узла дерева определяется следующим образом:
- •Элементу набора с индексом I выполняется путем получения массива из набора
- •6.2.2Представление и реализация дерева на основе ассоциативных массивов (карт отображений)
- •В описании узла дерева необходимо создать и инициализировать объект ассоциативный массив сыновей, например
- •Количество сыновей узла дерева определяется следующим образом:
- •6.2.3Доступ к коллекции или ассоциативному массиву через итератор
- •6.2.4Использование обобщений Java 5
- •В описании узла дерева необходимо создать и инициализировать коллекцию настраиваемый список, например
- •6.2.5Сериализация и десериализация дерева в файл
- •6.2.6Ввод и вывод в потоки со сжатием данных
- •6.3 Порядок выполнения работы
- •Краткие теоретические сведения.
- •Многопоточность;
- •РекомендУемая литература
- •7.2 Краткие теоретические сведения
- •7.2.1Многопоточность
- •7.2.2Процессы, потоки и приоритеты
- •7.2.3Приоритеты потоков в приложениях Java
- •7.2.4Реализация многопоточности в Java
- •7.2.5Функциональность класса Thread
- •7.2.6Реализация интерфейса Runnable
- •7.2.7Синхронизация потоков
- •7.2.8Синхронизация методов
- •7.2.9Блокировка потока
- •7.2.10Синхронизация доступа к совместно используемым данным.
- •7.2.11Избыточная синхронизация
- •7.2.12Вызов метода wait
- •7.2.13Документирование уровней безопасности
- •7.2.14Работа с графикой Графика 2d
- •Пространства координат
- •Режим рисования
- •Создание цвета
- •Основные методы рисования
- •Рисование фигур средствами Java2d
- •Класс BasicStroke
- •Класс GeneralPath
- •Классы GradientPaint и TexturePaint
- •7.3 Порядок выполнения работы
- •7.4 Содержимое отчета
- •Краткие теоретические сведения;
- •7.5 Контрольные вопросы
2.2.5Видимость имен
Проблема каждого языка программирования состоит в управлении именами. Если использовать имена в одном модуле программы, а другой программист использует эти же имена в другом модуле, возникает проблема как отличить одно имя от другого и предохранить два имени от “конфликта”? В C это обычная проблема, поэтому программы часто содержат неуправляемое море имен. Классы C++ (на которых основываются классы Java) содержат функции внутри классов, так что они не могут конфликтовать с именами функций, расположенных в других классах.
В Java для производства недвусмысленных имен для библиотеки используется спецификатор, мало чем отличающийся от доменных имен Internet. Фактически, создатели Java хотят использовать доменные имена Internet в обратном порядке, так как это гарантирует их уникальность. Например: ua.cn.stu.oop.labs.
Этот механизм означает, что все файлы автоматически живут в своем собственном пространстве имен, и каждый класс в файле должен иметь уникальный идентификатор.
2.2.6Использование других компонентов
Когда требуется использовать предопределенные классы в программе, компилятор должен знать, где они расположены. Конечно, класс может существовать в том же самом файле исходного кода, из которого он вызывается. В этом случае просто используется класс — даже если класс определен дальше по файлу. Java устранит проблему “ранней ссылки”, так что нет необходимости думать об этом.
Решение проблемы использования класса, определенного в другом файле, выполняется путем точного сообщения компилятору Java классов, которые не обходимо использовать, с помощью ключевого слова import. import говорит компилятору о введении пакета, который является библиотекой классов.
import java.util.ArrayList; |
Пакет util содержит несколько классов, и можно использовать некоторые из них, не объявляя их точно. Это легче всего выполнить, используя ‘*’. Это более общий способ для импорта набора классов, в отличие от индивидуального импорта каждого класса.
import java.util.*; |
2.2.7Ключевое слово static
Обычно, когда создается класс, описывается, как выглядит объект класса и как он будет себя вести. На самом деле ничего не получается, пока не создается объект класса с помощью new, и в этом месте создается хранилище данных, и становятся доступными методы.
Но есть две ситуации, в которых этот подход не достаточен. Один из них, если требуется иметь только одну часть хранилища для определенных данных, не зависимо от того, сколько объектов создано, или даже если не было создано объектов этого класса. Второй, если нужен метод, который не ассоциируется с объектом определенного класса. То есть, нужен метод, который можно вызвать, даже если объект не создан. Можно достигнуть этих эффектов с помощью ключевого слова static. Когда говорится о чем-то static, это означает, что данные или метод не привязаны к определенному экземпляру объекта класса. Даже если никогда не создавать объект этого класса, можно вызвать статический метод или получить доступ к части статических данных. Так как статическим методам не нужно создавать объект до их использования, они не могут получить прямой доступ к не статическим членам или методам простым вызовом этих методов без указания имени объекта (так как не статические члены и методы должны быть привязаны к определенному объекту).
Некоторые объектно-ориентированные языки используют термины данные класса и методы класса в том смысле, что данные и методы существуют только для класса, как целое, а не для любого определенного объекта класса. Иногда литература по Java тоже использует эти термины.
Чтобы сделать член-данное или член-метод статическим, необходимо просто поместить ключевое слово перед определением. Например, следующий код производит статический член-данное и инициализирует его:
class StaticTest { static int i = 47; } |
Теперь, даже если создать два объекта StaticTest, будет только одна часть хранилища для StaticTest.i. Оба объекта будут разделять одну и ту же i. Например:
StaticTest st1 = new StaticTest(); StaticTest st2 = new StaticTest(); |
В этом месте и st1.i, и st2.i имеют одно и то же значение 47, так как они ссылаются на одну и ту же область памяти.
Есть два способа сослаться на статическую переменную. Как показано выше, можно назвать ее через объект, например, сказав st2.i. Также можете прямо сослаться через имя класса, что нельзя сделать с не статическими членами. (Это предпочтительный способ сослаться на статическую переменную, та как это подчеркивает, что переменная имеет статическую природу.)
StaticTest.i++; |
Оператор ++ инкрементирует переменную. В этом месте и st1.i, и st2.i будут иметь значение 48.
Сходная логика применима и к статическим методам. Можно сослаться на статический метод либо через объект, как можно сделать с любым методом, или с помощью специального дополнительного синтаксиса ClassName.method( ). Статический метод определяется сходным образом:
class StaticFun { static void incr() { StaticTest.i++; } } |
Метод incr() класса StaticFun инкрементирует статическую переменную i. Можно вызвать incr() обычным способом, через объект:
StaticFun sf = new StaticFun(); sf.incr(); |
Или можно вызвать его прямо через класс:
StaticFun.incr(); |
Когда static применяется к членам-данным, это изменяет путь создания данных (один экземпляр для всего класса против не статического: один для каждого объекта). Важность использования static для методов в том, чтобы позволить вызывать этот метод без создания объекта.
Как и любой метод, статический метод может создавать или использовать именованные объекты того же типа.
