Object类的知识点总结

概述:

1. Object类是所有其他类的父类

2. Object类只有一个构造方法,这也是为什么所有子类在调用构造方法时都会默认先调用父类的无参构造方法

3. Object类没有成员变量

方法:

1. public int hashCode()

2. public final Class getClass()

3. public String toString()

4. public boolean equals(Object obj)

5. protected void finalize()

6. protected Object clone()

具体方法:

  • public int hashCode():

返回此对象的哈希码值(散列码),支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。

hashCode 的常规协定是:

1. 一致性:在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。

2. 如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。 如果重写了equals()方法,一定也要重写hashCode()方法

3. 如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。

重写:

int result = c;

//根据每一个关键域的hashcode去生成

31 * i == ( i << 5 ) - i ;

result = 31 * field.hashCode + result ;

return result;

实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)

  • public final Class getClass()

返回此 Object运行时类

Class:类类型,用来描述该类型的类

String getName():返回该类的全限定名

注意事项:

a) 返回的是运行时类

b) 用final修饰,所有对象该方法的行为一致

返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。实际结果类型是 Class<? extends |X|>,其中 |X| 表示清除表达式中的静态类型,该表达式调用 getClass。

  • public String toString()

返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。

Object中toString的默认实现是返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成

getClass().getName() + “@” + Integer.toHexString(hashCode())

默认实现不能很好的体现对象,所以推荐子类都重写toString()

重写方式:

1. 根据关键域去重写

2. 快捷键生成

  • public boolean equals(Object obj)

指示其他某个对象是否与此对象“相等”。

equals 方法在非空对象引用上实现相等关系:

默认实现:

return this == obj ;

针对不同的类:

实体类:不同对象代表不同实体,采用默认实现即可

值类:关键域相等,就认为两个对象相等,需要重写equals方法

1. 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。

2. 对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。

3. 传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。

4. 一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。

5. 非空性:对于任何非空引用值 x,x.equals(null) 都应返回 false。

(Java语法没有强制要求严格遵循这些原则,但是违反可能会对程序造成灾难性的后果)

重写:

a) 子类没有新的要比较的属性,就用instanceof进行判断

Demo:

public boolean equals(Object obj) {

if(obj instanceof Demo) {
Demo demo = (Demo) obj ;

//用关键属性进行比较

}

return false;

}

里氏替换原则

b) 子类有新的要比较的属性,就用getClass()方法进行判断

Demo:

public boolean equals(Object obj) {

if(obj == null || obj.getClass() != getClass() {
return false ;

}

Demo demo = (Demo) obj;

//用关键属性进行比较

}

没有遵循里氏替换原则

c) 快捷键生成

“==“ 和 equals 的区别

==:

a) 如果比较的是基本数据类型,判断他们的值是否相等

b) 如果比较的是引用数据类型,判断他们是否是同一个对象

equals:

a) 不能比较基本数据类型

b) 比较引用数据类型,如果没有重写Object的equals(),默认判断是否是同一个对象

c) 如果重写了,一般是根据对象的值进行判断

Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

  • protected void finalize()

垃圾回收器回收该对象之前,会调用该方法

作用:可以释放系统资源

注意事项

a) 如果直接调用,相当于普通方法的调用,并不会回收该对象

b) 释放系统资源最好不要放在该方法里面,推荐使用try…catch…finally

当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

子类重写 finalize 方法,以配置系统资源或执行其他清除。

finalize 的常规协定是:当 JavaTM 虚拟机已确定尚未终止的任何线程无法再通过任何方法访问此对象时,将调用此方法,除非由于准备终止的其他某个对象或类的终结操作执行了某个操作。finalize 方法可以采取任何操作,其中包括再次使此对象对其他线程可用;不过,finalize 的主要目的是在不可撤消地丢弃对象之前执行清除操作。例如,表示输入/输出连接的对象的 finalize 方法可执行显式 I/O 事务,以便在永久丢弃对象之前中断连接。

Object 类的 finalize 方法执行非特殊性操作;它仅执行一些常规返回。Object 的子类可以重写此定义。

Java 编程语言不保证哪个线程将调用某个给定对象的 finalize 方法。但可以保证在调用 finalize 时,调用 finalize 的线程将不会持有任何用户可见的同步锁定。如果 finalize 方法抛出未捕获的异常,那么该异常将被忽略,并且该对象的终结操作将终止。

在启用某个对象的 finalize 方法后,将不会执行进一步操作,直到 Java 虚拟机再次确定尚未终止的任何线程无法再通过任何方法访问此对象,其中包括由准备终止的其他对象或类执行的可能操作,在执行该操作时,对象可能被丢弃。

对于任何给定对象,Java 虚拟机最多只调用一次 finalize 方法。

finalize 方法抛出的任何异常都会导致此对象的终结操作停止,但可以通过其他方法忽略它

  • protected Object clone()

创建并返回此对象的一个副本。“副本”的准确含义可能依赖于对象的类。

默认:浅拷贝

如何实现深拷贝:

a) 实现Cloneable接口

b) 调用super.clone(),完成基本数据类型的拷贝

c) 对所有的引用数据类型完成深拷贝(下一级也应该实现深拷贝)

这样做的目的是,对于任何对象 x,表达式:

x.clone() != x为 true,表达式:

x.clone().getClass() == x.getClass()也为 true,但这些并非必须要满足的要求。一般情况下:

x.clone().equals(x)为 true,但这并非必须要满足的要求。

按照惯例,返回的对象应该通过调用 super.clone 获得。如果一个类及其所有的超类(Object 除外)都遵守此约定,则 x.clone().getClass() == x.getClass()。

按照惯例,此方法返回的对象应该独立于该对象(正被复制的对象)。要获得此独立性,在 super.clone 返回对象之前,有必要对该对象的一个或多个字段进行修改。这通常意味着要复制包含正在被复制对象的内部“深层结构”的所有可变对象,并使用对副本的引用替换对这些对象的引用。如果一个类只包含基本字段或对不变对象的引用,那么通常不需要修改 super.clone 返回的对象中的字段。

Object 类的 clone 方法执行特定的复制操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。注意,所有的数组都被视为实现接口 Cloneable。否则,此方法会创建此对象的类的一个新实例,并像通过分配那样,严格使用此对象相应字段的内容初始化该对象的所有字段;这些字段的内容没有被自我复制。所以,此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。

Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。

c++ string类的常用方法_【常用类方法】Object相关推荐

  1. stream流、数学类、String类的常用方法、date、密码等

    一.API 1.基本概念 英文全称Application Programming Interface,翻译为"应用程序编程接口". 是一些预先定义的函数,目的是提供应用程序与开发人 ...

  2. String类的常用方法大全!

    String类的常用方法 (1)基本方法 (2)关于测试和索引方法 (3)匹配替换(正则) (4)简单的正则表达式 (1)基本方法 int length():返回字符串的长度 char charAt( ...

  3. java-从键盘输入一串字符,输出不同的字符以及每个字符出现的次数。(输出不按照顺序)运用String类的常用方法解题

    从键盘输入一串字符,输出不同的字符以及每个字符出现的次数.(输出不按照顺序)运用String类的常用方法解题 package labreport7;import java.util.Scanner;/ ...

  4. java api 第一个类是_JAVA常用API:String 类的常用方法

    字符串是一个对象,有很多方法可以使用 1. length();返回字符串的长度 String str = "abcd"; int len = str.length(); 2. is ...

  5. c++ string replace_Java——String类的常用方法总结

    点击上方"IT咸鱼",星标公众号重磅干货,第一时间送达 一.String类String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象. ...

  6. String类的常用方法API

    String的常用方法 String是我们开发中,使用频率很高的类.Java中的String类包含了50多个方法,令人惊讶的是他们绝大多数都是很常用的,可以想见使用的频里非常的高. 1.char ch ...

  7. arduino char*转string_Java 中 String 类的常用方法汇总

    一.String 类的概念以及特性 1.String 类的概念 String 类代表字符串,在 java.lang 包中.字符串是常量 ,用双引号引起来表示. 它的值在创建之后不能更改 .由 0 或多 ...

  8. string类的常用方法有哪些以及用法

    String类: String类在java.lang中,String声明的是不可变的对象,每次操作都是生成新的String对象,然后指针指向新的String对象,原先的对象依旧在内存中,但是不在指向它 ...

  9. java 实现 string类_java 中String类的常用方法总结,带你玩转String类。

    String类: String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.String类对象创建后不能修改,StringBuffer & St ...

最新文章

  1. 基于Springboot实现田径运动会管理系统
  2. 还记得那个提速8倍的IDEA插件吗?VS Code版本也发布啦!
  3. 学习python好学吗-零基础学python难吗?好学吗?
  4. 假设检验 Hypothesis testing
  5. 将image存入mysql数据库_有谁知道如何把一图片存放到mysql数据库中
  6. android于src和background差额
  7. sax 解析 xml
  8. layui 弹窗自适应高度_layui弹框自适应高度
  9. 计算机二级C语言选择题怎么做?要注意些什么?(易错点难点总结笔记)
  10. 卡牌大师怎么玩_LOL卡牌大师技巧 卡牌大师攻略
  11. html自动改成繁体怎么做,如何将繁体字转换成简体字,繁体字转换器在线转换,简体字转换为繁体字...
  12. 宁芝普拉姆键盘说明书以及键盘校验软件
  13. ★一人一首成名歌曲★
  14. QQ空间迁移_【Frame_relay子接口的两种配置方法】
  15. win7各种插件的下载与使用
  16. 西安~培养我的文艺范儿
  17. Cisco AP-胖瘦AP的转换
  18. 英语语法篇 - 语法强化
  19. 新浪微博头条自动外推发帖引蜘蛛工具
  20. 【十五、网站公安备案】2021最详细wordpress博客建站教程(2021.03.04更新)

热门文章

  1. 设计模式第三集——装饰者模式(Decorator)
  2. linux的基础知识——线程
  3. linux应用程序课程设计,linux操作系统与应用课程设计 .pdf
  4. 训练深度学习_深度学习训练tricks整理1
  5. mysql int tinyint_MySQL中int(M)和tinyint(M)数值类型中M值的意义
  6. 详解Python操作Excel文件
  7. Hive小文件问题:如何产生、造成影响、解放办法
  8. 剑指 Offer 35. 复杂链表的复制(哈希/衍生拆分图解)
  9. Java加密与解密的艺术~RSA实现
  10. 从别的网站服务器获取数据,使用get()方法以GET方式从服务器获取数据