码迷,mamicode.com
首页 > 其他好文 > 详细

0001_Object

时间:2015-05-14 23:40:08      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

Object类的Outline图:

技术分享

通过eclipse查看源码可以发现,在Object类当中基本上都是native方法(本地方法),对于它们的实现就不作了解了

getClass: 获得当前类的Class对象

hashCode:获取当前类地址的hash码

equals:比较两个对象是否相等,对于Object比较的为地址

clone:克隆对象

notify:唤醒睡眠的线程

notifyAll:唤醒睡眠的所有线程

wait:进入睡眠状态,并放弃cpu资源,等待唤醒

finalize:调用垃圾回收器

 

下面主要是追踪一下toString方法的实现:(输出当前类名 + @ + 当前类所在地址对应hash码的十六进制数)

1  public String toString() {
2         return getClass().getName() + "@" + Integer.toHexString(hashCode());
3  }

 

下面是toHexString的实现与相关代码:

public static String toHexString(int i) {
        return toUnsignedString(i, 4);
}

private static String toUnsignedString(int i, int shift) {
        char[] buf = new char[32];
        int charPos = 32;
     //radix = 2^shift,也就是对应于要转换的进制数,对于这个可以查看Integer类中的toBinaryString方法,会发现对应的shift为1,也就是二进制
int radix = 1 << shift;
     //用于获得i后mask位所对应的十进制数
int mask = radix - 1; do {
       //把i后mask位所对应的进制字符保存在buf数组中 buf[
--charPos] = digits[i & mask];
       //让i去掉已经转化的位数,最终实现把i转换成相应的进制数 i
>>>= shift; } while (i != 0);      //把转换后的字符所在的数组转换成String输出,在底层实际是通过System类的arraycopy方法拷贝来实现去掉buf前面的空格的 return new String(buf, charPos, (32 - charPos)); } final static char[] digits = { ‘0‘ , ‘1‘ , ‘2‘ , ‘3‘ , ‘4‘ , ‘5‘ , ‘6‘ , ‘7‘ , ‘8‘ , ‘9‘ , ‘a‘ , ‘b‘ , ‘c‘ , ‘d‘ , ‘e‘ , ‘f‘ , ‘g‘ , ‘h‘ , ‘i‘ , ‘j‘ , ‘k‘ , ‘l‘ , ‘m‘ , ‘n‘ , ‘o‘ , ‘p‘ , ‘q‘ , ‘r‘ , ‘s‘ , ‘t‘ , ‘u‘ , ‘v‘ , ‘w‘ , ‘x‘ , ‘y‘ , ‘z‘ };

 测试demo:

package com.topview.test;

public class IntegerTest {

    private static String toUnsignedString(int i, int shift) {
        char[] buf = new char[32];
        int charPos = 32;
        int radix = 1 << shift;
        int mask = radix - 1;
        do {
            buf[--charPos] = digits[i & mask];
            i >>>= shift;
        } while (i != 0);

        return new String(buf, charPos, (32 - charPos));
    }

    final static char[] digits = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘,
            ‘9‘, ‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘, ‘l‘,
            ‘m‘, ‘n‘, ‘o‘, ‘p‘, ‘q‘, ‘r‘, ‘s‘, ‘t‘, ‘u‘, ‘v‘, ‘w‘, ‘x‘, ‘y‘,
            ‘z‘ };

    public static void main(String[] args) {
        
        System.out.println(toUnsignedString(12, 4));
        
    }
    
}

 

0001_Object

标签:

原文地址:http://www.cnblogs.com/D-Key/p/4504736.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!