Владимир Цишевский - Java как центр архипелага
- Название:Java как центр архипелага
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:1996
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Владимир Цишевский - Java как центр архипелага краткое содержание
Java как центр архипелага - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
import java.util.HashTable;
import java.util.*;
Первая инструкция import позволяет обращаться к классам пакета
util следующим образом:
util.Vector
util.HashTable
. . .
Вторая инструкция импортирует лишь класс HashTable, позволяя в
дальнейшем обращаться к этому классу по короткому имени, без
префикса util.
Третья инструкция import позволяет обращаться по коротким име-
нам ко всем классам пакета util.
4.1.4. Управляющие конструкции
Управляющие конструкции языка Java вполне традиционны, за иск-
лючением средств выхода из вложенных блоков (в частности, из
вложенных циклов). Пример.
test:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (i > 3) {
break test;
}
}
}
Для передачи управления можно применять как конструкцию break,
так и continue (переход к следующей итерации цикла).
Инструкция goto в языке Java отсутствует.
4.1.5. Исключительные ситуации
Для обработки исключительных ситуаций, возникающих во время вы-
полнения программы, в языке Java используется конструкция try/
catch/finally. Блок try содержит инструкции, выполнение может
привести к возникновению исключительных ситуаций. Следующие за
ним один или несколько блоков catch предназначены для обработки
исключительных ситуаций. Наконец, блок finally содержит инст-
рукции, которые будут выполнены независимо от возникновения
исключительной ситуации в блоке try. При выходе из try-части
посредством инструкций передачи управления (break, return и
т.п.) блок finally также будет выполнен.
Для передачи информации об исключительной ситуации используются
об®екты классов - наследников класса Throwable. Например, класс
ArrayIndexOutOfBoundsException отвечает за контроль выхода ин-
дексов за границы массивов, класс OutOfMemoryException - за ре-
акцию на исчерпание свободной памяти, класс ClassCastException
- за ошибки при преобразовании типов, класс
InterruptedException - за обработку прерывания текущего потока
и т.д. Компонентой всех этих классов является поле типа String,
в которое помещается текст сообщения об ошибке. Метод
getMessage возвращает этот текст.
В подобных об®ектах может содержаться и дополнительная информа-
ция. Например, об®екты класса InterruptedIOException содержат
поле, в которое заносится число байт, переданных до возникнове-
ния исключительной ситуации.
Следующий фрагмент программы распечатывает сообщения из массива
messages. При этом мы не пытаемся выяснить размер этого масси-
ва, а просто полагаемся на механизм обработки исключительных
ситуаций. (Конечно, мы не советуем писать программы в таком
стиле).
try {
for (int i = 0; i < 100; i++) {
System.out.println (messages[i]);
}
}
catch (ArrayOutOfBoundException e) {
System.out.println ("No more messages");
}
catch (Exception e) {
System.out.println ("Unexpected exception");
System.out.println (e.getMessage());
}
finally {
System.out.println ("Work done");
}
Искобчительные ситуации могут возбуждаться программно при помо-
щи инструкций вида
throw new MyException ("Something's wrong");
Спецификации языка Java подразделяют исключительные ситуации на
две категории. К первой категории (класс Error) относятся ситу-
ации, на которые программа не обязана реагировать (это заведомо
сделает Java-машина). Ко второй категории (класс Exception) от-
носятся ситуации, которые программа должна обрабатывать обяза-
тельно. Если при выполнении метода может возникать исключитель-
ная ситуация второго типа, он должен либо обрабатывать ее сам с
помощью конструкции try/catch/finally, либо в его определении
должна фигурировать конструкция
throws Exception1, Exception2, ...
Пример.
class Foo extends Object {
. . .
public void readFromFile (String fn) throws InvalidFormatException {
FileInputStream fis;
try {
fis = new FileInputStream (fn);
// Читаем данные из файла.
. . .
// Если файл имеет неправильный формат,
// вожбуждаем исключительную ситуацию:
throw new InvalidFormatException ("Wrong format");
. . .
}
catch (FileNotFoundException e) {
// Предпринимаем соответствующие действия
}
finaly {
if (fis != null )
fis.close(); // всегда закрываем файл, если он был открыт
}
}
. . .
}
В этом примере в методе readFromFile могут возникнуть две искл-
чительные ситуации. Первая связана с тем, что нужный файл не-
доступен. Эта ситуация обработывается внутри метода
readFromFile. Вторая исключительная ситуация может вознкнуть,
если файл имеет неправильный формат. Эта ситуация передается
для обработки наверх.
4.1.6. Механизм потоков
Механизм потоков - обязательная черта современных операционных
сред. За счет потоков обеспечивается масштабируемость программ-
ных систем, оптимальное использование аппаратных ресурсов, вы-
сокая скорость отклика на запросы пользователей. Поэтому нет
ничего удивительного в том, что в языке Java механизм потоков
представлен с самого начала и в полном об®еме.
В языке Java потоки представлены посредством класса Thread, ин-
терфейса ъunnable, спецификатора метода synchronized и методов
класса Object wait и notify.
4.1.6.1. Класс Thread и интерфейс ъunnable
Поток (thread) представляет собой отдельный поток управления в
пределах процесса. Таким образом, у каждого потока есть начало,
последовательность действий, текущее состояние и конец.
Поток запускается с помощью вызова метода start() класса
Thread. Последовательность действий, выполняемых в рамках пото-
ка, задается в методе run(). Подчеркнем, что метод run() ис-
пользуется только для задания помледовательности действий; явно
вызывать его не только не нужно, но и просто вредно.
Поток заканчивается либо при завершении выполнения метода
run(), либо с помощью явных вызовов методов класса Thread
stop() или destroy(). Возобновить работу завершенного потока
невозможно.
Для временной приостановки работы потока с последующим возоб-
новлением служат методы suspend(), sleep() и yeild().
Обычно поток, приостановленный с помощью метода suspend, возоб-
новляет работу посредством метода resume().
Вызов метода sleep() приводит к приостановке потока на заданное
число миллисекунд.
Вызов метода yeild() означает добровольную уступку процессора
другому потоку; первоначальный поток остается готовым к выпол-
нению.
Java-потоки обладают приоритетами. В спецификациях оговаривает-
ся, что Java-машина реализует вытесняющую многопотоковость. Это
означает, что поток с большим приоритетом может прервать выпол-
нение менее приоритетного потока. Однако, спецификации не тре-
буют наличия разделения времени. Это значит, что для передачи
управления потоку с тем же приоритетом, вообще говоря, требуют-
ся явные действия со стороны первоначального потока - вызов ме-
тодов suspend(), sleep() или yeild().
На рис. 10 представлена диаграмма состояний потоков.
Рис. 10. Диаграмма состояний потоков.
Следующий пример содержит фрагмент одного из многочисленных ва-
Читать дальшеИнтервал:
Закладка: