Marvel-Site Marvel-Site
首页
  • Java

    • Java基础
    • Java进阶
    • Java容器
    • Java并发编程
    • Java虚拟机
  • 计算机基础

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • Linux
  • 框架|中间件

    • Spring
    • MySQL
    • Redis
    • MQ
    • Zookeeper
    • Git
  • 架构

    • 分布式
    • 高并发
    • 高可用
    • 架构
  • 框架

    • React
    • 其他
  • 实用工具
  • 安装配置

    • Linux
    • Windows
    • Mac
  • 开发工具

    • IDEA
    • VsCode
  • 关于
  • 收藏
  • 草稿
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)

Marvel

吾必当乘此羽葆盖车
首页
  • Java

    • Java基础
    • Java进阶
    • Java容器
    • Java并发编程
    • Java虚拟机
  • 计算机基础

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • Linux
  • 框架|中间件

    • Spring
    • MySQL
    • Redis
    • MQ
    • Zookeeper
    • Git
  • 架构

    • 分布式
    • 高并发
    • 高可用
    • 架构
  • 框架

    • React
    • 其他
  • 实用工具
  • 安装配置

    • Linux
    • Windows
    • Mac
  • 开发工具

    • IDEA
    • VsCode
  • 关于
  • 收藏
  • 草稿
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)
  • Java

    • Java基础

    • Java进阶

      • 类的初始化与对象的初始化
      • Object类
        • 介绍
        • 类中的方法
        • 使用hashcode的原因
      • 深度理解字符串String
      • Integer创建对象分析
      • 从原理上分析 i = i++ 与 i = ++i
      • Comparable和Comparator的区别
      • 四种引用介绍
      • 静态代理与动态代理
      • 位运算
    • Java容器

    • Java并发编程

    • Java虚拟机

    • 常见面试题

  • 计算机基础

  • 框架|中间件

  • 架构

  • 后端
  • Java
  • Java进阶
Marvel
2022-07-13
目录

Object类

# Object类

# 介绍

java.lang.Object 类是 Java 语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是 Object。

如果一个类没有特别指定父类, 那么默认则继承自 Object 类。

# 类中的方法


// 本地方法,它在Java虚拟机中注册了一些与底层操作系统相关的本地方法。例如,对象的创建、销毁、内存管理等。
private static native void registerNatives();
static {
    registerNatives();
}
    
// native⽅法,⽤于返回当前运⾏时对象的Class对象,使⽤了final关键字修饰,故不允许⼦类重写。
public final native Class<?> getClass()

// native⽅法,⽤于返回对象的哈希码,主要使⽤在哈希表中,⽐如JDK中的HashMap。
public native int hashCode() 

// ⽤于⽐较2个对象的内存地址是否相等,String类对该⽅法进⾏了重写⽤户⽐较字符串的值是否相等。
public boolean equals(Object obj)

// naitive⽅法,⽤于创建并返回当前对象的⼀份拷⻉。⼀般情况下,对于任何对象 x,表达式 x.clone() != x 为true,x.clone().getClass() == x.getClass() 为true。
// Object本身没有实现Cloneable接⼝,所以不重写clone⽅法并且进⾏调⽤的话会发⽣CloneNotSupportedException异常。
protected native Object clone() throws CloneNotSupportedException

// 返回类的名字@实例的哈希码的16进制的字符串。建议Object所有的⼦类都重写这个⽅法。
public String toString()

// native⽅法,并且不能重写。唤醒⼀个在此对象监视器上等待的线程(监视器相当于就是锁的概念)。如果有多个线程在等待只会任意唤醒⼀个。
public final native void notify()

// native⽅法,并且不能重写。跟notify⼀样,唯⼀的区别就是会唤醒在此对象监视器上等待的所有线程,⽽不是⼀个线程。
public final native void notifyAll()

// native⽅法,并且不能重写。暂停线程的执⾏。注意:sleep⽅法没有释放锁,⽽wait⽅法释放了锁 。timeout是等待时间。
public final native void wait(long timeout) throws InterruptedException

// 多了nanos参数,这个参数表示额外时间(以毫微秒为单位,范围是 0-999999)。 所以超时的时间还需要加上nanos毫秒。
public final void wait(long timeout, int nanos) throws InterruptedException

// 跟之前的2个wait⽅法⼀样,只不过该⽅法⼀直等待,没有超时时间这个概念
public final void wait() throws InterruptedException

// 实例被垃圾回收器回收的时候触发的操作
protected void finalize() throws Throwable { }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

# 使用hashcode的原因

hashcode() 是 Object 的方法,主要是为了在 HashMap 中存储使用,HashMap 查找速度快,根据 key 的 hashcode 值生成数组下标,时间复杂度为 O(1)。

在哈希表中查找元素时,首先会比较两个元素的哈希值是否相等,如果相等的话再用equals()进行比较。

在 JDK 中,Object 的 hashcode 方法是本地方法,也就是用 c/c++ 实现的,直接返回对象的内存地址,所以重写 hashcode 方法是十分重要的。

在 String 中,计算方法为:val[0]*31^(n-1) + val[1]*31^(n-2) + ... + val[n-1],字符串一样的 String 对象 hashcode 也一样。

使用31的原因?

  • 31是不大不小的质数,选择质数是为了降低哈希算法的哈希冲突。
  • 31可被JVM优化:31 * i = (i << 5) - i
编辑 (opens new window)
#Java
上次更新: 2024/04/17, 21:30:18
类的初始化与对象的初始化
深度理解字符串String

← 类的初始化与对象的初始化 深度理解字符串String→

最近更新
01
位运算
05-21
02
二叉树
05-12
03
Spring三级缓存解决循环依赖
03-25
更多文章>
Theme by Vdoing | Copyright © 2022-2024 Marvel
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式