查看源码——Object类、Class类

2018-11-26  本文已影响0人  取名废同学

一·、Object作为所有Java类的根类。

方法有:registerNatives()、getClass()、hashCode()、equals()、clone()、toString()、notify()、notifyAll()、wait()、finalize()、

package java.lang;

public class Object
{
  //一个本地方法,是用C/C++在DLL中实现,通过JNI调用
  private static native void registerNatives();
  
    //返回此Object的运行时类
  public final native Class<?> getClass();
  
   /*求哈希码:
    hashCode的常规协定是:
    1、java应用执行期间,对同一对象多次调用hashCode()返回相同整数。
     从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
    2.通过equals(object)判断两个对象是相等,则两个对象中每个对象调用hashCode()返回相同整数结果。
    3.通过equals(java.lang.Object)判断两个对象不相等,则两个对象中每个对象调用hashCode()不一定返回相同整数结果。
但不相等的对象生成不同整数结果可以提高哈希表的性能。
    */
  public native int hashCode();
  
//比较对象的内存地址
  public boolean equals(Object paramObject)
  {
    return this == paramObject;
  }
  
   //本地clone方法,用于对象的复制
  protected native Object clone()
    throws CloneNotSupportedException;

 //返回对象的字符串表示:全路径名 @ 哈希值的16进制格式
  public String toString()
  {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
    /*getClass().getName():获取字节码文件的对应全路径名,如java.lang.Object;
      Integer.toHexString(hashCode()):将哈希值转成16进制数格式的字符串
   */
  }

   //唤醒在此对象监视器上等待的单个线程  
  public final native void notify();
  
//唤醒在此对象监视器上等待的所有线程
  public final native void notifyAll();
  
/*在其他线程调用此对象的notify()方法或notifyAll()方法,或超过指定时间量前,导致当前线程等待。*/
  public final native void wait(long paramLong)
    throws InterruptedException;
  
  public final void wait(long paramLong, int paramInt)
    throws InterruptedException
  {
    if (paramLong < 0L) {
      throw new IllegalArgumentException("timeout value is negative");
    }
    if ((paramInt < 0) || (paramInt > 999999)) {
      throw new IllegalArgumentException("nanosecond timeout value out of range");
    }
    if (paramInt > 0) {
      paramLong += 1L;
    }
    wait(paramLong);
  }
  
//在其他线程调用此对象的notify()方法或notifyAll()方法前,导致当前线程等待。
  public final void wait()
    throws InterruptedException
  {
    wait(0L);
  }
  
//对象在垃圾回收前做最后的清理工作
  protected void finalize()   throws Throwable {}
  
  static {}
}

/* Location:           D:\Java\jre 1.8.0_171\lib\rt.jar
 * Qualified Name:     java.lang.Object
 * Java Class Version: 8 (52.0)
 * JD-Core Version:    0.7.1
 */

Object类在java.lang包下,使用java.lang包下的所有类,都不需要手动导入。
Java导包方法:
1、单类型导入:import java.util.Date
2、按需类型导入:import java.util.*;

JDK源码
(1)List、Map、Set实现类的源代码
(2)ReentrantLock、AQS的源代码
(3)AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的
(4)线程池的实现原理
(5)Object类中的方法以及每个方法的作用
(6)String源码
(7)常用的jdk工具:(jdk是java的开发工具包)
java.lang:系统的基础类,如String、Math、Integer、System和Thread,提供常用功能。
java.io:所有输入输出有关的类,比如文件操作等
java.net:与网络有关的类,如URL、URLConnection等
java.util:系统辅助类,如集合类Collection、List、Map等
java.sql:数据库操作的类,如Connection、Statement、ResultSet

二、Class类:
用来表示运行时类或接口的信息。
1、.class属性:类的规范化名称
2、getClass()方法:通过这个对象的引用获取对象所属的类型
3、forName(String className):显式加载指定类,并返回class对象
【ClassLoader的loadClass()也是】

上一篇下一篇

猜你喜欢

热点阅读