美文网首页
JDK源码阅读笔记-java.lang

JDK源码阅读笔记-java.lang

作者: im青禾 | 来源:发表于2019-03-29 14:48 被阅读0次

    java.lang.Object

    • Structure


      object.png
    • intro
      Object是类层次结构的根。每个类都有一个超类Object。所有对象,包括数组,实现该类的方法。
    private static native void registerNatives();
    
    native关键字

    native是与C++联合开发的时候用的!使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。 这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。总而言之:

    1. native 是用做java 和其他语言(如c++)进行协作时使用的,也就是native 后的函数的实现不是用java写的。
    2. 既然都不是java,那就别管它的源代码了,我们只需要知道这个方法已经被实现即可。
    3. native的意思就是通知操作系统, 这个函数你必须给我实现,因为我要使用。 所以native关键字的函数都是操作系统实现的, java只能调用。
    4. java是跨平台的语言,既然是跨了平台,所付出的代价就是牺牲一些对底层的控制,而java要实现对底层的控制,就需要一些其他语言的帮助,这个就是native的作用了
    protected native Object clone() throws CloneNotSupportedException;
    
        public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
    
        public static String toHexString(int i) {
            return toUnsignedString0(i, 4);
        }
    
        private static String toUnsignedString0(int val, int shift) {
            // assert shift > 0 && shift <=5 : "Illegal shift value";
            int mag = Integer.SIZE - Integer.numberOfLeadingZeros(val);
            int chars = Math.max(((mag + (shift - 1)) / shift), 1);
            char[] buf = new char[chars];
    
            formatUnsignedInt(val, shift, buf, 0, chars);
    
            // Use special constructor which takes over "buf".
            return new String(buf, true);
        }
    
    >>>

    计算机中,负数是以补码的形式存储的。
    1、当移位的数是正数的时候,>> 和>>>效果都是一样的;
    2、当移位的数是负数的时候,>>将二进制高位用1补上,而>>>将二进制高位用0补上。

    原码、反码、 补码

    相关文章

      网友评论

          本文标题:JDK源码阅读笔记-java.lang

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