001/* java.lang.Object - The universal superclass in Java 002 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005 003 Free Software Foundation, Inc. 004 005This file is part of GNU Classpath. 006 007GNU Classpath is free software; you can redistribute it and/or modify 008it under the terms of the GNU General Public License as published by 009the Free Software Foundation; either version 2, or (at your option) 010any later version. 011 012GNU Classpath is distributed in the hope that it will be useful, but 013WITHOUT ANY WARRANTY; without even the implied warranty of 014MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015General Public License for more details. 016 017You should have received a copy of the GNU General Public License 018along with GNU Classpath; see the file COPYING. If not, write to the 019Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02002110-1301 USA. 021 022Linking this library statically or dynamically with other modules is 023making a combined work based on this library. Thus, the terms and 024conditions of the GNU General Public License cover the whole 025combination. 026 027As a special exception, the copyright holders of this library give you 028permission to link this library with independent modules to produce an 029executable, regardless of the license terms of these independent 030modules, and to copy and distribute the resulting executable under 031terms of your choice, provided that you also meet, for each linked 032independent module, the terms and conditions of the license of that 033module. An independent module is a module which is not derived from 034or based on this library. If you modify this library, you may extend 035this exception to your version of the library, but you are not 036obligated to do so. If you do not wish to do so, delete this 037exception statement from your version. */ 038 039 040package java.lang; 041 042 043/** 044 * Object is the ultimate superclass of every class 045 * (excepting interfaces). When you define a class that 046 * does not extend any other class, it implicitly extends 047 * java.lang.Object. Also, an anonymous class based on 048 * an interface will extend Object. 049 * 050 * <p>It provides general-purpose methods that every single 051 * Object, regardless of race, sex or creed, implements. 052 * All of the public methods may be invoked on arrays or 053 * interfaces. The protected methods <code>clone</code> 054 * and <code>finalize</code> are not accessible on arrays 055 * or interfaces, but all array types have a public version 056 * of <code>clone</code> which is accessible. 057 * 058 * @author John Keiser 059 * @author Eric Blake (ebb9@email.byu.edu) 060 * @author Tom Tromey (tromey@cygnus.com) 061 */ 062public class Object 063{ 064 // WARNING: Object is a CORE class in the bootstrap cycle. See the comments 065 // in vm/reference/java/lang/Runtime for implications of this fact. 066 067 // Many JVMs do not allow for static initializers in this class, 068 // hence we do not use them in the default implementation. 069 070 // Some VM's rely on the order that these methods appear when laying 071 // out their internal structure. Therefore, do not haphazardly 072 // rearrange these methods. 073 074 /** 075 * The basic constructor. Object is special, because it has no 076 * superclass, so there is no call to super(). 077 * 078 * @throws OutOfMemoryError Technically, this constructor never 079 * throws an OutOfMemoryError, because the memory has 080 * already been allocated by this point. But as all 081 * instance creation expressions eventually trace back 082 * to this constructor, and creating an object allocates 083 * memory, we list that possibility here. 084 */ 085 // This could be implicit, but then javadoc would not document it! 086 public Object() {} 087 088 /** 089 * Determine whether this Object is semantically equal 090 * to another Object. 091 * 092 * <p>There are some fairly strict requirements on this 093 * method which subclasses must follow:<br> 094 * <ul> 095 * <li>It must be transitive. If <code>a.equals(b)</code> and 096 * <code>b.equals(c)</code>, then <code>a.equals(c)</code> 097 * must be true as well.</li> 098 * <li>It must be symmetric. <code>a.equals(b)</code> and 099 * <code>b.equals(a)</code> must have the same value.</li> 100 * <li>It must be reflexive. <code>a.equals(a)</code> must 101 * always be true.</li> 102 * <li>It must be consistent. Whichever value a.equals(b) 103 * returns on the first invocation must be the value 104 * returned on all later invocations.</li> 105 * <li><code>a.equals(null)</code> must be false.</li> 106 * <li>It must be consistent with hashCode(). That is, 107 * <code>a.equals(b)</code> must imply 108 * <code>a.hashCode() == b.hashCode()</code>. 109 * The reverse is not true; two objects that are not 110 * equal may have the same hashcode, but that has 111 * the potential to harm hashing performance.</li> 112 * </ul> 113 * 114 * <p>This is typically overridden to throw a {@link ClassCastException} 115 * if the argument is not comparable to the class performing 116 * the comparison, but that is not a requirement. It is legal 117 * for <code>a.equals(b)</code> to be true even though 118 * <code>a.getClass() != b.getClass()</code>. Also, it 119 * is typical to never cause a {@link NullPointerException}. 120 * 121 * <p>In general, the Collections API ({@link java.util}) use the 122 * <code>equals</code> method rather than the <code>==</code> 123 * operator to compare objects. However, {@link java.util.IdentityHashMap} 124 * is an exception to this rule, for its own good reasons. 125 * 126 * <p>The default implementation returns <code>this == o</code>. 127 * 128 * @param obj the Object to compare to 129 * @return whether this Object is semantically equal to another 130 * @see #hashCode() 131 */ 132 public boolean equals(Object obj) 133 { 134 return this == obj; 135 } 136 137 /** 138 * Get a value that represents this Object, as uniquely as 139 * possible within the confines of an int. 140 * 141 * <p>There are some requirements on this method which 142 * subclasses must follow:<br> 143 * 144 * <ul> 145 * <li>Semantic equality implies identical hashcodes. In other 146 * words, if <code>a.equals(b)</code> is true, then 147 * <code>a.hashCode() == b.hashCode()</code> must be as well. 148 * However, the reverse is not necessarily true, and two 149 * objects may have the same hashcode without being equal.</li> 150 * <li>It must be consistent. Whichever value o.hashCode() 151 * returns on the first invocation must be the value 152 * returned on all later invocations as long as the object 153 * exists. Notice, however, that the result of hashCode may 154 * change between separate executions of a Virtual Machine, 155 * because it is not invoked on the same object.</li> 156 * </ul> 157 * 158 * <p>Notice that since <code>hashCode</code> is used in 159 * {@link java.util.Hashtable} and other hashing classes, 160 * a poor implementation will degrade the performance of hashing 161 * (so don't blindly implement it as returning a constant!). Also, 162 * if calculating the hash is time-consuming, a class may consider 163 * caching the results. 164 * 165 * <p>The default implementation returns 166 * <code>System.identityHashCode(this)</code> 167 * 168 * @return the hash code for this Object 169 * @see #equals(Object) 170 * @see System#identityHashCode(Object) 171 */ 172 public int hashCode() 173 { 174 return System.identityHashCode(this); 175 } 176 177 /** 178 * Convert this Object to a human-readable String. 179 * There are no limits placed on how long this String 180 * should be or what it should contain. We suggest you 181 * make it as intuitive as possible to be able to place 182 * it into {@link java.io.PrintStream#println() System.out.println()} 183 * and such. 184 * 185 * <p>It is typical, but not required, to ensure that this method 186 * never completes abruptly with a {@link RuntimeException}. 187 * 188 * <p>This method will be called when performing string 189 * concatenation with this object. If the result is 190 * <code>null</code>, string concatenation will instead 191 * use <code>"null"</code>. 192 * 193 * <p>The default implementation returns 194 * <code>getClass().getName() + "@" + 195 * Integer.toHexString(hashCode())</code>. 196 * 197 * @return the String representing this Object, which may be null 198 * @throws OutOfMemoryError The default implementation creates a new 199 * String object, therefore it must allocate memory 200 * @see #getClass() 201 * @see #hashCode() 202 * @see Class#getName() 203 * @see Integer#toHexString(int) 204 */ 205 public String toString() 206 { 207 return getClass().getName() + '@' + Integer.toHexString(hashCode()); 208 } 209 210 /** 211 * Called on an object by the Virtual Machine at most once, 212 * at some point after the Object is determined unreachable 213 * but before it is destroyed. You would think that this 214 * means it eventually is called on every Object, but this is 215 * not necessarily the case. If execution terminates 216 * abnormally, garbage collection does not always happen. 217 * Thus you cannot rely on this method to always work. 218 * For finer control over garbage collection, use references 219 * from the {@link java.lang.ref} package. 220 * 221 * <p>Virtual Machines are free to not call this method if 222 * they can determine that it does nothing important; for 223 * example, if your class extends Object and overrides 224 * finalize to do simply <code>super.finalize()</code>. 225 * 226 * <p>finalize() will be called by a {@link Thread} that has no 227 * locks on any Objects, and may be called concurrently. 228 * There are no guarantees on the order in which multiple 229 * objects are finalized. This means that finalize() is 230 * usually unsuited for performing actions that must be 231 * thread-safe, and that your implementation must be 232 * use defensive programming if it is to always work. 233 * 234 * <p>If an Exception is thrown from finalize() during garbage 235 * collection, it will be patently ignored and the Object will 236 * still be destroyed. 237 * 238 * <p>It is allowed, although not typical, for user code to call 239 * finalize() directly. User invocation does not affect whether 240 * automatic invocation will occur. It is also permitted, 241 * although not recommended, for a finalize() method to "revive" 242 * an object by making it reachable from normal code again. 243 * 244 * <p>Unlike constructors, finalize() does not get called 245 * for an object's superclass unless the implementation 246 * specifically calls <code>super.finalize()</code>. 247 * 248 * <p>The default implementation does nothing. 249 * 250 * @throws Throwable permits a subclass to throw anything in an 251 * overridden version; but the default throws nothing 252 * @see System#gc() 253 * @see System#runFinalizersOnExit(boolean) 254 * @see java.lang.ref 255 */ 256 protected void finalize() throws Throwable 257 { 258 } 259 260 /** 261 * This method may be called to create a new copy of the 262 * Object. The typical behavior is as follows:<br> 263 * <ul> 264 * <li><code>o == o.clone()</code> is false</li> 265 * <li><code>o.getClass() == o.clone().getClass()</code> 266 * is true</li> 267 * <li><code>o.equals(o)</code> is true</li> 268 * </ul> 269 * 270 * <p>However, these are not strict requirements, and may 271 * be violated if necessary. Of the three requirements, the 272 * last is the most commonly violated, particularly if the 273 * subclass does not override {@link #equals(Object)}. 274 * 275 * <p>If the Object you call clone() on does not implement 276 * {@link Cloneable} (which is a placeholder interface), then 277 * a CloneNotSupportedException is thrown. Notice that 278 * Object does not implement Cloneable; this method exists 279 * as a convenience for subclasses that do. 280 * 281 * <p>Object's implementation of clone allocates space for the 282 * new Object using the correct class, without calling any 283 * constructors, and then fills in all of the new field values 284 * with the old field values. Thus, it is a shallow copy. 285 * However, subclasses are permitted to make a deep copy. 286 * 287 * <p>All array types implement Cloneable, and override 288 * this method as follows (it should never fail):<br> 289 * <pre> 290 * public Object clone() 291 * { 292 * try 293 * { 294 * super.clone(); 295 * } 296 * catch (CloneNotSupportedException e) 297 * { 298 * throw new InternalError(e.getMessage()); 299 * } 300 * } 301 * </pre> 302 * 303 * @return a copy of the Object 304 * @throws CloneNotSupportedException If this Object does not 305 * implement Cloneable 306 * @throws OutOfMemoryError Since cloning involves memory allocation, 307 * even though it may bypass constructors, you might run 308 * out of memory 309 * @see Cloneable 310 */ 311 protected Object clone() throws CloneNotSupportedException 312 { 313 if (this instanceof Cloneable) 314 return VMObject.clone((Cloneable) this); 315 throw new CloneNotSupportedException("Object not cloneable"); 316 } 317 318 /** 319 * Returns the runtime {@link Class} of this Object. 320 * 321 * <p>The class object can also be obtained without a runtime 322 * instance by using the class literal, as in: 323 * <code>Foo.class</code>. Notice that the class literal 324 * also works on primitive types, making it useful for 325 * reflection purposes. 326 * 327 * @return the class of this Object 328 */ 329 public final Class<? extends Object> getClass() 330 { 331 return VMObject.getClass(this); 332 } 333 334 /** 335 * Wakes up one of the {@link Thread}s that has called 336 * <code>wait</code> on this Object. Only the owner 337 * of a lock on this Object may call this method. This lock 338 * is obtained by a <code>synchronized</code> method or statement. 339 * 340 * <p>The Thread to wake up is chosen arbitrarily. The 341 * awakened thread is not guaranteed to be the next thread 342 * to actually obtain the lock on this object. 343 * 344 * <p>This thread still holds a lock on the object, so it is 345 * typical to release the lock by exiting the synchronized 346 * code, calling wait(), or calling {@link Thread#sleep(long)}, so 347 * that the newly awakened thread can actually resume. The 348 * awakened thread will most likely be awakened with an 349 * {@link InterruptedException}, but that is not guaranteed. 350 * 351 * @throws IllegalMonitorStateException if this Thread 352 * does not own the lock on the Object 353 * @see #notifyAll() 354 * @see #wait() 355 * @see #wait(long) 356 * @see #wait(long, int) 357 * @see Thread 358 */ 359 public final void notify() throws IllegalMonitorStateException 360 { 361 VMObject.notify(this); 362 } 363 364 /** 365 * Wakes up all of the {@link Thread}s that have called 366 * <code>wait</code> on this Object. Only the owner 367 * of a lock on this Object may call this method. This lock 368 * is obtained by a <code>synchronized</code> method or statement. 369 * 370 * <p>There are no guarantees as to which thread will next 371 * obtain the lock on the object. 372 * 373 * <p>This thread still holds a lock on the object, so it is 374 * typical to release the lock by exiting the synchronized 375 * code, calling wait(), or calling {@link Thread#sleep(long)}, so 376 * that one of the newly awakened threads can actually resume. 377 * The resuming thread will most likely be awakened with an 378 * {@link InterruptedException}, but that is not guaranteed. 379 * 380 * @throws IllegalMonitorStateException if this Thread 381 * does not own the lock on the Object 382 * @see #notify() 383 * @see #wait() 384 * @see #wait(long) 385 * @see #wait(long, int) 386 * @see Thread 387 */ 388 public final void notifyAll() throws IllegalMonitorStateException 389 { 390 VMObject.notifyAll(this); 391 } 392 393 /** 394 * Waits indefinitely for notify() or notifyAll() to be 395 * called on the Object in question. Implementation is 396 * identical to wait(0). 397 * 398 * <p>The Thread that calls wait must have a lock on this Object, 399 * obtained by a <code>synchronized</code> method or statement. 400 * After calling wait, the thread loses the lock on this 401 * object until the method completes (abruptly or normally), 402 * at which time it regains the lock. All locks held on 403 * other objects remain in force, even though the thread is 404 * inactive. Therefore, caution must be used to avoid deadlock. 405 * 406 * <p>While it is typical that this method will complete abruptly 407 * with an {@link InterruptedException}, it is not guaranteed. So, 408 * it is typical to call wait inside an infinite loop:<br> 409 * 410 * <pre> 411 * try 412 * { 413 * while (true) 414 * lock.wait(); 415 * } 416 * catch (InterruptedException e) 417 * { 418 * } 419 * </pre> 420 * 421 * @throws IllegalMonitorStateException if this Thread 422 * does not own a lock on this Object 423 * @throws InterruptedException if some other Thread 424 * interrupts this Thread 425 * @see #notify() 426 * @see #notifyAll() 427 * @see #wait(long) 428 * @see #wait(long, int) 429 * @see Thread 430 */ 431 public final void wait() 432 throws IllegalMonitorStateException, InterruptedException 433 { 434 VMObject.wait(this, 0, 0); 435 } 436 437 /** 438 * Waits a specified amount of time (or indefinitely if 439 * the time specified is 0) for someone to call notify() 440 * or notifyAll() on this Object, waking up this Thread. 441 * 442 * <p>The Thread that calls wait must have a lock on this Object, 443 * obtained by a <code>synchronized</code> method or statement. 444 * After calling wait, the thread loses the lock on this 445 * object until the method completes (abruptly or normally), 446 * at which time it regains the lock. All locks held on 447 * other objects remain in force, even though the thread is 448 * inactive. Therefore, caution must be used to avoid deadlock. 449 * 450 * <p>Usually, this call will complete normally if the time 451 * expires, or abruptly with {@link InterruptedException} 452 * if another thread called notify, but neither result 453 * is guaranteed. 454 * 455 * <p>The waiting period is only *roughly* the amount of time 456 * you requested. It cannot be exact because of the overhead 457 * of the call itself. Most Virtual Machiness treat the 458 * argument as a lower limit on the time spent waiting, but 459 * even that is not guaranteed. Besides, some other thread 460 * may hold the lock on the object when the time expires, so 461 * the current thread may still have to wait to reobtain the 462 * lock. 463 * 464 * @param ms the minimum number of milliseconds to wait (1000 465 * milliseconds = 1 second), or 0 for an indefinite wait 466 * @throws IllegalArgumentException if ms < 0 467 * @throws IllegalMonitorStateException if this Thread 468 * does not own a lock on this Object 469 * @throws InterruptedException if some other Thread 470 * interrupts this Thread 471 * @see #notify() 472 * @see #notifyAll() 473 * @see #wait() 474 * @see #wait(long, int) 475 * @see Thread 476 */ 477 public final void wait(long ms) 478 throws IllegalMonitorStateException, InterruptedException 479 { 480 wait(ms, 0); 481 } 482 483 /** 484 * Waits a specified amount of time (or indefinitely if 485 * the time specified is 0) for someone to call notify() 486 * or notifyAll() on this Object, waking up this Thread. 487 * 488 * <p>The Thread that calls wait must have a lock on this Object, 489 * obtained by a <code>synchronized</code> method or statement. 490 * After calling wait, the thread loses the lock on this 491 * object until the method completes (abruptly or normally), 492 * at which time it regains the lock. All locks held on 493 * other objects remain in force, even though the thread is 494 * inactive. Therefore, caution must be used to avoid deadlock. 495 * 496 * <p>Usually, this call will complete normally if the time 497 * expires, or abruptly with {@link InterruptedException} 498 * if another thread called notify, but neither result 499 * is guaranteed. 500 * 501 * <p>The waiting period is nowhere near as precise as 502 * nanoseconds; considering that even wait(int) is inaccurate, 503 * how much can you expect? But on supporting 504 * implementations, this offers somewhat more granularity 505 * than milliseconds. 506 * 507 * @param ms the number of milliseconds to wait (1,000 508 * milliseconds = 1 second) 509 * @param ns the number of nanoseconds to wait over and 510 * above ms (1,000,000 nanoseconds = 1 millisecond) 511 * @throws IllegalArgumentException if ms < 0 or ns is not 512 * in the range 0 to 999,999 513 * @throws IllegalMonitorStateException if this Thread 514 * does not own a lock on this Object 515 * @throws InterruptedException if some other Thread 516 * interrupts this Thread 517 * @see #notify() 518 * @see #notifyAll() 519 * @see #wait() 520 * @see #wait(long) 521 * @see Thread 522 */ 523 public final void wait(long ms, int ns) 524 throws IllegalMonitorStateException, InterruptedException 525 { 526 if (ms < 0 || ns < 0 || ns > 999999) 527 throw new IllegalArgumentException("argument out of range"); 528 VMObject.wait(this, ms, ns); 529 } 530} // class Object