Delphi | Сети | ПК | Маршрутизаторы | Моделирование | Протоколы | Экспертные системы | Удаленный доступ | Доменные имена
Аплеты | SQL | Надежность | Задачи | Информационные процессы | JAVA | Отказы изделия | Расчет надежности показателей | Инфсис

Объектно-ориентированное программирование в Java

В случае использования двумерного массива также возможно получение той или иной размерности с помощью свойства length. Как и в языке С, имя двумерного массива matrix рассматривается здесь как массив массивов. Поэтому свойство length будет содержать число строк двумерного массива. Количество же элементов в i-ой строке двумерного массива (кстати, количество элементов в разных строках двумерного массива может быть различным) можно будет получить с помощью свойства length массива matrix[i].

Окончательные члены и классы

Пометив метод модификатором final , можно запретить его переопределение в подклассах. Это удобно в целях безопасности. Вы можете быть уверены, что метод выполняет те действия, которые вы задали. Именно так определены математические функции sin(), cos() и прочие в классе Math . Мы уверены, что метод Math.cos (x) вычисляет именно косинус числа х . Разумеется, такой метод не может быть абстрактным.

Для полной безопасности, поля, обрабатываемые окончательными методами, следует сделать закрытыми (private).

Если же пометить модификатором final весь класс, то его вообще нельзя будет расширить. Так определен, например, класс Math :

public final class Math{ . . . }

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

public final int MIN_VALUE = -1, MAX_VALUE = 9999;

По соглашению "Code Conventions" константы записываются прописными буквами, слова в них разделяются знаком подчеркивания.

На самой вершине иерархии классов Java стоит класс Object .

В случае применения первого уровня синхронизации обновление совместно используемых переменных производится только в методах (внешних относительно класса-потока), отмеченных специальным модификатором synchronized. Такие методы называются синхронизированными. Поток, который вызывает синхронизированный метод, получает исключительный доступ к объекту, которому этот метод принадлежит, тем самым накладывая блокировку на объект. Пока объект не будет разблокирован, ни один другой поток не может получить доступ ни к одному синхронизированному методу данного объекта. Снятие блокировки с объекта происходит в момент, когда закончит работу синхронизированный метод, вызвавший блокировку. Пока объект является заблокированным одним потоком, другие потоки помещаются в очередь и ожидают, когда они смогут продолжить работу. Модификатором synchronized можно отмечать не только методы, но и отдельные блоки (составные операторы). При этом в круглых скобках следует указать ссылку на объект, который нужно заблокировать, например: synchronized (this).
Второй уровень обеспечения синхронизации подразумевает использование механизма передачи сообщений потоку о том, что уже выполнено условие, исполнение которого он ожидает. Это достигается за счет использования трех методов: wait, notify и notifyAll.
Если поток обнаружит, что не может продолжать работу, поскольку совместно используемая переменная не имеет надлежащего значения, он должен вызвать метод wait из синхронизированного метода или блока. После этого поток снимает блокировку объекта, которому принадлежит синхронизированный метод, и помещается в очередь данного объекта.
Поток, изменивший значение совместно используемой переменной, должен проинформировать об этом другие потоки, которые были помещены в очередь соответствующего объекта посредством вызова метода wait. Это делается с помощью методов notify и notifyAll. Первый из них "пробуждает" один из потоков, ожидающих возможности доступа к совместно используемой переменной. Какой именно поток из очереди будет "пробужден", зависит от политики потоков, реализованной в виртуальной Java-машине. Обычно используется одна из двух стратегий: политика учета приоритетов потоков и политика циклического планирования. Согласно первой политике каждому потоку назначается свой приоритет, и первыми продолжат свою работу потоки с наибольшим приоритетом. Вторая политика предполагает, что потоки пробуждаются в том порядке, в котором попали в очередь. "Пробудившийся" поток снова встает в очередь в случае невыполнения условия продолжения работы.

Математический анализ, лекции по физике Компьютерные сети