day22object类中的方法

day23object类中的方法

一、object类

这个老祖宗类中的方法我们需要先研究一下,因为这些方法都是所有子类通用的。

任何一个类默认继承Object。就算没有直接继承,最终也会间接继承。

1.1、Object类当中有哪些常用的方法?

​ 我们去哪里找这些方法呢?
​ 第一种方法:去源代码当中。(但是这种方式比较麻烦,源代码也比较难)
​ 第二种方法:去查阅java的类库的帮助文档。

1.2、什么是API?

​ 应用程序编程接口。(Application Program Interface)
​ 整个JDK的类库就是一个javase的API。
​ 每一个API都会配置一套API帮助文档。
​ SUN公司提前写好的这套类库就是API。(一般每一份API都对应一份API帮助文档。)

1.3、目前为止我们只需要知道这几个方法即可:

​ protected Object clone() // 负责对象克隆的。
​ int hashCode() // 获取对象哈希值的一个方法。
​ boolean equals(Object obj) // 判断两个对象是否相等
​ String toString() // 将对象转换成字符串形式
​ protected void finalize() // 垃圾回收器负责调用的方法

二、toString()

2.1、源代码长什么样?

​ public String toString() {
​ return this.getClass().getName() + “@” + Integer.toHexString(hashCode());
​ }
​ 源代码上toString()方法的默认实现是:
​ 类名@对象的内存地址转换为十六进制的形式

2.2、设计toString()方法的目的是什么?

​ toString()方法的作用是什么?
​ toString()方法的设计目的是:通过调用这个方法可以将一个“java对象”转换成“字符串表示形式”

2.3、建议所有的子类都去重写toString()方法。

其实SUN公司开发java语言的时候,建议所有的子类都去重写toString()方法。

toString()方法应该是一个简洁的、详实的、易阅读的.

2.4、注意

1、以后所有类的toString()方法是需要重写的。重写规则,越简单越明了就好。

2、System.out.println(引用); 例子:System.out.println(rq1.toString());

这里会自动调用“引用”的toString()方法。

3、String类是SUN写的,toString方法已经重写了。

三、equals()方法

3.1、equals方法的源代码

​ public boolean equals(Object obj) {
​ return (this == obj);
​ }
​ 以上这个方法是Object类的默认实现。

3.2、设计equals方法的目的是什么?

​ 1、以后编程的过程当中,都要通过equals方法来判断两个对象是否相等。
​ 2、功能:equals方法是判断两个对象是否相等的。

3.3、默认的equals方法够不够用

1、在Object类中的equals方法当中,默认采用的是“”判断两个java对象是否相等。而“”判断的是两个java对象的内存地址,我们应该判断两个java对象的内容是否相等。所以老祖宗的equals方法不够用,需要子类重写equals。

3.4、判断两个java对象是否相等

1、判断两个java对象是否相等,不能使用“”,因为“”比较的是两个对象的内存地址。

3.5、使用场景

1、基本数据类型比较实用:==
2、对象和对象比较:调用equals方法

3.6、注意:

1、以后所有类的equals方法也需要重写,因为Object中的equals方法比较的是两个对象的内存地址,我们应该比较内容,所以需要重写。

2、重写规则:自己定,主要看是什么和什么相等时表示两个对象相等。

3、String类是SUN编写的,所以String类的equals方法重写了。以后判断两个字符串是否相等,最好不要使用==,要调用字符串对象的equals方法。因为String有两种形式:你不知道有当时定义的时候用的是哪种形式。所以比较的时候最好都用equals方法。

​ 1、string =“abc”;

​ 2、string s2=new string(“abc”);

4、重写equals方法的时候要彻底。

5、此方法用IDEA可以自动生成。

四、String类

String类重写了toString()和equals()方法。

//String中重写了toString()和equals()
public class Test02 {
    public static void main(String[] args) {
        String s1="abc";
        String s2=new String("abc");
        String s3="abc";
        System.out.println(s1==s2);//false
        System.out.println(s1==s3);//true
        
        //String中重写了equals()方法
        System.out.println(s1.equals(s2));//true
        
        //string中重写了toString()方法
        String x=new String("陈绪杰");
        
        //可以直接输出引用
        System.out.println(x);//陈绪杰
        System.out.println(x.toString());//陈绪杰
    }
}

五、finalize()方法:JDK9以上的版本就不用了

4.1、finalize()方法。垃圾销毁时机

​ 这个方法是protected修饰的,在Object类中这个方法的源代码是?

​ protected void finalize() throws Throwable { }

​ finalize()方法只有一个方法体,里面没有代码,

​ GC:负责调用finalize()方法。

4.2、finalize()方法的执行时机:

1、当一个java对象即将被垃圾回收器回收的时候,垃圾回收器负责调用finalize()方法。

2、finalize()方法实际上是SUN公司为java程序员准备的一个时机,垃圾销毁时机
如果希望在对象销毁时机执行一段代码的话,这段代码要写到finalize()方法当中。

4.3、怎么使用:

当一个对象为空的时候可能会被调用例子:

A a=new A();
a=null;

1、这个方法不需要程序员手动调用,JVM的垃圾回收器负责调用这个方法。
2、finalize()只需要重写,重写完将来自动会有程序来调用。

4.4、提示:

1、java中的垃圾回收器不是轻易启动的。

2、垃圾太少,或者时间没到,种种条件下。

3、有可能启动,也有可能不启动。

4、 有一段代码可以建议垃圾回收器启动。

			System.gc(); // 建议启动垃圾回收器。(只是建议,可能不启动,也可能启动。启动的概率高了一些。)jdk8启动的概率高。

4.5、应用场景

项目开发中有这样的业务需求:所有对象在JVM中被释放的时候,请记录一下释放时间!!!

六、hashCode()

6.1、hashCode方法?返回一个对象的哈希码。

​ public native int hashCode();

​ 这个方法不是抽象方法,带有native关键字,底层调用C++程序。

6.2、hashCode()方法返回结果:

1、hashCode()方法返回的是哈希码:

2、实际上就是一个java对象的内存地址,经过哈希算法,得出的一个值。所以hashCode()方法的执行结果可以等同看做一个java对象的内存地址。

6.3、使用方法:

直接调用,不需要重写

例子:

A a=new A();

System.out.println(a.hashCode());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值