|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
java.lang.Object
public class Object
Object
클래스는, 클래스 계층 루트입니다. 모든 클래스는, 슈퍼 클래스로서 Object
를 가집니다. 배열을 포함한 모든 객체는, 이 클래스의 메소드를 구현합니다.
Class
생성자 의 개요 | |
---|---|
Object ()
|
메소드의 개요 | |
---|---|
protected Object |
clone ()
이 객체의 카피를 작성해, 돌려줍니다. |
boolean |
equals (Object obj)
이 객체와 「등가」가 되는 객체가 있을지 어떨지를 나타냅니다. |
protected void |
finalize ()
이 객체에의 참조는 이제 없으면 가베지 컬렉션에 의해 판단되었을 때에, 가비지 컬렉터에 의해 불려 갑니다. |
Class <? > |
getClass ()
이 Object 의 실행시 클래스를 돌려줍니다. |
int |
hashCode ()
객체의 해시 코드값를 돌려줍니다. |
void |
notify ()
이 객체의 모니터로 대기중의 thread를 1 개 재개합니다. |
void |
notifyAll ()
이 객체의 모니터로 대기중의 모든 thread를 재개합니다. |
String |
toString ()
객체의 캐릭터 라인 표현을 돌려줍니다. |
void |
wait ()
다른 thread가 이 객체의 notify() 메소드 또는 notifyAll() 메소드를 호출할 때까지, 현재의 thread를 대기시킵니다. |
void |
wait (long timeout)
다른 thread가 이 객체의 notify() 메소드 또는 notifyAll() 메소드를 호출하는지, 지정된 시간이 경과할 때까지, 현재의 thread를 대기시킵니다. |
void |
wait (long timeout,
int nanos)
다른 thread가 이 객체의 notify() 메소드 또는 notifyAll() 메소드를 호출하는지, 다른 thread가 현재의 thread에 인터럽트를 걸거나 지정된 양의 실시간이 경과할 때까지, 현재의 thread를 대기시킵니다. |
생성자 의 상세 |
---|
public Object()
메소드의 상세 |
---|
public final Class <? > getClass()
Object
의 실행시 클래스를 돌려줍니다. 반환되는 Class
객체는, 나타내진 클래스의 static synchronized
메소드에 의해 락 되는 객체입니다.
실제의 결과형은 Class<? extends |X|>
입니다. 여기서,|X|
는 getClass
가 불려 가는 static 형의 이레이쟈입니다. 예를 들어, 이 코드의 발췌에서는 캐스트는 필요 없습니다.
Number n = 0;
Class<? extends Number> c = n.getClass();
Class
객체public int hashCode()
java.util.Hashtable
에 의해 제공되는 것 같은 해시 테이블로 사용하기 위해서 준비되어 있습니다.
hashCode
메소드의 일반적인 규칙을 다음에 나타냅니다.
hashCode
메소드를 호출해도 결과는 같은 정수치가 되어야 하다
equals(java.lang.Object)
메소드로 2 개의 객체가 등가가 아니다고 여겨졌을 경우는, 이러한 객체에 대해서 hashCode 메소드를 호출했을 때에, 결과가 다른 정수치가 되지 않아도 상관없다. 그러나, 동일하지 않은 객체에 대해서는 다른 정수치가 생성되도록 하면, 해시 테이블의 퍼포먼스를 올릴 수가 있다
할 수 있는 한,Object 클래스에서 정의되는 hashCode 메소드는, 다른 객체에 대해서는 다른 정수치를 돌려줍니다. 일반적으로, 이것은 객체의 내부 주소를 정수치로 변환하는 형태로 구현됩니다만, 그러한 구현 테크닉은 JavaTM 프로그램 언어에서는 불필요합니다.
equals(java.lang.Object)
,
Hashtable
public boolean equals(Object obj)
equals
메소드는, null 이외의 객체 참조에서의 동치 관계를 구현합니다.
x
에 대해,x.equals(x)
는 true
를 돌려준다
x
와 y
에 대해,x.equals(y)
는,y.equals(x)
가 true
를 돌려주는 경우만 true
를 돌려준다
x
,y
,z
에 대해,x.equals(y)
가 true
를 돌려주어, 한편 y.equals(z)
가 true
를 돌려주는 경우에,x.equals(z)
는 true
를 돌려준다
x
및 y
에 대해,x.equals(y) 를 복수 호출하면(자) 항상 true
를 돌려주는지, 항상 false
를 돌려준다. 이것은, 객체에 대한 equals
에 의한 비교로 사용된 정보가 변경되어 있지 않은 것이 조건이다
x
에 대해,x.equals(null)
는 false
를 돌려준다
Object
클래스의 equals 메소드는, 가장 비교하기 쉬운 객체의 동치 관계를 구현합니다. 즉, null 이외의 참조치 x
와 y
에 대해, 이 메소드는 x
와 y
가 같은 객체를 참조하는 (x == y
가 true
) 경우에만 true
를 돌려줍니다.
일반적으로, 이 메소드를 오버라이드(override) 하는 경우는,hashCode 메소드를 항상 오버라이드(override) 해, 「등가인 객체는 등가인 해시 코드를 보관 유지할 필요가 있다」라고 하는 hashCode 메소드의 범용 규약에 따를 필요가 있는 것에 유의해 주세요.
obj
- 비교 대상의 참조 객체
true
, 그렇지 않은 경우는 false
hashCode()
,
Hashtable
protected Object clone() throws CloneNotSupportedException
하지만 true 이며, 다음의 식x.clone() ! = x
도 true 인 것입니다만, 이것들도 절대적인 요건이 아닙니다. 또 다음의 식x.clone(). getClass() == x.getClass()
도 일반적으로 true 가 됩니다만, 이것도 절대적인 요건이 아닙니다.x.clone(). equals(x)
일반적으로,super.clone 를 호출하는 것으로 반환되는 객체를 취득할 수 있습니다. 클래스 및 그 슈퍼 클래스 모든 것 (Object 를 제외한다)이 이 규칙에 따르는 경우,x.clone(). getClass() == x.getClass() 가 성립합니다.
일반적으로, 이 메소드에 의해 반환되는 객체는, 이 객체 (복제되고 있다)로부터 독립하고 있을 필요가 있습니다. 이 독립성을 달성하기 위해(때문에),super.clone 가 돌려주는 객체의 필드를 1 개 이상 (객체가 돌려주기 전에) 변경하는 것이 필요하게 되는 경우가 있습니다. 이것은, 일반적으로, 복제하는 객체의 내부 「심층 구조」를 구성하는 가변 객체의 카피, 및 이러한 객체에의 참조를 카피에의 참조에 옮겨놓는 것을 의미합니다. 클래스에 프리미티브(primitive) 필드 또는 불변 객체에의 참조만이 포함되는 경우, 일반적으로,super.clone 에 의해 반환되는 객체내의 필드를 변경할 필요는 없습니다.
Object 클래스의 clone 메소드는, 특정의 복제 처리를 실행합니다. 우선, 이 객체의 클래스가 Cloneable 인터페이스를 구현하고 있지 않는 경우는,CloneNotSupportedException 가 throw 됩니다. 배열은 모두, 인터페이스 Cloneable 를 구현하고 있는 것이라고 보여지는 것에 주의해 주세요. 구현하고 있지 않는 경우, 이 메소드는 이 객체의 클래스의 새로운 인스턴스를 생성해, 그 필드를 모두, 이 객체의 대응하는 각 필드의 내용으로 초기화합니다. 이것은 대입과 같아, 필드의 내용 자신이 복제되는 것은 아닙니다. 즉 이 메소드는, 객체의 「shallow 복사」를 생성합니다만, 「딥 카피」는 생성하지 않습니다.
Object 클래스 자체는,Cloneable 인터페이스를 구현하지 않기 때문에, 클래스가 Object 인 clone 메소드를 호출하면(자), 실행시에 예외가 throw 됩니다.
CloneNotSupportedException
- 객체의 클래스가 Cloneable
인터페이스를 지원하고 있지 않는 경우. clone
메소드를 오버라이드(override) 한 서브 클래스도, 인스턴스를 복제할 수 없는 것을 나타내기 위해서(때문에) 이 예외를 throw 하는 일이 있는Cloneable
public String toString()
toString
메소드는 이 객체를 「텍스트로 표현한다」캐릭터 라인을 돌려줍니다. 이 결과는, 인간이 읽을 수 있는 간결하고 유익한 정보여야 합니다. 모든 서브 클래스에서, 이 메소드를 오버라이드(override) 하는 것을 추천합니다.
Object
클래스의 toString
메소드는, 객체의 파생원의 클래스명, @ 부호 (@
), 및 객체의 해시 코드의 부호 없음 16 진표현으로부터 구성되는 캐릭터 라인을 돌려줍니다. 즉, 이 메소드는 다음의 값과 동일한 캐릭터 라인을 돌려줍니다.
getClass(). getName() + '@' + Integer.toHexString(hashCode())
public final void notify()
wait
메소드를 호출하면(자), 객체의 모니터로 대기합니다. 재개된 thread의 처리는, 현재의 thread가 이 객체의 락을 해제할 때까지는 진행될 수가 없습니다. 재개된 thread는, 다른 thread와 같이, 이 객체와 동기 하도록(듯이) 적극적으로 겨룹니다. 예를 들어, 이 객체를 잠그는 다음의 thread가 되려고 하는 경우에서도, 재개된 thread의 취급은 다른 thread보다 우세하지도 열세하지도 않습니다.
이 메소드를 호출하는 것은, 이 객체의 모니터를 소유하는 thread 뿐만이 아니면 안됩니다. thread가 객체의 모니터의 오너가 되는 방법은, 다음의 3 방법이 있습니다.
synchronized
문의 본체를 실행한다
Class
형의 객체의 경우는, 그 클래스의 syncronized static 메소드를 실행한다
객체의 모니터를 소유할 수 있는 thread는 1 회에 1 개 뿐입니다.
IllegalMonitorStateException
- 현재의 thread가 이 객체의 모니터를 소유하고 있지 않는 경우notifyAll()
,
wait()
public final void notifyAll()
wait
메소드를 호출하면(자), 객체의 모니터로 대기합니다. 재개된 thread의 처리는, 현재의 thread가 이 객체의 락을 해제할 때까지는 진행될 수가 없습니다. 재개된 thread는, 다른 thread와 같이, 이 객체와 동기 하도록(듯이) 적극적으로 겨룹니다. 예를 들어, 이 객체를 잠그는 다음의 thread가 되려고 하는 경우에서도, 재개된 thread의 취급은 다른 thread보다 우세하지도 열세하지도 않습니다.
이 메소드를 호출하는 것은, 이 객체의 모니터를 소유하는 thread 뿐만이 아니면 안됩니다. thread가 객체의 모니터의 오너가 되는 방법에 대해서는,notify
메소드를 참조해 주세요.
IllegalMonitorStateException
- 현재의 thread가 이 객체의 모니터를 소유하고 있지 않는 경우notify()
,
wait()
public final void wait(long timeout) throws InterruptedException
notify()
메소드 또는 notifyAll()
메소드를 호출하는지, 지정된 시간이 경과할 때까지, 현재의 thread를 대기시킵니다. 현재의 thread는, 이 객체의 모니터의 오너가 아니면 안됩니다.
이 메소드는, 현재의 thread (여기에서는 T 로 한다)를 이 객체의 대기 세트에 넣고 나서, 이 객체에 대한 동기 요구를 모두 폐기합니다. thread T 는, thread의 스케줄링에 대해서는 무효로 여겨져 이하의 4 개의 어떤 것인가가 발생할 때까지 대기합니다.
thread는, 통지, 끼어들어, 타임 아웃없이 재개되는 일이 있습니다. 이것은, 「위조(spurious)된 재개(wake up)들」이라고 불리고 있습니다. 위조(spurious)된 재개(wake up)들은, 실제로는 보기 드물게 밖에 발생합니다만, 어플리케이션에서는, thread가 재개되는 것으로 발생할 가능성이 있는 조건을 테스트해, 조건이 채워지지 않은 경우는 대기를 계속해, 위조(spurious)된 재개(wake up)들으로부터 보호하지 않으면 안됩니다. 즉, 다음과 같이 루프로 항상 대기가 발생하도록(듯이) 할 필요가 있습니다.
synchronized (obj) { while (<condition does not hold>) obj.wait(timeout); ... // Perform action appropriate to condition }(이 토픽의 자세한 것은, Doug Lea 저 「Concurrent Programming in Java (Second Edition)」(Addison-Wesley, 2000)의 섹션 3.2. 3 이나 Joshua Bloch 저 「Effective Java Programming Language Guide」(Addison-Wesley, 2001)의 아이템 50 을 참조해 주세요).
현재의 thread가 대기하기 전이나 대기중에 몇개의 thread에 의해끼어들어졌을 경우는,InterruptedException 가 throw 됩니다. 이 예외는, 이 객체의 락 상태가 전술과 같이 복원될 때까지는 throw 되지 않습니다.
현재의 thread를 이 객체의 대기 세트에 넣을 때,wait 메소드는 이 객체의 락만을 해제합니다. 현재의 thread가 동기를 잡을 가능성이 있는 그 외의 객체는, 이 thread가 대기하고 있는 동안도 락 된대로 입니다.
이 메소드를 호출하는 것은, 이 객체의 모니터를 소유하는 thread 뿐만이 아니면 안됩니다. thread가 객체의 모니터의 오너가 되는 방법에 대해서는,notify
메소드를 참조해 주세요.
timeout
- 밀리 세컨드 단위의 대기 시간
IllegalArgumentException
- timeout 의 값이 부인 경우
IllegalMonitorStateException
- 현재의 thread가 객체의 모니터를 소유하고 있지 않는 경우
InterruptedException
- 현재의 thread가 통지를 대기하기 전 또는 대기중에, 몇개의 thread가 현재의 thread에 끼어들었을 경우. 이 예외가 throw 되면(자), 현재의 thread의 「인터럽트 상태」는 클리어 되는notify()
,
notifyAll()
public final void wait(long timeout, int nanos) throws InterruptedException
notify()
메소드 또는 notifyAll()
메소드를 호출하는지, 다른 thread가 현재의 thread에 인터럽트를 걸거나 지정된 양의 실시간이 경과할 때까지, 현재의 thread를 대기시킵니다.
이 메소드는, 인수가 1 개의 wait
메소드를 닮아 있습니다만, 타임 아웃까지의 대기 시간의 양을 보다 세세하게 제어할 수가 있습니다. 나노초단위의 실시간은, 다음의 식에서 지정합니다.
1000000*timeout+nanos
그 외의 면에서는, 이 메소드의 동작은 인수가 1 개의 wait(long)
메소드와 같습니다. 특히,wait(0, 0) 는 wait(0) 와 같은 의미가 됩니다.
현재의 thread는, 이 객체의 모니터의 오너가 아니면 안됩니다. thread는 이 모니터의 소유권을 해제해, 다음의 어떤 것인가 상태가 발생할 때까지 대기합니다.
notify
메소드 또는 notifyAll
메소드를 호출하는 것에 의해, 이 객체의 모니터로 대기중의 thread에 통지를 보내, 이 thread를 재개한다
timeout
인수로 지정한 타임 아웃 기간 (밀리 세컨드 단위)과nanos
인수로 지정한 타임 아웃 기간 (나노초단위)을 더한 시간이 경과한다
그 후, thread는 모니터의 소유권을 재차 취득할 때까지 대기하고 나서 실행을 재개합니다.
인수가 1 개의 버젼에서는, 인터럽트나 위조(spurious)된 재개(wake up)들이 발생할 가능성이 있으므로, 이 메소드는 항상 루프로 사용될 필요가 있습니다.
synchronized (obj) { while (<condition does not hold>) obj.wait(timeout, nanos); ... // Perform action appropriate to condition }이 메소드를 호출하는 것은, 이 객체의 모니터를 소유하는 thread 뿐만이 아니면 안됩니다. thread가 객체의 모니터의 오너가 되는 방법에 대해서는,
notify
메소드를 참조해 주세요.
timeout
- 밀리 세컨드 단위의 대기 시간nanos
- 추가의 대기 시간 (나노초단위로 0 ~ 999999 의 범위)
IllegalArgumentException
- 대기 시간의 값이 부의 경우, 또는 nanos 의 값이 0 ~ 999999 의 범위외의 경우
IllegalMonitorStateException
- 현재의 thread가 이 객체의 모니터를 소유하고 있지 않는 경우
InterruptedException
- 현재의 thread가 통지를 대기하기 전 또는 대기중에, 몇개의 thread가 현재의 thread에 끼어들었을 경우. 이 예외가 throw 되면(자), 현재의 thread의 「인터럽트 상태」는 클리어 된다public final void wait() throws InterruptedException
notify()
메소드 또는 notifyAll()
메소드를 호출할 때까지, 현재의 thread를 대기시킵니다. 즉, 이 메소드의 동작은 wait(0) 를 호출했을 경우와 같습니다.
현재의 thread는, 이 객체의 모니터의 오너가 아니면 안됩니다. thread는 이 모니터의 소유권을 해제해, 다른 thread가 notify
메소드 또는 notifyAll
메소드를 호출해 이 객체의 모니터상에서 대기하는 thread에 통지를 보낼 때까지 대기합니다. 그 후, thread는 모니터의 소유권을 재차 취득할 때까지 대기하고 나서 실행을 재개합니다.
인수가 1 개의 버젼에서는, 인터럽트나 위조(spurious)된 재개(wake up)들이 발생할 가능성이 있으므로, 이 메소드는 항상 루프로 사용될 필요가 있습니다.
synchronized (obj) { while (<condition does not hold>) obj.wait(); ... // Perform action appropriate to condition }이 메소드를 호출하는 것은, 이 객체의 모니터를 소유하는 thread 뿐만이 아니면 안됩니다. thread가 객체의 모니터의 오너가 되는 방법에 대해서는,
notify
메소드를 참조해 주세요.
IllegalMonitorStateException
- 현재의 thread가 객체의 모니터를 소유하고 있지 않는 경우
InterruptedException
- 현재의 thread가 통지를 대기하기 전 또는 대기중에, 몇개의 thread가 현재의 thread에 끼어들었을 경우. 이 예외가 throw 되면(자), 현재의 thread의 「인터럽트 상태」는 클리어 되는notify()
,
notifyAll()
protected void finalize() throws Throwable
finalize
메소드를 오버라이드(override) 해, system resource를 파기하거나 그 외의 클린 업을 실시하거나 할 수가 있습니다. finalize 의 일반적인 규약에서는, finalize 의 호출은, 아직 생존하고 있는 임의의 thread가 이 객체에 액세스 하는 방법은 없으면 JavaTM 가상 머신이 판단했을 경우에 행해집니다. 다만, finalize의 준비가 끝난 것 외의 객체 또는 클래스를 finalize하기 위한 처리의 결과 그렇게 되었을 경우를 제외합니다. finalize 메소드는, 이 객체를 다른 thread로 다시 이용 가능하게 하는 일도 포함해, 임의의 액션을 실시할 수가 있습니다. 그러나,finalize 의 일반적으로의 용도는, 객체를 재생 불가능한 형태로 파기하기 전의 클린 업을 실행하는 것입니다. 예를 들어, 입출력의 접속을 나타내는 객체의 finalize 메소드는, 객체가 영구적으로 파기되기 전에, 접속을 절단하기 위한 명시적인 입출력 처리를 실시합니다.
Object 클래스의 finalize 메소드는, 특별한 처리를 실시하지 않습니다. 일반적으로은, 아무것도 하지 않고 복귀합니다. Object 의 서브 클래스는, 이 정의를 오버라이드(override) 할 수가 있습니다.
Java 프로그램 언어는, 임의의 객체에 대해 어느 thread가 finalize 메소드를 호출하는지를 보증하지 않습니다. 그러나, finalize 를 호출하는 thread가, 사용자에게 가시인 동기 락을 finalize 호출의 시점에서는 보관 유지하고 있지 않는 것에 붙어 보증됩니다. 캐치 되지 않는 예외를 finalize 메소드가 throw 했을 경우, 예외는 무시되어 객체의 finalize는 종료합니다.
어느 객체에 대해 finalize 메소드가 불려 간 뒤에 다음의 처리가 발생하는 것은, 아직 생존하고 있는 임의의 thread가 이 객체에 액세스 할 수 있는 방법은 없으면 Java 가상 머신이 다시 판단했을 때입니다. 이것에는, finalize의 준비가 되어 있는 것 외의 객체 또는 클래스에 의해 발생한 처리도 포함되어 그 시점에서 이 객체는 파기됩니다.
임의의 객체에 대해 Java 가상 머신이 finalize 메소드를 여러 차례 호출할 것은 없습니다.
finalize 메소드에 의해 예외가 throw 되면(자),finalize
메소드의 처리는 정지됩니다. 그렇지 않은 경우는 무시됩니다.
Throwable
- 이 메소드로 생긴 Exception
|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.