美文网首页
查看源码——Object类、Class类

查看源码——Object类、Class类

作者: 取名废同学 | 来源:发表于2018-11-26 20:42 被阅读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()也是】

    相关文章

      网友评论

          本文标题:查看源码——Object类、Class类

          本文链接:https://www.haomeiwen.com/subject/ykjiqqtx.html