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. Linux查看英伟达GPU信息

    命令: nvidia-smi 结果:

  2. Python - 基本数据处理函数round()、int()、floor()、ceil()

    前言 对每位程序员来说,在编程过程中数据处理是不可避免的,很多时候都需要根据需求把获取到的数据进行处理,取整则是最基本的数据处理.取整的方式则包括向下取整.四舍五入.向上取整等等.下面就来看看在Pyt ...

  3. Jenkins(7)- 解决Linux下忘记Jenkins密码

    如果想从头学起Jenkins的话,可以看看这一系列的文章哦 https://www.cnblogs.com/poloyy/category/1645399.html admin密码未更改情况下 进入\ ...

  4. openswan专栏序言

    openswan专栏序言 "一杯茶,一包烟,一个bug解一天!!!". ​ 2020年春季,正值新冠病毒在全球肆虐之际,美国的疫情已经相当的严峻,每天仍以3万速度狂奔.而国内的疫情 ...

  5. HCNP Routing&Switching之IS-IS邻居建立、LSDB同步、拓扑计算和路由形成

    前文我们了解了IS-IS的报文结构和类型相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15260670.html:今天我们来聊一聊IS-IS建立邻居. ...

  6. Markdown时序图--基础语法

    时序图 ​ 序列图是一种交互图,它显示了流程以何种顺序相互操作. Mermaid可以渲染序列图,如下定义. sequenceDiagram Alice->>John:Message Hel ...

  7. TypeScript 中命名空间与模块的理解?区别?

    一.模块 TypeScript 与ECMAScript 2015 一样,任何包含顶级 import 或者 export 的文件都被当成一个模块 相反地,如果一个文件不带有顶级的import或者expo ...

  8. PTA面向对象程序设计6-3 面积计算器(函数重载)

    实现一个面积计算器,它能够计算矩形或长方体的面积. 函数接口定义: int area(int x, int y); int area(int x, int y, int z); 第一个函数计算长方形的 ...

  9. 在PHP中操作文件的扩展属性

    在操作系统的文件中,还存在着一种我们可以自己定义的文件属性.这些属性不是保存在文件内容中,也不是直接可以通过 ls -al 所能看到的内容.它们可以将一个键值对信息永久得关联到文件上,一般现在的 Li ...

  10. php环境 安装

    php 相关 wget https://www.php.net/distributions/php-7.2.16.tar.gz //你可以官网获取最新的包        tar解压    //一般目录 ...