Главная страница

Java. Полное руководство. 8-е издание. С. Н. Тригуб Перевод с английского и редакция


Скачать 25.04 Mb.
НазваниеС. Н. Тригуб Перевод с английского и редакция
АнкорJava. Полное руководство. 8-е издание.pdf
Дата28.02.2017
Размер25.04 Mb.
Формат файлаpdf
Имя файлаJava. Полное руководство. 8-е издание.pdf
ТипДокументы
#3236
страница48 из 90
1   ...   44   45   46   47   48   49   50   51   ...   90
abstract void
setRawOffset(int миллисекунд)
abstract boolean Возвращает специфичную для класса
TimeZone версию метода
clone (Возвращает массив строк, представляющих имена всех часовых поясов
Возвращает массив строк, представляющих имена всех часовых поясов, отстоящих на смещение смещениеОтГринвича относительно GMT Возвращает объект класса
TimeZone, который представляет часовой пояс по умолчанию, принятый на данном компьютере
Возвращает имя вызывающего объекта класса
TimeZone Возвращает смещение, которое должно быть добавлено к GMT, чтобы вычислить локальное время. Это значение корректируется с учетом летнего времени. Параметры метода представляют компоненты даты и времени
Возвращает смещение (в миллисекундах, которое должно быть добавлено к GMT, чтобы вычислить локальное время. Значение не корректируется с учетом летнего времени
Возвращает объект класса
TimeZone почасовому поясу, имеющему название назвЧП
Возвращает значение
true, если дата, представленная в d, относится к летнему времени в вызывающем объекте. В противном случае возвращает значение
false Устанавливает часовой пояс по умолчанию для данного хоста.
ЧП—
ссылка на объект класса
TimeZone, который нужно использовать
Устанавливает имя часового пояса (те. его идентификатор) в соответствии с назвЧП
Устанавливает смещение относительно GMT в миллисе­
кундах
Возвращает значение
true, если вызывающий объект использует летнее время. В противном случае возвращает значение Класс Класс
Sim p le T im e Z one
— это удобный подкласс класса
T im eZ o ne. Он реализует абстрактные методы класса
T im eZ o n e и позволяет работать с часовыми поясами в Григорианском календаре. Этот класс также учитывает летнее время
Глава 18. Пакет java.util: прочие служебные классы
5 5 Класс
SimpleTimeZone определяет четыре конструктора. Первый представлен ниже

смещениеОтГринвича,
String
назвЧП Этот конструктор создает объект класса
SimpleTimeZone. Здесь
смеще­
ниеОтГринвича
— это смещение относительно Гринвича, а
назвЧП— название часового пояса. Рассмотрим второй конструктор

смещениеОтГринвича,
String
идентификаторЧП,
int
лвМесяцО,
int
лвДнейВМесяцеО,
int
лвДеньО,
int
времяО,
int
лвМесяц1,
int
лвДнейВМесяце!,
int
лвДень!,
int
время1)
Здесь смещение относительно GMT задается в
смещениеОтГринвича. Имя часового пояса передается в
идентификаторЧП. Начало действия летнего времени определяется параметрами
лвМесяцО,
лвДнейВМесяце0,
лвДеньО и
времяО. Окончание действия летнего времени задается параметрами
лвМесяц1,
лвДнейВМесяце
1,
лвДень! и
время1.
Рассмотрим третий конструктор класса
SimpleTimeZone.
SimpleTimeZone(int
смещениеОтГринвича,
String
идентификаторЧП,
int
лвМесяцО,
int
лвДнейВМесяцеО,
int
лвДеньО,
int
времяО,
int
лвМесяц!,
int
лвДнейВМесяце1
,
int
лвДень1,
int время
лвСмещение)
Здесь
лвСмещение
количество миллисекунд, сохраненных переходом налет нее время.
И наконец, четвертый конструктор класса
SimpleTimeZone.
SimpleTimeZone(int
смещениеОтГринвича,
String
идентификаторЧП,
int
лвМесяцО,
int
лвДнейВМесяцеО,
int
лвДеньО,
int
времяО,
int
времяОрежим,
int
лвМесяц1,
int
лвДнейВМесяце1 ,
int
лвДень1,
int время int
время1режим,
int
лвСмещение)
Здесь времяОрежимуказывает режим начального времени, а
время1режим
— режим конечного времени. Ниже перечислены допустимые значения этих режимов

ТANDARD_TIME
WALL_TIME
UTC_TIME
Режим времени определяет, как интерпретируются значения времени. Значение режима по умолчанию, используемое другими конструкторами, —
WALL_TIME. Класс Класс
Locale предназначен для создания объектов, каждый из которых описывает географический или культурный регион. Это один из нескольких классов, обеспечивающих возможность создания многонациональных программ. Например, форматы, применяемые для отображения дат, времени чисел, в разных регионах отличаются.
Интернационализация — это тема, выходящая за пределы контекста настоящей книги. Однако большинство программ нуждается только в том, чтобы иметь дело с ее основами, что включает установки только текущих региональных данных.
Класс
Locale определяет следующие константы, которые удобны для обращения с наиболее часто используемыми региональными данными CANADA
GERMAN
KOREAN
|CANADA_FRENCH
GERMANY
PRC
i
CHINA
ITALIAN
SIMPLIFIED_CHINESE

5 5 6 Часть II. Библиотека Например, выражение
Locale.
CANADA представляет объект класса
Locale для Канады.
Вот как выглядят конструкторы класса
Locale.
Locale(String язык язык String страна язык String страна String
вариант)
Эти конструкторы создают объект класса
Locale для представления специфического языка, а в случае последних двух конструкторов — также и страны. Эти значения должны содержать стандартные коды стран и языков. В параметре вариант
может быть предоставлена различная вспомогательная информация.
Класс
Locale определяет несколько методов. Один из наиболее важных — метод setDef ault
() — показан ниже void setDefault(Locale

объектРегиона)
Это устанавливает используемые по умолчанию региональные данные, применяемые JVM, в параметре объект Региона Вот еще несколько других интересных методов String getDisplayCountry()
final String getDisplayLanguage()
final String Они возвращают читабельные для человека строки, которые могут быть использованы для отображения наименования страны, наименования языка и полного описания региональных данных.
Региональные данные по умолчанию можно получить методом getDef aul t (), показанным ниже Locale Комплект JDK 7 внес существенные изменения в класс
Locale, который поддерживает стандарт Internet Engineering Task Force (IETF) BCP 47, определяющий дескрипторы для идентификации языков, и стандарт Unicode Technical Standard
(UTS) 35, определяющий язык разметки региональных данных (LDML). Поддержка стандартов ВСР 47 и UTS 35 требует добавления в класс
Locale некоторых средств, включая несколько новых методов и класс
Locale.
Builder. Кроме всех прочих, есть новый метод get
Script ()
, который получает сценарий региона, и метод toLanguageTag
(), который получает строку, содержащую языковой дескриптор региона. Класс
Locale .
Builder создает экземпляры класса
Locale. Это гарантирует, что спецификация региона будет корректно оформлена, как определено стандартом ВСР 47. (Конструкторы класса
Locale не обеспечивают такую проверку.)
Классы
Calendar и
GregorianCalendar
— это примеры классов, чувствительных к региональным данным. Классы
DateFormat и
SimpleDateFormat также зависят от региональных данных.
Класс Класс
Random представляет собой генератор псевдослучайных чисел. Они называются псевдослучайными, поскольку представляют собой просто сложные
Глава 18. Пакет java.util: прочие служебные классы
5 5 распределенные последовательности. Класс
Random определяет следующие конструкторы n d o m ()

Ra n d o m (1ong
начальноеЗначение
)
Первая версия создает генератор чисел, использующий уникальное начальное число. Вторая форма позволяет вам указать это число вручную.
Если вы инициируете объект класса
Random начальным числом, то этим определяете начальную точку случайной последовательности. Если вы используете одно и тоже начальное число для инициализации разных объектов класса
Random, то получите от каждого из них одинаковые случайные последовательности. Если вы хотите получить разные последовательности, инициируйте объекты разными числами. Один из способов сделать это — использовать текущее время в качестве инициирующего значения для объекта класса
Random. Такой подход уменьшит вероятность получения повторяющихся последовательностей.
О ткрытые методы класса
Random перечислены в табл. Таблица 18.6. Методы, определенные в классе

R a n d o М е Щ Г - П ’' : :
• ' Описание
1 - -
- - г Г
V
^
- г next
Boo
lean
() Возвращает следующее случайное значение типа
boolean
void nextBytes (byte Заполняет массив значения случайно созданными значе- значения) ниями
double next
Double
() Возвращает следующее случайное значение типа
double
float nextFloat
() Возвращает следующее случайное значение типа
float
double nextGaussian
() Возвращает следующее значение гауссова случайного числа next

Int
() Возвращает следующее случайное значение типа
int
int next
Int
(
int Возвращает следующее случайное значение типа
int в диапазоне от
0 доп) Возвращает следующее случайное значение типа
long
void setSeed(l
ong Устанавливает начальное значение (те. началь­
на
чальноеЗна ч е ни е
)
ную точку для генератора случайных чисел) равным на чальноеЗна чение
Как видите, есть семь типов случайных чисел, которые вы можете извлечь из объекта класса
Random. Булевы случайные значения доступны при помощи метода nextBoolean(
). Случайные байты можно получить с помощью метода nextBytes
(). Целые случайные числа можно получать методом next
Int
(). Случайные целочисленные длинные, равномерно распределенные по диапазону допустимых значений, выдает метод next
Long
(). Методы nextFloat
() и next-
Double() возвращают случайные значения типа float и double, равномерно распределенные между 0,0 и 1,0. И наконец, метод nextGaussian
() возвращает значение типа double, центрированное по 0,0 со стандартным отклонением в 1,0. Это то, что известно под названием кривая нормального распределения.

Ниже приведен пример, демонстрирующий последовательность, создаваемую методом nextGaussian ()
. Он получает 100 случайных гауссовых значений и усредняет их. Программа также подсчитывает количество значений, попадающих в два стандартных отклонения — плюс или минус, используя инкремент 0,5 для каждой категории. Результат отображается графически на экране Демонстрирует случайные гауссовы значения
import java.util.Random;
class RandDemo {

5 5 Часть II. Библиотека Java
public static void main(String a r g s []) {
Random r = new Ra n d o m ();
double val;
double sum = 0;
int bell[] = new i n t [10];
for(int i=0; i<100; i++) {
val = r.nextGaussian();
sum +
= val;
double t = -2;
for(int x=0; x<10; x++, t +
= 0.5)
if(val < t) Среднее всех значений " + (sum/100));
// отобразить кривую распределения
for(int i=0; i<10; i++) {
for(int x=bell[i]; x>0; Ниже можно видеть пример запуска этой программы. Как видите, получается колоколоподобное распределение чисел.
Среднее всех значений 0.0702235271133344

*
*******
******
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * *
**********
* * * * * * * *
* * Класс Класс
Observable служит для создания подклассов, за которыми могут наблюдать остальные части вашей программы. Когда с объектом такого подкласса происходят изменения, наблюдающие классы извещаются об этом. Наблюдающие классы должны реализовать интерфейс
Observer, в котором определен метод update ()
. Этот метод вызывается, когда наблюдатель получает извещение об изменении наблюдаемого объекта.
Класс
Observable определяет методы, показанные в табл. 18.7. Объект, который подлежит наблюдению, должен следовать двум простым правилам. Во-первых, если он изменяется, то должен вызывать метод setChanged
(). Во-вторых, когда он готов известить наблюдателей об изменении, то должен вызвать метод notifyOb- servers ()
. Это заставляет наблюдающий объект (или объекты) вызывать метод up­
date
(). Будьте осторожны если объект обращается к методу notifyObservers
(), не вызвав предварительно метод setChanged
(), то никакого действия не последует
Глава 18. Пакет java.util: прочие служебные классы 5 Наблюдаемый объект должен вызывать и метод s e tC h a n g e d (), и метод n o t ifyOb- s e r v e r s (), прежде чем будет вызван метод u p d a te (Таблица 18.7. Методы, определенные в классе
O b s e r v a b l e
Метод
Описание
void Добавляет объект к списку объектов, наблюдающих за
объект)
вызывающим объектом Вызов этого метода помечает вызывающий объект как l e a r C h a n g e d (не изменявшийся c o u n t O b s e r v e r s (Возвращает количество объектов, наблюдающих за текущим объектом
void
Удаляет объект из списка объектов, наблюдающих за
объект)
вызывающим объектом d e l e t e O b s e r v e r s (Удаляет все наблюдатели вызывающего объекта h a s C h a n g e d Возвращает значение
true, если вызывающий объект модифицировался, и значение
false
— в противном случае n o t i f y O b s e r v e r s (Извещает наблюдателей о том, что вызывающий объект был изменен методом
update ()
. Вторым параметром метода
update () передается значение Извещает наблюдателей о том, что вызывающий объект
notifyObservers(Object
изменялся вызовом метода
update (
). Вторым параме­
объект)
тром метода
update (
) передается объект void

s e t C h a n g e d (Вызывается при изменении вызывающего объекта
Отметим, что метод n o t i f y O b s e r v e r s () имеет две формы с аргументом и без. Если вызвать метод n o t i f y O b s e r v e r s () с аргументом, этот объект передается методу u p d a te () наблюдателя в качестве второго параметра. В противном случае методу u p d a te () передается значение n u l l . Вы можете использовать второй параметр для передачи объекта любого типа, подходящего вашему приложению.
Интерфейс
O b s e r v e Чтобы организовать наблюдение за объектом, следует реализовать интерфейс
Observer. Этот интерфейс определяет только один метод update(Observable наблюдаемыйОбъект,
Object арг)
Здесь
наблюдаемыйОбъект
это объект, подлежащий наблюдению, а
арг — значение, переданное методу notifyObservers
(). Метод update
() вызывается при изменении наблюдаемого объекта.
Пример использования интерфейса
o b s e r v e Ниже приведен пример, демонстрирующий работу с наблюдаемым объектом. Здесь создается класс наблюдателя по имени
Watcher, который реализует интерфейс
Observer. Класс, подлежащий мониторингу, называется
BeingWatched. Он расширяет класс
Observable. Внутри класса
BeingWatched имеется метод coun­
ter ()
, который просто выполняет обратный отсчет от указанного значения. Он использует метод sleep
() для ожидания 10 секунд между отсчетами. Каждый раз

5 6 0 Часть II. Библиотека когда счетчик изменяется, вызывается метод notifyObservers ()
, которому передается в качестве аргумента текущее значение счетчика. Это заставляет вызывать метод update
() внутри класса
Watcher, который отображает текущее значение счетчика. Внутри метода main
() создаются наблюдающий и наблюдаемый объекты классов
Watcher и
BeingWatched под именами, соответственно, observing и ob­
served. Затем объект observing добавляется к списку наблюдателей для объекта observed. Это означает, что метод observing.update
() будет вызываться каждый раз, когда метод counter
() вызывает метод noti fyObservers
( )
/* Демонстрация применения класса Observable и интерфейса Observer.

*/
import java.util.*;
// Класс-наблюдатель.
class Watcher implements Observer {
public void update(Observable obj, Object arg) {
System.out.println("update() вызван, count равен " +
((Integer)arg).intValue());
}
}
// Это — наблюдаемый класс
class BeingWatched extends Observable {
void counter(int period) {
for( ;
period >=0; period--) {
setChanged();
notifyObservers(new Integer(period));
try {
Thread.sleep(100);
} c a t c h (InterruptedException e) Ожидание прервано ObserverDemo {
public static void main(String a r g s []) {
BeingWatched observed = new BeingWatched();
Watcher observing = new Watcher();
/* Добавить наблюдателя в список наблюдателей наблюдаемого объекта Вывод этой программы показан ниже d a t e () вызван, count равен d a t e () вызван равен 9
u p d a t e () вызван равен d a t e () вызван равен d a t e () вызван равен d a t e () вызван равен d a t e () вызван равен 4
up d a t e () вызван равен 3
u p d a t e () вызван равен 2
up d a t e () вызван равен d a t e () вызван равен 0
Глава 18. Пакет java.util: прочие служебные классы 6 Наблюдателями могут быть несколько объектов. Например, в следующей программе реализуются два класса наблюдателя, и объекты каждого класса добавляются к списку наблюдателей класса
BeingWatched. Второй наблюдатель ожидает, пока счетчик достигнет нулевого значения, после чего подает звуковой сигнал Объект может наблюдаться одним или более наблюдателями java.util.*;

1   ...   44   45   46   47   48   49   50   51   ...   90


написать администратору сайта