API帮助文档(二)

一.Object

Object是Java中的顶级父类,所有类都直接或者二间接的继承Object类。

Object类的方法可以被所有子类访问。

一.Object的构造方法:

没有带参构造,只有一个空参构造

       原因是在Java中只有子类的共性才会往父类中抽取,但是Object是Java中的顶级父类,没有一个属性是所有子类都有的,所以没有成员变量,自然没有带参构造方法。

二.Object的成员方法:

1.toString();

对于打印结果java.lang.Object@776ec8df

java.lang是包名

Object是类名

@是固定合适

776ec8df是对象的地址值

toString();的源代码

当我们直接打印时

我们发现调用方法和不调用方法打印结果一样

是因为printfln();方法的源代码里面也有一个toString();

因为默认情况下Object类中的toString方法返回地址值

所以我们打印的就是地址值。

当我们想要得到属性时,就要重写toString;

我们创建一个Student类,重写toString方法

此时我们再次创建对象,就可以打印内部的属性值。

总结:

如果我们打印一个对像想要看到属性值,只需要重写toString方法,返回值把属性拼接即可。

我们可以使用ptg插件自动完成

2.equals();

比较两个对象是否相等。

举个例子

为什么输出false呢?

首先我们没有在Student里面重写equals所以要看Object类中的源代码

可以发现他是使用==来进行判断的,==判断的是地址值,所以输出false。、

而我们一般比较地址值。

当我们父类方法不能满足需求,就要重写方法

我们在Student中按下ALT+INS

点击这里一件重写

重写之后就比较属性值了

结论:如果没有重写equals方法,默认比较地址值

当我们需要比较属性值,就要去重写

小练习:

思考一下,输出的是什么

可以看到全是false

因为第一个被s调用,s是字符串,所以在String中的toString的源代码

他表示先判断是否为字符串,如果是字符串在比较内部属性,如果不是则直接返回false;

第二个调用者sb是StringBuilder。

所以要看StringBuilder中的toString,因为StringBuilde里面并没有重写toString方法,所以默认调用Object类中的toString方法

而这里sb 和 s地址值不同,所以返回false

两个返回虽然都是false,但是原因不同。

3.clone();

对象克隆,把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制。

我们先创建有以下属性的Javabean类

我们无法直接通过对象调用clone方法,要在Student中重写

并且添加一个接口

对于这个接口

我们可以开始克隆

关宇克隆对象

方法会在底层帮我们创建一个对象,并把原来的对象拷贝过去

书写细节

1.重写Object类中的clone

2.让你的Javabean类实现Cloneable接口

3.创建原对象并调用clone既可以了。

Java的克隆有两种方式
第一种:浅克隆/浅拷贝

这种拷贝方式

对于基本数据类型,直接把属性值拷贝过去

对于引用数据类型,是把地址值拷贝过去,(字符串/数组等等)

对于数组而言,两个对象指向一个数组,这样会有一个特点

当其中一个对象进行修改,另外一个也会更改

第二种:深克隆/深拷贝

这种拷贝方式

对于基本数据类型,直接把属性值拷贝过去

因为字符串只要不是new出来的就会在串池进行管理,所以会进行复用

对于数组(和其他引用数据类型)而言会在创建一个数组,把数组的值拷贝过去(新的与原来的互不干涉)

系统默认就是浅克隆

进行深克隆的方法:使用第三方工具gson

三.关于Object的总结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨小瑾的鸭舌帽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值