Языки программирования
<<  Java 2 Micro Edition Java 2 Micro Edition  >>
Java 2 Micro Edition
Java 2 Micro Edition
Синтаксис объявления классов
Синтаксис объявления классов
Синтаксис объявления классов
Синтаксис объявления классов
Абстрактные классы
Абстрактные классы
Модификатор final
Модификатор final
Открытые классы
Открытые классы
Вложенные классы
Вложенные классы
Переменные и константы
Переменные и константы
Переменные и константы
Переменные и константы
Переменные класса
Переменные класса
Константы
Константы
Модификаторы
Модификаторы
Спецификаторы доступа
Спецификаторы доступа
Методы
Методы
Методы
Методы
Возвращаемое значение
Возвращаемое значение
Перегрузка методов
Перегрузка методов
Модификатор static
Модификатор static
Static-блоки
Static-блоки
Конструктор
Конструктор
Конструктор по умолчанию
Конструктор по умолчанию
Вызов конструктора
Вызов конструктора
finalize()
finalize()
throws
throws
Абстрактные методы
Абстрактные методы
Модификатор synchronized
Модификатор synchronized
Модификатор native
Модификатор native
Main-метод
Main-метод
Использование интерфейсов
Использование интерфейсов
Использование интерфейсов
Использование интерфейсов
Использование интерфейсов
Использование интерфейсов
Переменные и методы
Переменные и методы
Реализация
Реализация
Организация доступа к объектам
Организация доступа к объектам
Обращение к элементам
Обращение к элементам
Создание объектов
Создание объектов
Информация о типе
Информация о типе
Обработка исключений
Обработка исключений
Обработка ошибок
Обработка ошибок
Исключения
Исключения
Исключения
Исключения
Обрабатываемые и фатальные
Обрабатываемые и фатальные
Пользовательские исключения
Пользовательские исключения
Описание исключений
Описание исключений
Использование исключений
Использование исключений
Возбуждение исключений
Возбуждение исключений
Перехват исключений
Перехват исключений
Использование пакетов
Использование пакетов
Использование пакетов
Использование пакетов
Импортирование
Импортирование
Именование пакетов
Именование пакетов
Конфликты имен
Конфликты имен
Прямое обращение
Прямое обращение
Создание пакетов
Создание пакетов
Создание пакетов
Создание пакетов
Технология многопоточного программирования
Технология многопоточного программирования
Многопоточное программирование
Многопоточное программирование
Потоки в Java
Потоки в Java
Программирование потоков
Программирование потоков
Программирование потоков
Программирование потоков
Реализация интерфейса Runnable
Реализация интерфейса Runnable
Реализация интерфейса Runnable
Реализация интерфейса Runnable
Наследование класса Thread
Наследование класса Thread
Наследование класса Thread
Наследование класса Thread
Контроль исполнения
Контроль исполнения
Управление потоком
Управление потоком
Методы объекта
Методы объекта
Методы объекта
Методы объекта
Методы класса
Методы класса
Методы объекта
Методы объекта
Методы объекта
Методы объекта
Приоритеты выполнения потоков
Приоритеты выполнения потоков
Приоритеты потоков
Приоритеты потоков
Установка приоритетов
Установка приоритетов
Синхронизация потоков
Синхронизация потоков
Синхронизация потоков
Синхронизация потоков
Синхронизация методов
Синхронизация методов
Синхронизированные блоки
Синхронизированные блоки
Остановка и возобновление потоков
Остановка и возобновление потоков
Клинч (deadlock)
Клинч (deadlock)

Презентация на тему: «Java 2 Micro Edition». Автор: Сергей Жерздев. Файл: «Java 2 Micro Edition.ppt». Размер zip-архива: 60 КБ.

Java 2 Micro Edition

содержание презентации «Java 2 Micro Edition.ppt»
СлайдТекст
1 Java 2 Micro Edition

Java 2 Micro Edition

Язык Java

Лаборатория информационных технологий (ИТЛаб)

Проект ТЭЛМА

Жерздев С.В.

При поддержке фирмы Intel?

1 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

2 Синтаксис объявления классов

Синтаксис объявления классов

2 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

3 Синтаксис объявления классов

Синтаксис объявления классов

В синтаксисе языка Java объявление класса осуществляется следующим образом: [модификаторы] class имя-класса [extends суперкласс] [implements интерфейс] { // переменные и методы класса … } Основные модификаторы объявления класса позволяют определять его абстрактным (abstract), открытым (public) или завершающим (final).

3 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

4 Абстрактные классы

Абстрактные классы

Если в классе присутствует хотя бы один абстрактный метод, то такой класс определяется модификатором abstract. В дальнейшем подклассы абстрактного класса обязательно должны оформить реализацию таких методов. С другой стороны, одно из главных отличий абстрактных классов заключается в том, что они могут иметь подклассы, но не могут иметь экземпляров. В данном случае экземпляры могут иметь только неабстрактные потомки абстрактных классов.

4 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

5 Модификатор final

Модификатор final

Если в процессе написания кода имеется необходимость в завершении дерева роста какого-либо класса, то в этом случае при описании такого класса следует использовать модификатор final. Другими словами, класс, объявленный модификатором final, не может иметь подклассов (потомков). Чаще всего такие классы используются для того, чтобы запретить вносить исправления в реализацию их методов, т.е. запретить переопределять их. Такие классы также запрещают добавление новых переменных.

5 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

6 Открытые классы

Открытые классы

Классы, объявленные с использованием модификатора public, являются открытыми, что позволяет использовать их внутри программы и пакета, а также за пределами пакета, в котором он объявляется. Одно из правил построения Java-программы заключается в том, что в файле исходного кода может быть объявлен только один public-класс. При этом имя файла исходного кода должно совпадать с именем содержащегося в нем public-класса.

6 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

7 Вложенные классы

Вложенные классы

В стандарте языка Java осуществляется поддержка так называемых вложенных классов. Это означает, что можно объявить один класс внутри другого. Обычно на практике это делается для того, чтобы скрыть некую информацию внутри класса, т.е. использовать ресурсы вложенного класса для внутренних целей. Другими словами, извне обычным способом нельзя обратиться к вложенному классу.

7 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

8 Переменные и константы

Переменные и константы

8 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

9 Переменные и константы

Переменные и константы

В Java для объявления переменных класса используется следующий синтаксис: [static] [final] [transient] [volatile] тип__данных имя_переменной; Например: class MyClass { int xl, x2; double yl; double y2; }

9 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

10 Переменные класса

Переменные класса

В Java переменные-члены класса могут объявляться с использованием модификатора static. В этом случае объявляемая переменная является переменной класса, т.е. является общей для всех ее экземпляров. Если в классе имеется static-переменная и при этом у этого класса имеется класс-потомок, то значение такой static-переменной будет также общим и для экземпляров класса-потомка.

10 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

11 Константы

Константы

При объявлении константы в теле класса необходимо установить ей начальное значение, которое нельзя будет изменить впоследствии. Это значение будет общим для всех экземпляров данного класса, а также для экземпляров его классов-потомков. Синтаксис объявления константы класса требует использования модификатора final, при этом обязательно присваивают значение данной константе. Например: final double pi = 3.1415926535898;

11 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

12 Модификаторы

Модификаторы

Модификатор transient используется в Java при объявлении переменных класса для того, чтобы определить переменные, не являющиеся частью постоянного состояния класса. Модификатор volatile используется для определения переменной, которая не оптимизируется компилятором и не кэшируется на уровне виртуальной машины Java. Это позволяет использовать такие переменные при подключении к Java внешних ресурсов, например, при подключении к ресурсам операционной системы.

12 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

13 Спецификаторы доступа

Спецификаторы доступа

Для переменных и методов класса существуют так называемые спецификаторы доступа. С помощью этих спецификаторов определяется видимость переменных и методов класса в других классах, программах, методах и т.д. public - доступ разрешается любому классу; private - доступ разрешается внутри класса, в котором они объявлены; protected - доступ разрешается только внутри класса, в котором они объявлены и в его подклассах; <пробел> - доступ разрешается для любых классов того же пакета, в котором размещается класс, где объявляются эти методы и переменные.

13 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

14 Методы

Методы

14 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

15 Методы

Методы

Cинтаксис Java для объявления методов имеет следующий вид: [спецификатор__доступа ] [static] [abstract] [final] [native] [synchronized] тип_данных имя_метода ([параметр1], [параметр2], ...) [throws список_исключений] Любой метод в Java должен содержать хотя бы тип возвращаемых данных и имя. Все остальные элементы синтаксиса позволяют управлять поведением метода и определять степень его использования.

15 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

16 Возвращаемое значение

Возвращаемое значение

Каждый метод может возвращать какое-либо значение определенного типа данных. Тип данных в этом случае может быть как простым (int, double. char и т.д.), так и сложным (String, StringBuffer и т.д.). Если имеется необходимость не использовать такую возможность, то для этого при объявлении метода используется ключевое слово void. Для того чтобы передать полученное значение за пределы метода, используется оператор return.

16 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

17 Перегрузка методов

Перегрузка методов

В качестве имен нескольких методов одного класса может выступать одно и то же значени. Единственным условием в данном случае является несовпадение входящих в эти методы параметров. Данное несовпадение заключается в том, что может различаться их количество или тип данных. Когда в основной программе выполняется обращение с передачей параметров, Java автоматически определяет, какому методу следует передать управление.

17 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

18 Модификатор static

Модификатор static

Аналогично тому, как в Java могут существовать переменные класса и экземпляра, также могут объявляться методы класса и экземпляра. В обоих случаях для определения принадлежности метода или переменной к классу, а не к его экземпляру, используется модификатор static. Так же, как и переменные, методы класса используются всеми экземплярами данного класса. Кроме того, static-методы можно вызывать в программе без создания экземпляра класса, в котором они объявлены.

18 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

19 Static-блоки

Static-блоки

Помимо использования модификатора static при объявлении переменных и методов класса, с помощью него можно создавать так называемые static-блоки. class MyClass { static int[] myNum = new int[10]; static { for (int i=0; i<10; i++) myNum[i] = i*i; } }

19 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

20 Конструктор

Конструктор

Конструктор класса представляет собой метод данного класса, который имеет одинаковое с этим классом имя. Конструкторы класса вызываются каждый раз при создании объекта класса. Конструктор класса может быть перегружен.

20 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

21 Конструктор по умолчанию

Конструктор по умолчанию

Наличие конструктора в классе является необязательным требованием. Если конструктор класса не указывается, то компилятор генерирует конструктор по умолчанию, обладающий следующими особенностями: модификатор доступа к нему определяется как public; выполняется первоначальная инициализация всех полей объекта; он используется как конструктор копирования.

21 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

22 Вызов конструктора

Вызов конструктора

Вызов конструктора осуществляется только в процессе создания экземпляра. Исключением является вызов конструктора родительского класса в конструкторе класса-потомка: class MyNewClass extends MyClass { MyNewClass(int а, int b) { super(a, b); … } } Ключевое слово super должно быть самым первым в методе потомка.

22 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

23 finalize()

finalize()

В классе имеется метод finalize(), который выполняется в процессе удаления сборщиком мусора этого объекта из памяти. Вызвать в программе метод finalize() невозможно и его присутствие в классе не является обязательным. Обычно в этом методе выполняются различные специфические действия, например, закрытие сетевых соединений, соединений с базами данных и т.д.

23 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

24 throws

throws

Если в создаваемом методе может возникнуть (возбудиться) исключение, которое не перехватывается в данном методе, то при объявлении такого метода после ключевого слова throws эти исключения перечисляются через запятую.

24 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

25 Абстрактные методы

Абстрактные методы

Если в классе объявляется так называемый абстрактный метод, то и класс, в свою очередь, также является абстрактным. Абстрактным методом называется метод, при объявлении которого отсутствует его реализация. Для объявления метода в качестве абстрактного в синтаксисе языка Java используется модификатор abstract.

25 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

26 Модификатор synchronized

Модификатор synchronized

Использование модификатора synchronized при объявлении метода приводит к блокированию объекта, в котором находится этот метод. При обращении к synchronized-методу в каком-либо объекте доступ к другим методам данного объекта закрывается до тех пор, пока не выполнятся все команды этого метода или не будет выполнен оператор выхода из метода return. Объявление метода с помощью такого модификатора обычно на практике используется при работе с потоками.

26 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

27 Модификатор native

Модификатор native

Если в процессе разработки Java-программы имеется необходимость в подключении методов, реализованных на других языках программирования, то в этом случае такой метод объявляется с использованием модификатора native. То есть использование этого модификатора определяет так называемый родной метод, иначе говоря, метод, реализованный на другом языке программирования, например, С++.

27 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

28 Main-метод

Main-метод

Если в классе объявить метод с именем main, при этом установив для него модификаторы public и static, то виртуальная машина Java обратится к этому методу при попытке запуска файла, в котором написан данный метод, в виде приложения. Это означает, что если необходимо создать Java-приложение, то в каком-нибудь классе кода следует объявить такой main-метод, что приведет к запуску команд, расположенных внутри данного метода.

28 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

29 Использование интерфейсов

Использование интерфейсов

29 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

30 Использование интерфейсов

Использование интерфейсов

Интерфейсы в Java позволяют описывать внутри себя методы и переменные, не указывая при этом реализацию этих методов. Иначе говоря, интерфейсы представляют собой полностью абстрактный класс, т.е. класс, в котором все объявленные методы являются абстрактными. Синтаксис Java для объявления интерфейсов имеет следующий вид: [public] interface имя_интерфейса [extends интерфейс1, интерфейс2, ...] { }

30 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

31 Использование интерфейсов

Использование интерфейсов

Если имеется необходимость в установке видимости объявляемого интерфейса за пределами пакета, то в этом случае следует установить спецификатор доступа public. Интерфейсы, так же как и классы, могут наследоваться от других интерфейсов. При этом используется ключевое слово extends, после чего через запятую указываются имена интерфейсов. Класс может быть потомком только одного класса, тогда как у интерфейса может быть несколько интерфейсов-предков.

31 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

32 Переменные и методы

Переменные и методы

При объявлении методов нужно учитывать то, что их реализация обязательно должна отсутствовать: void myMethod(String s); Переменные, объявляемые внутри интерфейса обязательно должны быть проинициализированы. Все переменные в интерфейсе рассматриваются Java-компилятором как public, static и final.

32 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

33 Реализация

Реализация

Для того чтобы создать класс, который будет наследовать переменные и методы объявленного ранее интерфейса, необходимо в синтаксисе объявления класса указать ключевое слово implements. Любой класс в Java может наследоваться на основании только одного родительского класса (или интерфейса), такое наследование является прямым. Множественное наследование реализуется с использованием технологии интерфейсов.

33 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

34 Организация доступа к объектам

Организация доступа к объектам

34 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

35 Обращение к элементам

Обращение к элементам

Программный код Java состоит из объектов и взаимосвязей между ними. Доступ к переменным и методам объекта организовывается с использованием разделителя . (точка), который отделяет имя объекта и имя его переменной (или метода): имя_объекта.имя_переменной или для метода: имя_объекта.имя_метода(аргументы)

35 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

36 Создание объектов

Создание объектов

Для создания объекта класса в синтаксисе Java используется оператор new, к основным задачам которого относят: выделение памяти создаваемому объекту; вызов конструктора класса для создаваемого объекта/экземпляра; установка начальных значений объекту, другими словами, инициализация объекта.

36 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

37 Информация о типе

Информация о типе

Часто возникает необходимость в определении класса, относительно которого создан объект. Java обладает оператором instanceof, который возвращает логическое значение, подтверждающее принадлежность объекта определенному классу: переменная = объект instanceof имя_класса; Все классы в Java порождены от класса Object, который имеет метод getClass(), возвращающий ссылку на класс, которая, в свою очередь, содержит метод getName(), определяющий имя этого класса.

37 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

38 Обработка исключений

Обработка исключений

38 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

39 Обработка ошибок

Обработка ошибок

Обычно в алгоритмических языках, таких как, например С, каждая выполняемая функция возвращала числовое значение, определяющее успешность ее выполнения. Для обеспечения корректности работы программы, приходилось контролировать эти возвращаемые значения. Однако программисту чаще всего было трудно в процессе написания кода предусмотреть все такие ошибочные ситуации. Эта задача традиционно оставлялась на время завершающего этапа разработки, что, конечно, делало ее решение еще более сложным.

39 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

40 Исключения

Исключения

Исключение представляет собой событие, происходящее в процессе выполнения Java-программы в результате нарушения нормального хода выполнения. Процесс обработки исключения называется перехватом исключения. Процесс обработки ошибок в Java сводится к перехвату возбужденных исключений. Исключение может быть проигнорировано, что приведет к передаче его по стеку вызовов для дальнейшей его обработки. Передвижение может продолжаться вплоть до дна стека вызовов, где происходит его обработка виртуальной машиной.

40 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

41 Исключения

Исключения

Все исключения в Java наследуются от класса Throwable, который, в свою очередь, наследуется от Object. Класс Throwable содержит определяемую пользователем строку сообщения и ряд переменных, которые используются для трассировки времени выполнения в стеке вызовов. Исключения разбиваются на группы, например арифметические, файловые и т.д., эти группы формируют подклассы класса Exception. Для каждого Java-пакета существуют свои исключения, особенности работы с которыми следует изучать в документации, прилагаемой к данному пакету.

41 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

42 Обрабатываемые и фатальные

Обрабатываемые и фатальные

Обрабатываемые исключения определяются по принадлежности к группе подклассов Exception. Фатальные классы исключений наследуются от классов Error или Runtime и обычно возбуждаются не пользовательской программой, а ядром виртуальной машины Java.

42 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

43 Пользовательские исключения

Пользовательские исключения

Помимо системных исключений, например, деления на нуль, ошибки чтения файла и т.д., могут создаваться пользовательские исключения. Например, в процессе работы программы необходимо контролировать некоторые параметры. Выходом из такой ситуации может быть создание собственного исключения, которое является классом, наследуемым от Exception. После чего, используя стандартные действия для перехвата исключений, можно осуществлять обработку ошибочных ситуаций.

43 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

44 Описание исключений

Описание исключений

В следующем примере создается новое исключение MyExeeption, которое наследуется от класса Exception. В его конструкторес помощью команды super(); осуществляется обращение к конструктору родительского класса Exception: class MyException extends Exception { MyException() { super(); ) }

44 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

45 Использование исключений

Использование исключений

После определения класса для дальнейшего его использования в программе необходимо создать его экземпляр, например: MyException err = new MyException(); Это позволит использовать методы и переменные класса Exception. Так, с помощью метода getMessage() можно получить текст сообщения, которое возвращается при возникновении ошибки. Метод toString() возвращает краткое описание исключения. С помощью метода printStaсkTrace() можно осуществить распечатку трассировки стека вызовов.

45 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

46 Возбуждение исключений

Возбуждение исключений

Для возбуждения исключения в Java используется оператор throw. При этом вместе с ним указываются параметры создания нового экземпляра класса исключения. В следующем примере возбуждается исключение класса MyException: if (myVar==0) throw new MyException("Zero"); Синтаксис языка Java требует указания списка исключений в описании метода, которые могут "выбрасываться" внутри данного метода. Благодаря этому легко контролировать код.

46 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

47 Перехват исключений

Перехват исключений

Для перехвата исключений используется следующая конструкция: try { // операторы } catch (класс_исключеиия1 идентификатор1) { // обработка исключения класс_исключения1 } … finally { // операторы, которые выполняются всегда }

47 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

48 Использование пакетов

Использование пакетов

48 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

49 Использование пакетов

Использование пакетов

Пакеты представляют собой структуры, в которых хранятся скомпилированные байт-коды классов. Физически пакет представляет собой каталог на диске, в котором записаны скомпилированные коды классов и интерфейсы. В последующем обсуждении под классом в пакете будет подразумеваться класс или интерфейс. Все стандартные объекты Java находятся в пакетах. Пакет java.lang, в котором сгруппированы все основные элементы языка Java подключается автоматически.

49 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

50 Импортирование

Импортирование

Для использования классов пакета в программе необходимо выполнить операцию подключения данного пакета. Такая процедура носит название импортирование пакета и имеет следующий синтаксис: import имя_пакета.[*][имя_класоа]; В одном случае подключаются все классы пакета, однако это не говорит о том, что все они будут участвовать в компиляции программы. В другом случае подключается конкретный класс из пакета.

50 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

51 Именование пакетов

Именование пакетов

В названии пакета принято указывать некий уникальный префикс, чаще всего адрес Internet-домена компании разработчика пакета, написанный справа налево. При этом каждое имя, разделенное точкой, называется уровнем пакета. Помимо этого имена пакетов обычно принято называть с буквы в нижнем регистре, что обеспечивает удобство чтения, т.к. обычно имена классов начинаются с буквы в верхнем регистре.

51 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

52 Конфликты имен

Конфликты имен

В Java-программе могут возникать конфликты именования классов: import mypackage.*; import ru.unn.newpackage.*; MyClass myVar = new MyClass(); В примере используется неявная ссылка на класс. Если класс с именем MyClass может присутствовать в одном и другом пакетах, необходимо использовать явную ссылку на класс: import mypackage.*; import ru.unn.newpackage.*; mypackage.MyNewClass myVar = new mypackage.MyNewClass();

52 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

53 Прямое обращение

Прямое обращение

Можно не подключать весь пакет, а только обратиться к необходимому классу данного пакета: mypackage.MyNewClass myVar = new mypackage.MyNewClass(); В этом примере пакет mypackage не импортируется. Вместо этого конкретно с именем класса MyNewClass указывается и имя пакета. Если в процессе компиляции Java не сможет обратиться к данному классу, то будет выдано сообщение об ошибке.

53 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

54 Создание пакетов

Создание пакетов

Только public-классы пакета могут использоваться за пределами данного пакета. Если в public-классе пакета необходимо сделать его переменные и методы доступными за пределами данного пакета, они также должны маркироваться спецификатором public.

54 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

55 Создание пакетов

Создание пакетов

В начале программы, классы которой необходимо включить в пакет, следует ввести ключевое слово package с указанием имени пакета: package имя_пакета; Если пакета с таким именем не существует, то в процессе компиляции он будет создан, иначе скомпилированные байт-коды классов будут добавлены в имеющийся пакет.

55 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

56 Технология многопоточного программирования

Технология многопоточного программирования

56 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

57 Многопоточное программирование

Многопоточное программирование

Современные операционные системы предоставляют своим пользователям возможность выполнения нескольких приложений одновременно. Для реализации многозадачности существуют два основных подхода. Первый из них состоит в управлении одновременным выполнением различных процессов. В рамках одного процесса многозадачность может быть реализована с использованием технологии потоков.

57 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

58 Потоки в Java

Потоки в Java

В любой Java-программе существует, по крайней мере, один поток - поток выполнения данной программы, который носит название главного потока. Все потоки в Java могут существовать в различных состояниях: готовности к выполнению; приостановленный; продолжение работы; состояние остановки. Для потоков, программируемых в Java, можно установить их приоритеты выполнения.

58 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

59 Программирование потоков

Программирование потоков

Любая многопоточная программа в Java строится на базе методов класса Thread и связанном с ним интерфейсом Runnable. Главным требованием является переопределение метода run(), в теле которого и размещается код потока.

59 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

60 Программирование потоков

Программирование потоков

Для создания нового потока следует объявить в программе экземпляр данного класса, используя один из его конструкторов: Thread(); Thread(Runnable target); Thread(Runnable target, String name); Thread(String name); Здесь target - объект, реализующий интерфейс Runnable, name - имя создаваемого потока. После создания объекта Thread можно воспользоваться одним из методов его класса для управления данным потоком. Так, для запуска на выполнение потока используется метод start().

60 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

61 Реализация интерфейса Runnable

Реализация интерфейса Runnable

При объявлении поточного класса на основе интерфейса Runnable необходимо реализовать метод run() этого интерфейса. Метод run () является точкой входа в поток и определяет в себе все операции, выполняемые в нем. После реализации метода run() в конструкторе класса-потока создается новый поток на основе ссылки на данный класс. После этого с использованием метода start() класса Thread данный поток запускается.

61 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

62 Реализация интерфейса Runnable

Реализация интерфейса Runnable

Структурная схема, описывающая представленный подход, имеет следующий вид: public class ThreadDemo implements Runnable{ public void run() { … } public ThreadDemo() { Thread myThr=new Thread(this,"thrname"); myThr.start(); } public static void main (String[] args) { new ThreadDemo(); } }

62 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

63 Наследование класса Thread

Наследование класса Thread

Класс потока ThreadDemo наследуется от класса Thread, после чего необходимо будет перегрузить метод run(). В конструкторе поточного класса ThreadDemo вначале производится обращение к конструктору суперкласса, т.е. к конструктору Thread, с передачей ему в качестве параметра имени нового потока. После этого, используя метод start(), данный поток начинает свое выполнение. В main-методе класса MyClass выполняется запуск данного потока ThreadDemo благодаря объявлению его экземпляра.

63 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

64 Наследование класса Thread

Наследование класса Thread

Структурная схема, описывающая представленный подход, имеет следующий вид: public class ThreadDemo extends Thread { public void run() { … } public ThreadDemo () { super("Имя потока"); start(); } } … ThreadDemo myThr=new ThreadDemo();

64 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

65 Контроль исполнения

Контроль исполнения

После запуска потока на выполнение управление передается обратно в то место программы, из которого осуществлялся запуск данного потока. Метод isAlive() возвращает логическое значение, характеризующее активность данного потока. Метод join() класса Thread позволяет дождаться завершения работы потока, т.е. приостанавливает работу потока программы, из которого был вызван данный поток. Использование метода join() может сгенерировать исключение InterruptedException.

65 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

66 Управление потоком

Управление потоком

66 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

67 Методы объекта

Методы объекта

start - в новом контексте будет вызван метод run вновь созданного подпроцесса. Метод start с данным объектом можно вызвать только один раз. run - это тело выполняющегося подпроцесса. Это - единственный метод интерфейса Runnable. Он вызывается из метода start после того, как исполняющая среда выполнит необходимые операции по инициализации нового подпроцесса. Если происходит возврат из метода run, текущий подпроцесс останавливается. currentThread возвращает объект Thread, выполняющийся в данный момент.

67 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

68 Методы объекта

Методы объекта

stop приводит к немедленной остановке подпроцесса. Это - способ мгновенно прекратить выполнение текущего подпроцесса, особенно если метод выполняется в текущем подпроцессе. Более аккуратный способ остановить выполнение подпроцесса - установить значение какой-либо переменной-флага, предусмотрев в методе run код, который, проверив состояние флага, завершил бы выполнение подпроцесса.

68 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

69 Методы класса

Методы класса

yield - исполняющая система переключает контекст с текущего на следующий доступный подпроцесс. Это один из способов гарантировать, что низкоприоритетные подпроцессы когда-нибудь получат управление. sleep(int n) - исполняющая система блокирует текущий подпроцесс на n миллисекунд. В большинстве исполняющих систем Java системные часы не позволяют точно выдерживать паузы короче, чем 10 миллисекунд. Может генерировать исключение InterruptedException.

69 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

70 Методы объекта

Методы объекта

suspend отличается от метода stop тем, что метод приостанавливает выполнение подпроцесса, не разрушая при этом его системный контекст. Если выполнение подпроцесса приостановлено, вы можете снова активизировать его. resume используется для активизации подпроцесса, приостановленного вызовом suspend. При этом не гарантируется, что после вызова resume подпроцесс немедленно начнет выполняться, поскольку в этот момент может выполняться другой более высокоприоритетный процесс.

70 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

71 Методы объекта

Методы объекта

setName(String name) - присваивает подпроцессу указанное в параметре имя. Это помогает при отладке программ с параллельными подпроцессами. Присвоенное с помощью setName имя будет появляться во всех трассировках стека, которые выводятся при получении интерпретатором неперехваченного исключения. getName возвращает строку с именем подпроцесса, установленным с помощью вызова setName.

71 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

72 Приоритеты выполнения потоков

Приоритеты выполнения потоков

72 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

73 Приоритеты потоков

Приоритеты потоков

Технология многопоточного программирования позволяет определять для потоков приоритеты их выполнения. Значение приоритета потока устанавливается в виде целочисленных значений в диапазоне от 1 до 10. Чем больше значение приоритета у потока, тем больше его значимость для операционной системы. Работа потоков с различными приоритетами полностью зависит от используемой операционной системы и ресурсов компьютера.

73 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

74 Установка приоритетов

Установка приоритетов

В классе Thread определены три константы MIN_PRIORITY, NORM_PRIORITY и MAX_PRIORITY, представляющие собой значения минимального, нормального и максимального приоритетов соответственно. Для того чтобы установить определенному потоку необходимый приоритет, следует воспользоваться методом setPriority() класса Thread, которому в качестве параметра передается соответствующее значение приоритета. Чтобы определить текущий приоритет потока, используется метод getPriority() данного класса.

74 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

75 Синхронизация потоков

Синхронизация потоков

75 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

76 Синхронизация потоков

Синхронизация потоков

Существует возможность корректного управления потоками при обращении к одному ресурсу, что обеспечивается технологией синхронизации. Синхронизация гарантирует, что данный разделяемый ресурс будет использоваться одновременно только одним потоком. В основе технологии синхронизации потоков находится объект, называемый семафором, который используется для взаимоисключающей блокировки доступа к объекту. Когда один из потоков входит в семафор, то все остальные ожидают освобождения этого семафора.

76 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

77 Синхронизация методов

Синхронизация методов

Первый способ синхронизации заключается в использовании ключевого модификатора synchronized при объявлении объектов, например: public synchronized void ok() { } В этом случае использование модификатора synchronized обеспечивает наличие у каждого объекта своего собственного семафора. Если какой-либо поток обращается к синхронизированному методу определенного экземпляра, то никакой другой поток не сможет вызвать любой синхронизированный метод данного экземпляра.

77 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

78 Синхронизированные блоки

Синхронизированные блоки

В Java имеется возможность синхронизировать доступ к уже созданному ранее объекту с использованием оператора synchronized: public class MyClass { public void ok() {} } … MyClass myVar = new MyClass(); synchronized(myVar) { myVar.ok(); } Оператору synchronized в качестве параметра передается объект, требующий синхронизации, после чего в блоке данного оператора будет производиться синхронизированный вызов его методов.

78 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

79 Остановка и возобновление потоков

Остановка и возобновление потоков

Java предоставляет программисту возможность приостановки работы потока с последующим ее возобновлением. Для этого внутри синхронизированного метода или блока используются методы класса Object: wait () - вызвав wait(), текущий поток уступает монопольное право на объект и приостанавливается до тех пор, пока из какого-либо другого потока не будет сделан вызов notify() или notifyAll(). notify () - позволяет возобновить работу потока в состоянии приостановки; notifyAll() - возобновление работы всех потоков, которая была приостановлена на данном объекте.

79 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

80 Клинч (deadlock)

Клинч (deadlock)

Клинч - редкая, но очень трудноуловимая ошибка, при которой между двумя потоками существует кольцевая зависимость от пары синхронизированных объектов. Например, если один подпроцесс получает управление объектом X, а другой - объектом Y, после чего Х пытается вызвать любой синхронизированный метод Y, этот вызов, естественно блокируется. Если при этом и Y попытается вызвать синхронизированный метод X, то программа с такой структурой подпроцессов окажется заблокированной навсегда.

80 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В.

«Java 2 Micro Edition»
http://900igr.net/prezentacija/informatika/java-2-micro-edition-225594.html
cсылка на страницу

Языки программирования

23 презентации о языках программирования
Урок

Информатика

130 тем
Слайды