源码总览:

有好些都是native本地方法,背后是C++写的

没有关于构造器的描述,默认编译器提供的无参构造

https://blog.csdn.net/dmw412724/article/details/81477546

啊,为什么还是native。目前只能得出的结论是 凡是native修饰的方法,都是JNI调用C++或者C的代码实现的

获取类对象,用于反射和读取配置文件之类的

public final native Class<?> getClass();

获取对象的哈希值,类似C的地址值,由于是在JVM运行的,所以并不是真实的内存地址值,是虚拟的

- 可用于辅助判断两个对象是否是一样的

public native int hashCode();

原汁原味的equal判断,直接取地址比较

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

克隆方法,返回一个复制出来的对象,除了new方式的第二种获取对象的办法

- 注意 不支持克隆异常 ,此方法需要实现Cloneable接口才可用使用

protected native Object clone() throws CloneNotSupportedException;

默认的toString方法

- 返回的是 对象所属的类的完整类名 和 转换成16进制的哈希值

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

多线程开发所用,方法意思通知

【通知一个在对象上等待的线程,使其从wait方法中返回,返回需要获取到该对象的锁 】

    public final native void notify();

【通知所有在对象上等待的线程】

    public final native void notifyAll();

【使对象在参数值的时间内等待,超时返回,或者在等待的时间内被通知,注意!等待方法将会释放对象的锁】

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

【对超时时间的进一步精确】

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 > 0) {
timeout++;
} wait(timeout);
}

【进入等待状态,直至被其他线程通知,或者中断 才返回】

public final void wait() throws InterruptedException {
wait(0);
}

【对象被销毁时执行的方法】

protected void finalize() throws Throwable { }

GC回收和==与equals的区别?

重写toString & equals

public class ObjectTest {

    /*
Object 是所有类的父类
类中的声明未使用extends关键字指明父类,默认父类为java.lang.Object父类 垃圾回收机制的关键点
垃圾回收机制只回收JVM堆内存的对象空间
对其他物理连接,数据库链接,IO流,Socket链接无力
JVM实现垃圾回收的算法,很多种
垃圾回收具有不可预知性,程序无法精确控制机制执行
不过我们可以把对象的引用设置为null (Object obj = null) 让对象失去引用指向,引导GC回收 我们也可以手动设置GC通知系统进行回收,但是系统是否进行回收无法确定 GC在回收对象之前,一定先调用Finalize方法,
如果覆盖Finalize方法,让一个新的引用变量 重新引用对象,则会重新激活对象 我们不应该主动调用finalize方法,交由GC自动处理就好了 面试常问 final 、 finally 、 finalize 的区别? 面试: == 和equals的区别? ==
基本数据类型和引用数据类型都可以使用 基本类型可以类型不同,数据在进行转换之后进行比较。其字面值的地址一样返回true
引用类型,直接取实例的地址值进行比较,一样返回true equals不是运算符,是一个方法,只适用引用类型
Object类原型方法采用就是 == 比较 其他衍生类重写了equals方法,第一方法仍然是取地址比较
其次比较对象的属性是否一样, 输出一个对象的引用时,就是调用toString方法
其他类重写了toString方法,返回的是对象的内容信息
*/ public static void main(String[] args) {
SubObj obj = new SubObj(); // getClass() 获取这个实例的所属类
// getSuperClass() 获取个类的父类
Class<?> superclass = obj.getClass().getSuperclass();
System.out.println(superclass); int i = 10;
double d = 10.0;
char c = 10; System.out.println(i == d);// true
System.out.println(d == c);// true
}
} class SubObj{
int age;
String name; @Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof SubObj)) return false;
SubObj obj = (SubObj) o;
return age == obj.age && Objects.equals(name, obj.name);
}
@Override
public int hashCode() {
return Objects.hash(age, name);
}
}

【Java】【常用类】Object 基类 源码学习的更多相关文章

  1. java内置线程池ThreadPoolExecutor源码学习记录

    背景 公司业务性能优化,使用java自带的Executors.newFixedThreadPool()方法生成线程池.但是其内部定义的LinkedBlockingQueue容量是Integer.MAX ...

  2. java常用关键词关键字,方法源码解析

    transient volatile native final Integer String Class &&Object newInstance Class.forName,Clas ...

  3. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  4. SpringBoot源码学习系列之异常处理自动配置

    SpringBoot源码学习系列之异常处理自动配置 1.源码学习 先给个SpringBoot中的异常例子,假如访问一个错误链接,让其返回404页面 在浏览器访问: 而在其它的客户端软件,比如postm ...

  5. Java并发包源码学习系列:挂起与唤醒线程LockSupport工具类

    目录 LockSupport概述 park与unpark相关方法 中断演示 blocker的作用 测试无blocker 测试带blocker JDK提供的demo 总结 参考阅读 系列传送门: Jav ...

  6. Java 常用对象-Object类

    2017-10-31 23:42:08 Object类:类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 或者说,每个类都直接或者间 ...

  7. thrift之TTransport类体系原理及源码详细解析1-类结构和抽象基类

    本章主要介绍Thrift的传输层功能的实现,传输的方式多种多样,可以采用压缩.分帧等,而这些功能的实现都是相互独立,和上一章介绍的协议类实现方式比较雷同,还是先看看这部分的类关系图,如下: 由上面的类 ...

  8. THINKPHP源码学习--------文件上传类

    TP图片上传类的理解 在做自己项目上传图片的时候一直都有用到TP的上传图片类,所以要进入源码探索一下. 文件目录:./THinkPHP/Library/Think/Upload.class.php n ...

  9. C# System.Object基类

    System.Object 基类 System.Object在.Net中是所有类型的基类,任何类型都直接或间接地继承自System.Object.没有指定基类的类型都默认继承于System.Objec ...

  10. Hadoop源码学习笔记(1) ——第二季开始——找到Main函数及读一读Configure类

    Hadoop源码学习笔记(1) ——找到Main函数及读一读Configure类 前面在第一季中,我们简单地研究了下Hadoop是什么,怎么用.在这开源的大牛作品的诱惑下,接下来我们要研究一下它是如何 ...

随机推荐

  1. [ctfhub]SQL注入

    今天在ctfhub整理了几个sql注入的解题过程,还算是比较详细的. 知识点都是比较常见的:每个题大致涉及的知识点用一张表格解释 !注:下方的 information_schema.xxxxxxxxx ...

  2. Mac下 eclipse target runtime com.genuitec.runtime 解决方法

    Mac下 eclipse target runtime com.genuitec.runtime 解决方法 解决步骤如下: 首先是找到工程项目一个名叫.settings的文件夹,里面有个叫 org.e ...

  3. mycat主要参数

    以下内容源于mycat官方文档,记录下来方便直接查看: mycat版本:1.6 负载均衡类型,目前的取值有 3 种:1. balance="0", 不开启读写分离机制,所有读操作都 ...

  4. AI领域:如何做优秀研究并写高水平论文?

    来源:深度强化学习实验室 每个人从本科到硕士,再到博士.博士后,甚至工作以后,都会遇到做研究.写论文这个差事.论文通常是对现有工作的一个总结和展示,特别对于博士和做研究的人来说,论文则显得更加重要. ...

  5. iOS 启动时间优化

    在 WWDC 2016 上首次提到了关于 App 应用启动速度优化的话题:Session 406 Optimizing App Startup Time. 一.冷启动与热启动 热启动是,APP会恢复之 ...

  6. ArrayList中的Iterator详解

    每个实现Iterable接口的类必须提供一个iterator方法,返回一个Iterator对象,ArrayList也不例外 public Iterator<E> iterator() { ...

  7. 原来rollup这么简单之 tree shaking篇

    大家好,我是小雨小雨,致力于分享有趣的.实用的技术文章. 内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步. 分享不易,希望能够得到大家的支持和关注. 计划 rollup系列打算 ...

  8. SpringBoot 入门:项目属性配置

    开发一个SpringBoot 项目,首当其冲,必然是配置项目 一.项目属性配置 1. SpringBoot自带了Tomcat服务器,通过使用项目配置文件来修改项目的配置,如图配置了部署在80端口,目录 ...

  9. 在非主线程里面使用NSTimer创建和取消定时任务

    为什么要在非主线程创建NSTimer 将 timer 添加到主线程的Runloop里面本身会增加线程负荷 如果主线程因为某些原因阻塞卡顿了,timer 定时任务触发的时间精度肯定也会受到影响 有些定时 ...

  10. stm32:#ifndef/#define/#endif使用

    参考:https://blog.csdn.net/abc5382334/article/details/18052757/ 比如:存在a.h文件#include "c.h"而此时b ...