• 重拾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相关的方法。

  • 相关阅读:
    XGBoost
    达梦数据库 日期格式转换
    当gitlab的数据库坏了,或者其他的组件坏了,修复教程。
    Hbase 协处理器之将数据保存到es (二级索引)
    分词与词性标注——常用分词工具
    路一直都在...
    CentOS删除桌面环境
    nginx+redis+tomcat session绑定
    Linux服务器挂载windows共享文件夹和nas存储
    centOS8.4图形界面火狐浏览器(firefox)报错问题:<toolbarbutton id="UITourTooltipClose" class="closeicon" 的解决办法
  • 原文地址:https://www.cnblogs.com/ShanHeDiao/p/5552804.html
Copyright © 2020-2023  润新知