文档章节

Java 复习 —— Object

learn_more
 learn_more
发布于 2015/08/07 13:42
字数 714
阅读 92
收藏 3

Object有9个方法需要了解;

分别是如下的:

    1)public final native Class<?> getClass();

    2)public native int hashCode();

    3)public boolean equals(Object obj) {return (this == obj);}

    4)protected native Object clone() throws CloneNotSupportedException;

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

    6)public final native void notify();

    7)public final native void notifyAll();

    8)protected void finalize() throws Throwable { }

    9)public final native void wait(long timeout) throws InterruptedException;

    // wait方法重载有三个,但是真正意义上只有一个有用,有用这个也都是内部实现native

    public final void wait(long timeout, int nanos) throws InterruptedException {

        if (timeout < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (nanos < 0 || nanos > 999999) {
            throw new IllegalArgumentException(
                "nanosecond timeout value out of range");
        }

    if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
        timeout++;
    }

    wait(timeout);
    }


Object 9个方法的具体介绍;

1、public final native Class<?> getClass();

获取对象的类全称,也就是:class package.class

2、public native int hashCode();

返回的是当前对象的内存地址。无论何时,对同一个对象调用hashCode()都应该生成同样的值,不管这个对象是否发生过内部改变。

3、public boolean equals(Object obj) {return (this == obj);}

通过内存地址判断对象是否相等。

4、protected native Object clone() throws CloneNotSupportedException;

对象克隆,这个是深度克隆时的必须实现的方法,同时一般都会调用object的clone方法;

5、public String toString() {  return getClass().getName() + "@" + Integer.toHexString(hashCode());   }

返回类名+@+地址的16进制数


6、public final native void notify();

线程唤醒

7、 public final native void notifyAll();

线程唤醒

8、protected void finalize() throws Throwable { }

垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法,一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们要实现特殊的功能。

9、public final native void wait(long timeout) throws InterruptedException;

线程阻塞,等待一定时间

10、关于equals与hashCode

一般只要重写二者之一,你们另一个也有必要要重写,但是不是强求的。原因是equals方法使用的是内存地址比较,同样hashCode返回的也是内存地址,那么如果采用equals相等,然而hashCode相等的确是说不通的,应该是equals为true,那么hashCode的值一定相同;反之不成立。另外,使用方面一个很大的因素就是Map的key,因为我们知道Map的key代码:

    public V put(K key, V value) {
        if (key == null)
            return putForNullKey(value);
        int hash = hash(key.hashCode());
        int i = indexFor(hash, table.length);
        for (Entry<K,V> e = table[i]; e != null; e = e.next) {
            Object k;

                V oldValue = e.value;
                e.value = value;
                e.recordAccess(this);
                return oldValue;
            }
        }

        modCount++;
        addEntry(hash, key, value, i);
        return null;
    }

首先比较的是HashCode,其次比较的才是equals,如果你只是对equals重写,没有重写hashCode,应该是不会拿到预期后果的。


© 著作权归作者所有

learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
加载中

评论(0)

【原创】Java并发编程系列13 | LookSupport

        本文为何适原创并发编程系列第 13 篇,文末有本系列文章汇总。   java.util.concurrent 中源码频繁使用的 LockSupport 来阻塞线程和唤醒线程,如 AQS 的底层实现用到 LockSu...

java进阶架构师
02/18
0
0
疫情严重却被要求"自愿"上班!国内互联网公司上班时间一览

     作者 | 隔壁老王   来源 | 直评   上海、杭州、广东等陆续发布了延迟至2月9号24时之后上班的通知,遂整理了国内互联网公司的上班时间,有的非但不延长上班时间,甚至提前上班!...

java进阶架构师
01/29
0
0
gif | 99%的程序员都笑了!程序员的真实工作状态

  今天周五,只想摸鱼   大家偷个懒,笑一笑   维护老的代码      搞定来一个BUG      Google想干嘛?      需求不明确      前端VS后端      客户描述      ...

java进阶架构师
2019/12/06
0
0
【原创】Java并发编程系列11 | 线程调度

  20大进阶架构专题每日送达       Java并发编程   本文为何适原创并发编程系列第 11 篇,前面几篇没看过的,可以在文末找到前几篇的跳转链接。本文介绍线程调度的如下几个操作:  ...

java进阶架构师
01/07
0
0
java 私塾随堂笔记——Hibernate(上)

java 私塾随堂笔记——Hibernate(上) 第一章 Hibernate介绍 一.是什么: Hibernate是轻量级的ORM框架。 1.ORM(ORMapping) Object——Mapping——→Relation DB Object←——JDBC———Rel...

luodis
2011/03/21
451
0

没有更多内容

加载失败,请刷新页面

加载更多

Java基本程序设计结构

简述 Java起源于Sun公司为机顶盒开发的一款开发语言“Oak”,由于该名称被抢注更名为“Java”。Java是基于面向对象的开发语言,其特性在于“一次编译,到处运行”,这实现依赖于JVM。 Java程...

Yongy
16分钟前
29
0
【jquery仿dataList——性能优化】模板预编译思想提高性能10倍以上!!!

那撒,IE和google性能不减反增,求高手解释....... 前言 呵呵,当然,什么预编译什么性能提高5倍以上基本上市坑爹的,这里就是为了吸引阅读量,哈哈。 上当的大哥主动顶下哇??? 正题 之前...

shzwork
20分钟前
57
0
用博客系统开发作文网站探索MYSQL数据库性能和缓存技巧[图]

用博客系统开发作文网站探索MYSQL数据库性能和缓存技巧[图] 最近忙着建站,感觉现在建站是越来越难了,但还是用ZBLOG系统建了一个作文网站,叫做求索作文网,但是发现博客系统的缺点也还是有...

原创小博客
22分钟前
25
0
LinearLayout不在ScrollView内扩展

我在ScrollView中有一个LinearLayout ,它有android:layout_height="fill_parent" ,但它没有扩展到ScrollView的整个高度。 我的布局看起来像: level layout layout_width layout_......

技术盛宴
41分钟前
30
0
docker上启动nginx,并配置修改nginx的配置文件

1.使用docker 下载nginx 镜像 docker pull nginx 2.启动nginx docker run --name nginx -p 80:80 -d nginx 这样就简单的把nginx启动了,但是我们想要改变配置文件nginx.conf ,进入容器,命令...

yuxw
45分钟前
45
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部