JavaTM Platform
Standard Ed. 6

java.lang
클래스 Object

java.lang.Object


public class Object

Object 클래스는, 클래스 계층 루트입니다. 모든 클래스는, 슈퍼 클래스로서 Object 를 가집니다. 배열을 포함한 모든 객체는, 이 클래스의 메소드를 구현합니다.

도입된 버젼:
JDK1. 0
관련 항목:
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를 대기시킵니다.
 

생성자 의 상세

Object

public Object()
메소드의 상세

getClass

public final Class <? > getClass()
Object 의 실행시 클래스를 돌려줍니다. 반환되는 Class 객체는, 나타내진 클래스의 static synchronized 메소드에 의해 락 되는 객체입니다.

실제의 결과형은 Class<? extends |X|> 입니다. 여기서,|X|getClass 가 불려 가는 static 형의 이레이쟈입니다. 예를 들어, 이 코드의 발췌에서는 캐스트는 필요 없습니다.

Number n = 0;
Class<? extends Number> c = n.getClass();

반환값:
이 객체의 실행시 클래스를 나타내는 Class 객체
관련 항목:
「Java 언어 스펙, 제 3 판」 (15.8. 2 Class Literals)

hashCode

public int hashCode()
객체의 해시 코드값를 돌려줍니다. 이 메소드는,java.util.Hashtable 에 의해 제공되는 것 같은 해시 테이블로 사용하기 위해서 준비되어 있습니다.  

hashCode 메소드의 일반적인 규칙을 다음에 나타냅니다.

할 수 있는 한,Object 클래스에서 정의되는 hashCode 메소드는, 다른 객체에 대해서는 다른 정수치를 돌려줍니다. 일반적으로, 이것은 객체의 내부 주소를 정수치로 변환하는 형태로 구현됩니다만, 그러한 구현 테크닉은 JavaTM 프로그램 언어에서는 불필요합니다.

반환값:
이 객체의 해시 코드값
관련 항목:
equals(java.lang.Object) , Hashtable

equals

public boolean equals(Object  obj)
이 객체와 「등가」가 되는 객체가 있을지 어떨지를 나타냅니다.  

equals 메소드는, null 이외의 객체 참조에서의 동치 관계를 구현합니다.

Object 클래스의 equals 메소드는, 가장 비교하기 쉬운 객체의 동치 관계를 구현합니다. 즉, null 이외의 참조치 xy 에 대해, 이 메소드는 xy 가 같은 객체를 참조하는 (x == ytrue) 경우에만 true 를 돌려줍니다.  

일반적으로, 이 메소드를 오버라이드(override) 하는 경우는,hashCode 메소드를 항상 오버라이드(override) 해, 「등가인 객체는 등가인 해시 코드를 보관 유지할 필요가 있다」라고 하는 hashCode 메소드의 범용 규약에 따를 필요가 있는 것에 유의해 주세요.

파라미터:
obj - 비교 대상의 참조 객체
반환값:
obj 인수로 지정된 객체와 이 객체가 동일한 경우는 true, 그렇지 않은 경우는 false
관련 항목:
hashCode() , Hashtable

clone

protected Object  clone()
                throws CloneNotSupportedException 
이 객체의 카피를 작성해, 돌려줍니다. 「카피」의 정확한 이유는, 객체의 클래스에 의해 다릅니다. 일반적으로는, 임의의 객체 x 에 대해, 다음의 식
 x.clone() ! = x
하지만 true 이며, 다음의 식
 x.clone(). getClass() == x.getClass()
true 인 것입니다만, 이것들도 절대적인 요건이 아닙니다. 또 다음의 식
 x.clone(). equals(x)
도 일반적으로 true 가 됩니다만, 이것도 절대적인 요건이 아닙니다.  

일반적으로,super.clone 를 호출하는 것으로 반환되는 객체를 취득할 수 있습니다. 클래스 및 그 슈퍼 클래스 모든 것 (Object 를 제외한다)이 이 규칙에 따르는 경우,x.clone(). getClass() == x.getClass() 가 성립합니다.  

일반적으로, 이 메소드에 의해 반환되는 객체는, 이 객체 (복제되고 있다)로부터 독립하고 있을 필요가 있습니다. 이 독립성을 달성하기 위해(때문에),super.clone 가 돌려주는 객체의 필드를 1 개 이상 (객체가 돌려주기 전에) 변경하는 것이 필요하게 되는 경우가 있습니다. 이것은, 일반적으로, 복제하는 객체의 내부 「심층 구조」를 구성하는 가변 객체의 카피, 및 이러한 객체에의 참조를 카피에의 참조에 옮겨놓는 것을 의미합니다. 클래스에 프리미티브(primitive) 필드 또는 불변 객체에의 참조만이 포함되는 경우, 일반적으로,super.clone 에 의해 반환되는 객체내의 필드를 변경할 필요는 없습니다.  

Object 클래스의 clone 메소드는, 특정의 복제 처리를 실행합니다. 우선, 이 객체의 클래스가 Cloneable 인터페이스를 구현하고 있지 않는 경우는,CloneNotSupportedException 가 throw 됩니다. 배열은 모두, 인터페이스 Cloneable 를 구현하고 있는 것이라고 보여지는 것에 주의해 주세요. 구현하고 있지 않는 경우, 이 메소드는 이 객체의 클래스의 새로운 인스턴스를 생성해, 그 필드를 모두, 이 객체의 대응하는 각 필드의 내용으로 초기화합니다. 이것은 대입과 같아, 필드의 내용 자신이 복제되는 것은 아닙니다. 즉 이 메소드는, 객체의 「shallow 복사」를 생성합니다만, 「딥 카피」는 생성하지 않습니다.  

Object 클래스 자체는,Cloneable 인터페이스를 구현하지 않기 때문에, 클래스가 Objectclone 메소드를 호출하면(자), 실행시에 예외가 throw 됩니다.

반환값:
이 인스턴스의 복제
예외:
CloneNotSupportedException - 객체의 클래스가 Cloneable 인터페이스를 지원하고 있지 않는 경우. clone 메소드를 오버라이드(override) 한 서브 클래스도, 인스턴스를 복제할 수 없는 것을 나타내기 위해서(때문에) 이 예외를 throw 하는 일이 있는
관련 항목:
Cloneable

toString

public String  toString()
객체의 캐릭터 라인 표현을 돌려줍니다. 일반적으로,toString 메소드는 이 객체를 「텍스트로 표현한다」캐릭터 라인을 돌려줍니다. 이 결과는, 인간이 읽을 수 있는 간결하고 유익한 정보여야 합니다. 모든 서브 클래스에서, 이 메소드를 오버라이드(override) 하는 것을 추천합니다.  

Object 클래스의 toString 메소드는, 객체의 파생원의 클래스명, @ 부호 (@), 및 객체의 해시 코드의 부호 없음 16 진표현으로부터 구성되는 캐릭터 라인을 돌려줍니다. 즉, 이 메소드는 다음의 값과 동일한 캐릭터 라인을 돌려줍니다.

 getClass(). getName() + '@' + Integer.toHexString(hashCode())
 

반환값:
이 객체의 캐릭터 라인 표현

notify

public final void notify()
이 객체의 모니터로 대기중의 thread를 1 개 재개합니다. 이 객체로 복수의 thread가 대기중의 경우는, 그 중의 1 개를 재개합니다. 이 선택은 임의로, 구현에 따라서 다릅니다. thread는,wait 메소드를 호출하면(자), 객체의 모니터로 대기합니다.  

재개된 thread의 처리는, 현재의 thread가 이 객체의 락을 해제할 때까지는 진행될 수가 없습니다. 재개된 thread는, 다른 thread와 같이, 이 객체와 동기 하도록(듯이) 적극적으로 겨룹니다. 예를 들어, 이 객체를 잠그는 다음의 thread가 되려고 하는 경우에서도, 재개된 thread의 취급은 다른 thread보다 우세하지도 열세하지도 않습니다.  

이 메소드를 호출하는 것은, 이 객체의 모니터를 소유하는 thread 뿐만이 아니면 안됩니다. thread가 객체의 모니터의 오너가 되는 방법은, 다음의 3 방법이 있습니다.

객체의 모니터를 소유할 수 있는 thread는 1 회에 1 개 뿐입니다.

예외:
IllegalMonitorStateException - 현재의 thread가 이 객체의 모니터를 소유하고 있지 않는 경우
관련 항목:
notifyAll() , wait()

notifyAll

public final void notifyAll()
이 객체의 모니터로 대기중의 모든 thread를 재개합니다. thread는,wait 메소드를 호출하면(자), 객체의 모니터로 대기합니다.  

재개된 thread의 처리는, 현재의 thread가 이 객체의 락을 해제할 때까지는 진행될 수가 없습니다. 재개된 thread는, 다른 thread와 같이, 이 객체와 동기 하도록(듯이) 적극적으로 겨룹니다. 예를 들어, 이 객체를 잠그는 다음의 thread가 되려고 하는 경우에서도, 재개된 thread의 취급은 다른 thread보다 우세하지도 열세하지도 않습니다.  

이 메소드를 호출하는 것은, 이 객체의 모니터를 소유하는 thread 뿐만이 아니면 안됩니다. thread가 객체의 모니터의 오너가 되는 방법에 대해서는,notify 메소드를 참조해 주세요.

예외:
IllegalMonitorStateException - 현재의 thread가 이 객체의 모니터를 소유하고 있지 않는 경우
관련 항목:
notify() , wait()

wait

public final void wait(long timeout)
                throws InterruptedException 
다른 thread가 이 객체의 notify() 메소드 또는 notifyAll() 메소드를 호출하는지, 지정된 시간이 경과할 때까지, 현재의 thread를 대기시킵니다.  

현재의 thread는, 이 객체의 모니터의 오너가 아니면 안됩니다.  

이 메소드는, 현재의 thread (여기에서는 T 로 한다)를 이 객체의 대기 세트에 넣고 나서, 이 객체에 대한 동기 요구를 모두 폐기합니다. thread T 는, thread의 스케줄링에 대해서는 무효로 여겨져 이하의 4 개의 어떤 것인가가 발생할 때까지 대기합니다.

그 후 thread T 는 이 객체의 대기 세트로부터 삭제되어 thread의 스케줄링이 다시 가능하게 됩니다. 이후, 이 thread는 일반적으로대로, 객체와 동기화할 권리를 다른 thread와 경쟁합니다. 객체의 제어를 획득하면, 객체에 대한 이 thread의 동기 요구는, 이전 상태, 즉,wait 메소드가 불려 갔을 때 상태에 복원됩니다. 다음에 thread Twait 메소드의 호출로부터 복귀합니다. 이렇게 해,wait 메소드로부터 복귀한 시점에서, 객체 및 thread T 의 동기 상태는,wait 메소드가 불려 갔을 때와 완전히 같게 됩니다.  

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()

wait

public final void wait(long timeout,
                       int nanos)
                throws InterruptedException 
다른 thread가 이 객체의 notify() 메소드 또는 notifyAll() 메소드를 호출하는지, 다른 thread가 현재의 thread에 인터럽트를 걸거나 지정된 양의 실시간이 경과할 때까지, 현재의 thread를 대기시킵니다.  

이 메소드는, 인수가 1 개의 wait 메소드를 닮아 있습니다만, 타임 아웃까지의 대기 시간의 양을 보다 세세하게 제어할 수가 있습니다. 나노초단위의 실시간은, 다음의 식에서 지정합니다.

 1000000*timeout+nanos

그 외의 면에서는, 이 메소드의 동작은 인수가 1 개의 wait(long) 메소드와 같습니다. 특히,wait(0, 0)wait(0) 와 같은 의미가 됩니다.  

현재의 thread는, 이 객체의 모니터의 오너가 아니면 안됩니다. thread는 이 모니터의 소유권을 해제해, 다음의 어떤 것인가 상태가 발생할 때까지 대기합니다.

그 후, 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의 「인터럽트 상태」는 클리어 된다

wait

public final void wait()
                throws InterruptedException 
다른 thread가 이 객체의 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()

finalize

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

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.