JavaTM 2 Platform
Standard Ed. 5.0

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 <? extends Object > getClass ()
          객체의 실행시 클래스를 리턴합니다.
 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 <?  extends Object > getClass()
객체의 실행시 클래스를 리턴합니다. 이 Class 객체는 나타내진 클래스의 static synchronized 메서드에 의해 락 되는 객체입니다.

반환값:
객체의 실행시 클래스를 나타내는 java.lang.Class 객체. 결과는 Class<? extends X> 형이 된다. 여기서, X는 getClass가 호출되는 static 형의 이레이쟈

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개 이상 (객체가 돌려주기 전에) 변경하는 것이 필요하게 되는 경우가 있습니다. 이것은 보통, 복제하는 객체의 내부 「심층 구조」를 구성하는 가변 객체의 카피 및 이러한 객체에의 참조를 카피에의 참조에 옮겨놓는 것을의미합니다. 클래스에 원시적 필드 또는 불변 객체에의 참조만이 포함되는 경우, 보통, super.clone에 의해 리턴된 객체내의 필드를 변경할 필요는 없습니다.

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

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

반환값:
이 인스턴스의 복제
예외:
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 메서드를 1개 호출해, 객체의 모니터로 대기합니다.

재개된 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는 통지, 끼어들어, 타임 아웃없이 재개되는 일이 있습니다. 이것은 「스프리아스웨이크압」이라고 불리고 있습니다. 스프리아스웨이크압은 실제로는 보기 드물게 밖에 발생합니다만, 어플리케이션에서는 thread가 재개되는 것으로 발생할 가능성이 있는 조건을 테스트해, 조건이 채워지지 않은 경우는 대기를 계속해, 스프리아스웨이크압으로부터 보호하지 않으면 안됩니다. 즉, 다음과 같이 루프로 항상 대기가 발생하도록 할 필요가 있습니다.


     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 되지 않습니다.

현재의 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개의 버전에 서는 인터럽트나 스프리아스웨이크압이 발생할 가능성이 있으므로 이 메서드는 항상 루프로 사용될 필요가 있습니다.


     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개의 버전에 서는 인터럽트나 스프리아스웨이크압이 발생할 가능성이 있으므로 이 메서드는 항상 루프로 사용될 필요가 있습니다.


     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 메서드는 이 객체를 다른 thread로 다시 이용 가능하게 하는 일도 포함해, 임의의 액션을 실시할 수 있습니다 . 그러나, finalize 보통 의 용도는 객체를 재생 불가능한 형태로 파기하기 전의 클린 업을 실행하는 것입니다. 예를 들어 입출력의 접속을 나타내는 객체의 finalize 메서드는 객체가 영구적으로 파기되기 전에 접속을 절단하기 위한 명시적인 입출력 처리를 실시합니다.

Object 클래스의 finalize 메서드는 특별한 처리를 실시하지 않습니다. 일반적으로 아무것도 하지 않고 복귀합니다. Object 서브 클래스는 이 정의를 오버라이드(override) 할 수 있습니다 .

Java 프로그램 언어는 임의의 객체에 대해 어느 thread가 finalize 메서드를 호출하는지를 보증하지 않습니다. 그러나, finalize를 호출하는 thread가 사용자에 게 가시인 동기 락을 finalize 호출의 시점에서는 보관 유지하고 있지 않는 것에 붙어 보증됩니다. 캐치 되지 않는 예외를 finalize 메서드가 Throw 했을 경우, 예외는 무시되어 객체의 파이나라이즈는 종료합니다.

어느 객체에 대해 finalize 메서드가 불려 간 뒤에 다음의 처리가 발생하는 것은 아직 생존하고 있는 임의의 thread가 이 객체에 액세스 할 수 있는 방법은 없으면 Java 가상 머신이 다시 판단했을 때입니다. 이것에는 파이나라이즈의 준비가 되어 있는 것 외의 객체 또는 클래스에 의해 발생한 처리도 포함되어 그 시점에서 이 객체는 파기됩니다.

임의의 객체에 대해 Java 가상 머신이 finalize 메서드를 여러 차례 호출할 것은 없습니다.

finalize 메서드에 의해 예외가 Throw 되면, finalize 메서드의 처리는 정지됩니다. 그렇지 않은 경우는 무시됩니다.

예외:
Throwable - 이 메서드로 생긴 Exception

JavaTM 2 Platform
Standard Ed. 5.0

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조하십시오.