Java:Object对象小记

对 Java 中的 Object 对象,做一个微不足道的小小小小记

Object 的常用方法有哪些

  • clone() 方法:用于创建并返回当前对象的一份拷贝;

    Java:创建对象小记这里做了个小结

  • getClass() 方法:用于返回当前运行时对象的 Class;

  • toString() 方法:返回对象的字符串表示形式;

  • finalize() 方法:实例被垃圾回收器回收时触发的方法;

  • equals() 方法:用于比较两个对象的内存地址是否相等,一般需要重写;

  • hashCode() 方法:用于返回对象的哈希值;

  • notify() 方法:唤醒一个在此对象监视器上等待的线程。如果有多个线程在等待只会唤醒一个。

  • notifyAll() 方法:作用跟 notify() 一样,只不过会唤醒在此对象监视器上等待的所有线程,而不是一个线程。

  • wait() 方法:让当前对象等待;

  • .......

finalize & final & finally

finalize:Object 类的一个方法,在垃圾回收时会调用被回收对象的finalize。

final:final可以用来修饰类,方法和变量(成员变量或局部变量)

  1. 修饰类:当用 final 修饰类的时,表明该类不能被其他类所继承。(final 类中所有的成员方法都会隐式的定义为 final 方法)

  2. 修饰方法:把方法锁定,以防止继承类对其进行更改。

  3. 修饰变量:final 成员变量表示常量,只能被赋值一次,赋值后其值不再改变。类似于 C++ 中的 const。

    1. 当 final 修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;

    2. 如果 final 修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的,这本质上是一回事,因为引用的值是一个地址,final 要求值,即地址的值不发生变化。

      进一步说明:

      当final 修饰的是一个引用变量,那么这个引用始终只能指向这个对象,但是这个对象内部的属性是可以变化的

      官方文档解释:

      once a final variable has been assigned, it always contains the same value. If a final variable holds a reference to an object, then the state of the object may be changed by operations on the object, but the variable will always refer to the same object.

      一旦一个final修饰的变量被赋值了,它总是包含相同的值。如果一个final变量持有对一个对象的引用,那么该对象的状态可以通过对该对象的操作而改变,但该变量将始终引用同一个对象。

    3. final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。

finally:finally作为异常处理的一部分,它只能用在 try/catch 语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下。

其实不然,存在finally语句不被执行的情况,见Java:异常小记

wait/notify

wait/notify 用于线程的等待与唤醒,那为什么 wait/notify 方法放在 Object 类中而不是 Thread 类中?

一个很明显的原因是 Java 提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得。如果线程需要等待某些锁,那么调用对象中的 wait() 方法就有意义了。如果 wait() 方法定义在 Thread 类中,线程正在等待的是哪个锁就不明显了。简单的说,由于 wait,notify 和 notifyAll 都是锁级别的操作,所以把他们定义在 Object 类中因为锁属于对象。

参考

https://mp.weixin.qq.com/s/4E3xRXOVUQzccmP0yahlqA

https://www.cnblogs.com/ktao/p/8586966.html

https://blog.csdn.net/pulusite/article/details/82287462

https://blog.csdn.net/zl1zl2zl3/article/details/106695410

Java:Object对象小记的更多相关文章

  1. Java Object 对象创建的方式 [ 转载 ]

    Java Object 对象创建的方式 [ 转载 ] @author http://blog.csdn.net/mhmyqn/article/details/7943411 显式创建 有4种显式地创建 ...

  2. Java Object 对象拷贝答疑

    Java Object 对象拷贝答疑 @author ixenos 摘要:在对象的clone过程需要注意的几点.关于关键字this.super 关于clone[对象拷贝] 在实际编程过程,有时候我们会 ...

  3. Java Object 对象拷贝

    Java Object 对象拷贝 @author ixenos JAVA 对象拷贝 Java里的clone分为:  1.浅拷贝:浅复制仅仅复制所考虑的对象,而不复制它所引用的对象,Object类里的c ...

  4. JVM系列之:详解java object对象在heap中的结构

    目录 简介 对象和其隐藏的秘密 Object对象头 数组对象头 整个对象的结构 简介 在之前的文章中,我们介绍了使用JOL这一神器来解析java类或者java实例在内存中占用的空间地址. 今天,我们会 ...

  5. 重写Java Object对象的hashCode和equals方法实现集合元素按内容判重

    Java API提供的集合框架中Set接口下的集合对象默认是不能存储重复对象的,这里的重复判定是按照对象实例句柄的地址来判定的,地址相同则判定为重复,地址不同不管内容如何都判定为不重复,这有时与需求不 ...

  6. java Object对象的clone方法

    参考copy链接:http://blog.csdn.net/bigconvience/article/details/25025561 在看原型模式,发现要用到clone这个方法,以前和朋友聊过,没怎 ...

  7. Java Object对象中的wait,notify,notifyAll的理解

    wait,notify,notifyAll 是定义在Object类的实例方法,用于控制线程状态,在线程协作时,大家都会用到notify()或者notifyAll()方法,其中wait与notify是j ...

  8. Java:String对象小记

    Java:String对象小记 对 Java 中的 String 对象,做一个微不足道的小小小小记 字节和字符的区别 字节 byte: 一个字节包含8个位(bit),因此byte的取值范围为-128~ ...

  9. EBS OAF开发中的Java 实体对象(Entity Object)验证功能补充

    EBS OAF开发中的Java 实体对象(Entity Object)验证功能补充 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) EO理论上 ...

随机推荐

  1. python打包发布自己的pip项目

    原文链接:https://blog.csdn.net/Liangjun_Feng/article/details/80037315 一.注册pypi账号 网址:https://pypi.org/ 直接 ...

  2. 「山东省队集训2021 Round 1」 半夜

    考虑将 \(X\) 复制一次放到后面再对其长度为 \(n\) 的连续子串和 \(Y\) 求一波 \(\rm{Longest\ Common\ Subsequence}\) 就能得到 \(\Theta( ...

  3. 【第十七篇】- Maven Web 应用之Spring Cloud直播商城 b2b2c电子商务技术总结

    Maven Web 应用 本章节我们将学习如何使用版本控制系统 Maven 来管理一个基于 web 的项目,如何创建.构建.部署已经运行一个 web 应用. 创建 Web 应用 我们可以使用 mave ...

  4. Jenkins教程(七)实现 GitLab 提交/合并代码触发构建

    楔子 最近公司推行统一构建平台(基于 Jenkins + Kubernetes 插件创建 slave),原来部门自建的 Jenkins 不让用了. 迁移上统一构建平台的最大阻力是前端模块发布的问题: ...

  5. 洛谷P1803——凌乱的yyy(贪心)

    题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) 所以,他想知道他最多能参加几个比赛. 由于yyy是蒟蒻,如果要参加 ...

  6. Django学习day15BBS项目开发2.0

    每日测验 """ 今日日考 1.img标签src属性可以指代的值有哪些,各有什么特点 2.pillow模块是干什么用的,主要的方法有哪些 3.简述登陆功能图片验证码相关逻 ...

  7. LINUX服务器 安装定时任务 设置定任务 Liux定时关机

    1.先查看是否安装crond yum list installed | grep cron 若没有安装: yum -y install vixie-cron yum -y install cronta ...

  8. 用 shell 脚本做命令行工具扩展

    问题的提出 公司开发机与远程服务器之间有严格的隔离策略,不能直接使用 ssh 登录,而必需通过跳板机.这样一来,本地与服务器之间的一些文件传输变得非常不便.经过咨询,运维教了我一招: $ nc -l ...

  9. linux中创建公私钥

    linux中创建公私钥要再~(root)目录下ssh-keygencd /root/.ssh/lsid_rsa 是私钥id_rsa.pub 是公钥把 authorized_keys删除掉,重新建aut ...

  10. P3288-[SCOI2014]方伯伯运椰子【0/1分数规划,负环】

    正题 题目链接:https://www.luogu.com.cn/problem/P3288 题目大意 给出\(n\)个点\(m\)条边的一张图,没条边\(i\)流量为\(c_i\),费用是\(d_i ...