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

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


Скачать 25.04 Mb.
НазваниеС. Н. Тригуб Перевод с английского и редакция
АнкорJava. Полное руководство. 8-е издание.pdf
Дата28.02.2017
Размер25.04 Mb.
Формат файлаpdf
Имя файлаJava. Полное руководство. 8-е издание.pdf
ТипДокументы
#3236
страница36 из 90
1   ...   32   33   34   35   36   37   38   39   ...   90

Часть II. Библиотека Метод c l o n e () throws
CloneNotSupportedException
boolean equals(Object объект
voi d f i n a l i z e () throws Throwable
final Class g e t C l a s s ()
int h a s h C o d e ()
final void n o t i f y ()
final void n o t i f y A l l ()
String t o S t r i n g ()
final vo i d w a i t () throws
I nterruptedException
final void wait(long миллисекунды
throws InterruptedException
final void wait(long миллисекунды
int наносекунды
I Создает новый объект, который повторяет вызывающий объект
Возвращает значение
true, если вызывающий объект эквивалентен
объект
Метод
finalize
() по умолчанию. Вызывается перед удалением неиспользуемого объекта
Получает объект класса C la s s , который описывает вызывающий объект
Возвращает хеш-код, ассоциированный с вызывающим объектом
Прерывает выполнение потока, ожидающего вызывающего объекта
Прерывает выполнение всех потоков, ожидающих вызывающего объекта
Возвращает строку, описывающую объект
Ожидает завершения выполнения другого потока
Ожидает до указанного количества миллисекунд завершения выполнения другого потока
Ожидает до указанного количества миллисекунд плюс наносекунд до завершения выполнения другого потока
Использование метода
clone
( ) и интерфейса
Cloneable
Большинство определенных в классе
Object методов описывается в других местах настоящей книги. Однако один из них требует особого внимания — метод clone
() Этот метод создает дубликат объекта, который его вызвал. Клонироваться могут только те классы, которые реализуют интерфейс Интерфейс не объявляет членов. Он служит для указания того факта, что класс допускает побитовое копирование объектов (те. клонирование Если вы попытаетесь вызвать метод clone (
) для класса, который не реализует интерфейс
Cloneable, будет передано исключение
CloneNot
Support edExcept ion. Когда создается клон, конструктор клонируемого объекта не вызывается Клон — это просто точная копия оригинала.
Клонирование — потенциально опасное действие, поскольку оно может вызвать нежелательные побочные эффекты. Например, если объект, подвергаемый клонированию, содержит ссылочную переменную по имени obj Ref, в клоне она будет ссылаться на тот же объект, что и переменная obj Ref в оригинале. Если клон выполнит изменения в содержимом объекта, на который ссылается переменная obj Ref
, то это также изменит исходный объект. Вот другой пример если объект открывает поток ввода-вывода, а затем клонируется, то два объекта будут
Глава 16. Пакет java.lang
4 4 иметь дело с одними тем же потоком. Более того, если один из этих объектов закроет поток, второй все еще может пытаться писать в него, что приведет к ошибке. В некоторых случаях вам понадобится переопределить метод c lo n e (), определенный в классе Obj e c t , чтобы справиться с проблемами подобного рода.
Поскольку клонирование может вызывать проблемы, метод c l o n e () объявляется внутри класса O b j e c t как p r o t e c t e d . Это значит, что он либо может быть вызван из метода, определенного в классе, реализующем интерфейс C lo n e a b le , либо должен быть явно переопределен в классе как p u b l i c . Давайте рассмотрим примеры каждого подхода. В следующей программе реализуется интерфейс C lo n e a b le и определяется метод c l o n e T e s t ( ), который вызывает метод c lo n e () в классе Obj e c t .
// Демонстрация применения метода c l o n e ()
class TestClone implements Cloneable {
int a ;
double b;
// Этот метод вызывает cl o n e () из Object.
TestClone cloneTest() {
try {
// вызвать cl o n e () из Object,
return (TestClone) super.c l o n e ();
} catch(CloneNotSupportedException e) Клонирование невозможно ") ;
return this;
}
}
}
class CloneDemo {
public static void main(String a r g s []) {
TestClone xl = new TestClone();
TestClone x 2 ;
xl.a = 10;
xl.b = 20.98;
x2 = x l .cloneTest(); // клонировать xl
System.out.println("xl:
" + x l .a + " " + xl.b);
System.out.println("x2:
" + x2 .
a + " " + Здесь метод c l o n e T e s t () вызывает метод c l o n e () класса O b je c t и возвращает результат. Обратите внимание на то, что объект, возвращенный методом c lo n e ( ), должен быть приведен к соответствующему типу (T e s tC lo n e В следующем примере метод c lo n e () перегружается таким образом, что он может быть вызван извне класса. Чтобы сделать это, спецификатором доступа должен быть pu b l i e , как показано ниже Переопределение метода c l o n e ().
class TestClone implements Cloneable {
int a ;
double b;
// cl o n e () переопределен как public. .
public Object c l o n e () {
try {
// вызов c l o n e () из Object,
return super.c l o n e ();
} catch(CloneNotSupportedException e) Клонирование невозможно this;
15 3ak 303 0

4 5 Часть II. Библиотека Java
}
}
}
class CloneDemo2 {
public static void main(String a r g s []) {
TestClone xl = new TestCloneO;
TestClone x 2 ;
xl.a = 10;
xl.b = 20.98;
// здесь c l o n e () вызывается непосредственно
x2 = (TestClone) x l . cloneO;
System.out.println("xl:
" + xl.a + " " + xl.b);
System.out.println("x2:
" + x 2 .a + " " + Побочные эффекты от клонирования иногда поначалу трудно обнаружить. Очень легко решить, что класс безопасен для клонирования, когда на самом деле это не так. Вообще говоря, вы не должны реализовать интерфейс C lo n e a b le для любого класса без серьезной на то причины.
Класс C la s Этот класс инкапсулирует состояние времени выполнения класса или интерфейса. Объекты класса
Class создаются автоматически при загрузке класса. Вы
не можете явно объявлять объект класса
Class. В общем случае вы получаете объект класса
Class, вызывая метод getClassO, определенный в классе
Object. Класс
Class
— это обобщенный тип, который объявлен, как показано ниже Здесь Т тип представленного класса или интерфейса. Примеры наиболее часто используемых методов, определенных в классе
Class, приведены в табл. Таблица 16.15. Примеры методов, определенных в классе c la s s

Описание
Метод
static Class forName(String имя)
throws ClassNotFoundException
static Class forName(String имя,
boolean как
загр)
throws ClassNotFoundException

A getAnnotation(Class
типАннотации
)
A n n o t a t i o n [ ] Возвращает объект класса C la s s по его полному имени
Возвращает объект класса C la s s по его полному имени. Объект загружается с помощью загрузчика, указанного в загр.
Если параметр как равен значению
true, объект инициали­
зируется, в противном случае — нет
Возвращает объект интерфейса
Anno
tat
ion, содержащий аннотацию, ассоциированную с типАннотации
,
для вызывающего объекта
Получает аннотацию, ассоциированную с вызывающим объектом, и сохраняет ее в массиве объектов интерфейса
Annotation. Возвращает ссылку на массив
Глава 16. Пакет java.lang
4 5 Продолжение табл. 16.15

Истай
Class[ ] getC l a s s e s ()
ClassLoader getClassLoader()
Constructor getConstructor(Class
.
.
.
типыПараметров)
throws
NoSuchMethodExcept
i o n ,
SecurityException
Constructor[] getConstructors()
throws SecurityException
A nnota t i o n [] getDeclaredAnnota-
tions ()
Constructor[] getDe-
claredConstructors() throws
SecurityException
F i e l d [] getDeclaredFields() throws
S
ecur
i
tyExc
ept i
on
M e t h o d [] getDeclaredMethods()
throws SecurityException
Field getField(String
имяПоля)
throws NoSuchMethodException,
SecurityException
F i e l d [] getFields() throws
SecurityExcept Описание
"


Возвращает объекты класса C la ss для каждого открытого класса и интерфейса, являющихся членами класса, представленного вызывающим объектом
Возвращает объект класса
ClassLoader, который загружал класс или интерфейс
Возвращает объект класса
Constructor, представляющий конструктор класса, предоставленного вызывающим объектом, который имеет типы параметров,
указанные в типыПараметров
Получает объекты класса
Constructor для каждого из открытых конструкторов класса, представленного вызывающим объектом, и сохраняет их в массиве. Возвращает ссылку на этот массив
Получает объекты интерфейса
Anno
tat
ion для всех аннотаций, объявленных в вызывающем объекте, и сохраняет их в массиве. Возвращает ссылку на этот массив (унаследованные аннотации игнорируются)
Получает объекты класса
Constructor для каждого из объявленных конструкторов класса, предоставленных вызывающим объектом, и сохраняет их в массиве. Возвращает ссылку на этот массив (конструкторы суперклассов игнорируются)
Получает объекты класса
Field для каждого из полей, объявленных в классе или интерфейсе, представленном вызывающим объектом, и сохраняет их в массиве. Возвращает ссылку на массив. (Унаследованные поля игнорируются)
Получает объекты класса
Method для каждого из методов, объявленных в классе или интерфейсе, представленном вызывающим объектом, и сохраняет их в массиве. Возвращает ссылку на этот массив. Унаследованные методы игнорируются)
Возвращает объект класса
Field, который представляет открытое поле, указанное в параметре имяПоля для класса или интерфейса, представляющего вызывающий объект
Получает объекты класса
Field для каждого открытого поля, класса или интерфейса, представляющего вызывающий объект, и сохраняет их в массиве. Возвращает ссылку на этот массив

4 5 Часть II. Библиотека Окончание табл. 16.15
Class[] getlnterfaces()
Method getMethod(String
имяМетода,
Class ...
типыПараметров)
throws NoSuchMethodException,
SecurityException
M e t h o d [] getM e t h o d s () throws
SecurityException
String g e t N a m e ()
ProtectionDomain getProtectionDo-
m a i n ()
Class getSuperclass()
boolean islnterface()
T n e w l n stance( )
throws
IllegalAccessException,
InstantiationException
String to S t r i n g (При вызове для объекта, представляющего класс или интерфейс, этот метод возвращает массив интерфейсов, реализованных этим классом. Когда вызывается для объекта, представляемого интерфейсом, этот метод возвращает массив интерфейсов, расширяемых данным интерфейсом
Возвращает объект класса
Method, который представляет открытый метод, заданный параметром имяМетода с параметрами типов, указанных в параметрах типыПараметров в классе или интерфейсе, представляемом вызывающим объектом
Получает объекты класса
Method для каждого открытого метода класса или интерфейса, представляемого вызывающим объектом, и сохраняет их в массиве. Возвращает ссылку на этот массив
Возвращает полное имя класса или интерфейса типа, представляемого вызывающим объектом
Возвращает домен защиты, связанный с вызывающим объектом
Возвращает суперкласс типа, представленного вызывающим объектом. Возвращает значение
nul
1
, если представленный тип — класс
Obj ect или не класс
Возвращает значение
true, если тип, представленный вызывающим объектом, является интерфейсом. В противном случае возвращает значение f a l s Создает новый экземпляр (те. новый объект, тип которого совпадает с типом представленного вызывающего объекта. Это эквивалентно использованию оператора
new со стандартным конструктором класса. Возвращается новый объект. Этот метод потерпит неудачу, если представленный тип будет абстрактным, не классом или не будет иметь стандартного конструктора
Возвращает строковое представление типа, представленного вызывающим объектом или интерфейсом___________________________
Методы, определенные в классе C l a s s , часто применяются в ситуациях, когда требуется информация об объекте времени выполнения. Как показано в табл. 16.15, вам предоставляются методы, которые позволяют получить дополнительную информацию об определенном классе, такую как его открытые конструкторы, поля и методы. Кроме того, это важно для обеспечения функциональных возможностей Java Beans, которые обсуждаются далее
Глава 16. Пакет java.lang
4 5 В следующей программе демонстрируется применение метода getClass
() унаследованного от класса
Object) и метода getSuperclass
() (из класса
Class).
// Работа с информацией о типе времени выполнения
class X {
int а ;
float b;
}
class Y extends X {
double c;
}
class RTTI {
public static void main(String a r g s []) {
X x = new X ();
Y у = new Y ();
Class clObj;
clObj = x.getClass(); // Получить ссылку на Class
System.out.println("x — объект типа " +
clObj.getName());
clObj = у .getClass(); // Получить ссылку на у — объект типа " +
clObj.getName());
clObj = clObj.getSuperclass();
System.out.println("Суперкласс у " + Ниже показан вывод этой программы.
х — объект типа X у — объект типа Y
Суперкласс у :
Класс Абстрактный класс
ClassLoader определяет, как загружаются классы. Ваше приложение может создавать подклассы, расширяющие класс
ClassLoader, реализуя его методы. Это позволяет загружать классы другими способами, нежели тот, которым выполняется обычная загрузка в системе времени выполнения Java. Однако обычно вы не должны этого делать.
Класс Этот класс содержит все функции с плавающей точкой, которые используются в геометрии и тригонометрии, а также некоторые методы общего назначения. В классе
Math определены две константы типа double: Е равная приблизительно
2,72) и
PI равная примерно 3,14).

4 5 Часть II. Библиотека Тригонометрические функции
Методы, перечисленные в табл. 16.16, принимают параметр типа d o u b le , выражающий угол в радианах и возвращающий результат соответствующей тригонометрической функции.
Таблица 16.16. Прямые тригонометрические функции класса
M a t Метод Описание
, ; : ,
;
s t a t i c double sin (double
арг)
Возвращает синус угла арг, переданного в радианах s t a t i c double cos (double
арг)
Возвращает косинус угла
арг,
переданного в радианах s t a t i c double tan (double
арг)
Возвращает тангенс угла
арг,
переданного
_________________________________ в радианах_________________________________
Методы, перечисленные в табл. 16.17, принимают в качестве параметра результат тригонометрической функции и возвращают угол в радианах, который порождает такой результат. Они представляют собой инверсию соответствующих функций из предыдущей таблицы.
Таблица 16.17. Обратные тригонометрические функции класса
M a t h
Метод
Описание
s t a t i c double asin (d ou b Возвращает угол, синус которого равен
арг
s t a t i c double Возвращает угол, косинус которого равен
арг
s t a t i c double atan (Возвращает угол, тангенс которого равен
арг
s t a t i c double atan2(double Возвращает угол, тангенс которого равен х у double У)
Методы, перечисленные в табл. 16.18, вычисляют гиперболический синус, косинус и тангенс угла.
Таблица 16.18. Гиперболические функции класса
M a t h Метод Описание

_______
s t a t i c double sinh(doub 1 e ар г) Возвращает гиперболический синус угла
арг,
переданного в радианах s t a t i c double cosh (double
арг)
Возвращает гиперболический косинус угла
арг,
переданного в радианах s t a t i c double tanh (double
арг)
Возвращает гиперболический тангенс угла
арг,
__________________________________ переданного в радианах_____________________
Экспоненциальные функции
В классе M ath определен набор экспоненциальных методов, которые описаны в табл. Таблица 16.19. Экспоненциальные функции класса

M a t h
Метод
Описание
s t a t i c s t a t ic double cbrt(double
apr) double exp(double Возвращает кубический корень из
арг Возвращает экспоненту
арг
Глава 16. Пакет java.lang
4 5 Окончание табл. 16.19
Ме*од ' , .
^: 4 1 ___________________
s t a t i c d o u b le expm l(double
a p r ) s t a t i c d o u b le lo g (d o u b le
a p r ) s t a t i c d o u b le lo g lO (d o u b le
a p r )
s t a t i c d o u b le lo g lp (d o u b le
a p r ) s t a t i c d o u b le pow (double y , d o u b le x)
s t a t i c d o u b le s c a lb ( d o u b le
a p r ,
i n t показатель
a p r ,
i n t показатель Описание -
-
' у
Возвращает экспоненту
a p r
-
1 Возвращает натуральный алгоритма р г
Возвращает логарифм по основанию 10 отар г
Возвращает натуральный алгоритма р г
+1
Возвращает у в степени х, например
1   ...   32   33   34   35   36   37   38   39   ...   90


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