zoukankan      html  css  js  c++  java
  • 重拾Object--(一)初识

      Java中的Object类有着特殊的意义,他是所有其它类的父类,查看Object类的源代码,可以发现代码不多,逻辑也很简单。

      Java所有类的源代码我们都可以在JDK的文件中查看,在JDK下会有一个名为src.zip的压缩包,里面就是所有类的源代码,当然这里所有的文件都是.java格式的。为了方便查看,我们可以找到JDK中jre/lib下的rt.jar文件,这里面也有源代码,只不过是以.class文件形式存在,我们可以使用反编译软件jd-gui(http://jd.benow.ca可下载)查看,会比直接查看.java文件方便不少。当然看源代码之前先看看API,也能事半功倍。

      以下是jdk1.7.0_40下Object类的源代码

     1 public class Object
     2 {
     3   private static native void registerNatives();
     4 
     5   public final native Class<?> getClass();
     6 
     7   public native int hashCode();
     8 
     9   public boolean equals(Object paramObject)
    10   {
    11     return this == paramObject;
    12   }
    13 
    14   protected native Object clone()
    15     throws CloneNotSupportedException;
    16 
    17   public String toString()
    18   {
    19     return getClass().getName() + "@" + Integer.toHexString(hashCode());
    20   }
    21 
    22   public final native void notify();
    23 
    24   public final native void notifyAll();
    25 
    26   public final native void wait(long paramLong)
    27     throws InterruptedException;
    28 
    29   public final void wait(long paramLong, int paramInt)
    30     throws InterruptedException
    31   {
    32     if (paramLong < 0L) {
    33       throw new IllegalArgumentException("timeout value is negative");
    34     }
    35 
    36     if ((paramInt < 0) || (paramInt > 999999)) {
    37       throw new IllegalArgumentException("nanosecond timeout value out of range");
    38     }
    39 
    40     if ((paramInt >= 500000) || ((paramInt != 0) && (paramLong == 0L))) {
    41       paramLong += 1L;
    42     }
    43 
    44     wait(paramLong);
    45   }
    46 
    47   public final void wait()
    48     throws InterruptedException
    49   {
    50     wait(0L);
    51   }
    52 
    53   protected void finalize()
    54     throws Throwable
    55   {
    56   }
    57 
    58   static
    59   {
    60     registerNatives();
    61   }
    62 } 

       

      在Object类中,我们经常会打交道方法主要是toString()、equals(Object paramObject)和hashCode()三个方法。

      其他的方法中,notify()、notifyAll()和wait(long paramLong)都是本地方法,和线程相关。还有两个重载的方法wait()和wait(long paramLong, int paramInt)也都和线程相关。

       finalize()是GC相关的方法。

  • 相关阅读:
    全内存的redis用习惯了?那能突破内存限制类redis产品ssdb呢?
    multi_compile
    MVVM
    Gamma Correction
    Animator状态快速切换问题
    SVN 不显示状态图标--解决方法
    Rendering with Replaced Shaders
    MySql权威指南
    Effective C++
    帧同步
  • 原文地址:https://www.cnblogs.com/ShanHeDiao/p/5552804.html
Copyright © 2011-2022 走看看