本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
20分19秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 步骤 1 : Object类是所有类的父类 步骤 2 : toString() 步骤 3 : finalize() 步骤 4 : equals() 步骤 5 : == 步骤 6 : hashCode() 步骤 7 : 线程同步相关方法 步骤 8 : getClass() 步骤 9 : 练习-Object 步骤 10 : 答案-Object
声明一个类的时候,默认是继承了Object
public class Hero extends Object package charactor;
import property.Item;
public class Hero extends Object {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
public void useItem(Item i){
System.out.println("hero use item");
i.effect();
}
public Hero(){
System.out.println("Hero的无参的构造方法 ");
}
public Hero(String name){
System.out.println("Hero的有一个参数的构造方法 ");
this.name = name;
}
public static void main(String[] args) {
new Hero();
}
}
Object类提供一个toString方法,所以所有的类都有toString方法
toString()的意思是返回当前对象的字符串表达 通过 System.out.println 打印对象就是打印该对象的toString()返回值 package charactor;
public class Hero {
public String name;
protected float hp;
public String toString(){
return name;
}
public static void main(String[] args) {
Hero h = new Hero();
h.name = "盖伦";
System.out.println(h.toString());
//直接打印对象就是打印该对象的toString()返回值
System.out.println(h);
}
}
package charactor; public class Hero { public String name; protected float hp; public String toString(){ return name; } public static void main(String[] args) { Hero h = new Hero(); h.name = "盖伦"; System.out.println(h.toString()); //直接打印对象就是打印该对象的toString()返回值 System.out.println(h); } }
当一个对象没有任何引用指向的时候,它就满足垃圾回收的条件
当它被垃圾回收的时候,它的finalize() 方法就会被调用。 finalize() 不是开发人员主动调用的方法,而是由虚拟机JVM调用的。 package charactor;
public class Hero {
public String name;
protected float hp;
public String toString(){
return name;
}
public void finalize(){
System.out.println("这个英雄正在被回收");
}
public static void main(String[] args) {
//只有一引用
Hero h;
for (int i = 0; i < 100000; i++) {
//不断生成新的对象
//每创建一个对象,前一个对象,就没有引用指向了
//那些对象,就满足垃圾回收的条件
//当,垃圾堆积的比较多的时候,就会触发垃圾回收
//一旦这个对象被回收,它的finalize()方法就会被调用
h = new Hero();
}
}
}
equals() 用于判断两个对象的内容是否相同
假设,当两个英雄的hp相同的时候,我们就认为这两个英雄相同 package charactor;
public class Hero {
public String name;
protected float hp;
public boolean equals(Object o){
if(o instanceof Hero){
Hero h = (Hero) o;
return this.hp == h.hp;
}
return false;
}
public static void main(String[] args) {
Hero h1= new Hero();
h1.hp = 300;
Hero h2= new Hero();
h2.hp = 400;
Hero h3= new Hero();
h3.hp = 300;
System.out.println(h1.equals(h2));
System.out.println(h1.equals(h3));
}
}
这不是Object的方法,但是用于判断两个对象是否相同
更准确的讲,用于判断两个引用,是否指向了同一个对象 package charactor;
public class Hero {
public String name;
protected float hp;
public boolean equals(Object o){
if(o instanceof Hero){
Hero h = (Hero) o;
return this.hp == h.hp;
}
return false;
}
public static void main(String[] args) {
Hero h1= new Hero();
h1.hp = 300;
Hero h2= new Hero();
h2.hp = 400;
Hero h3= new Hero();
h3.hp = 300;
System.out.println(h1==h2);
System.out.println(h1==h3);
}
}
重写Item的 toString(), finalize()和equals()方法
toString() 返回Item的name + price finalize() 输出当前对象正在被回收 equals(Object o) 首先判断o是否是Item类型,然后比较两个Item的price是否相同
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
1分36秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 package property;
public class Item extends Object {
String name;
int price;
public String toString() {
return "叫做 " + name + " 的物品,其价格是 " + price;
}
public void finalize() {
System.out.println("回收叫做 " + name + " 的物品");
}
public boolean equals(Object o) {
if (o instanceof Item) {
Item i = (Item) o;
if (i.price == this.price)
return true;
else
return false;
}
return false;
}
}
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2023-12-03
总结
1 个答案
Leslie_sakura 跳转到问题位置 答案时间:2024-04-19 重写equals
public boolean equals(float hp) { if(this.hp==hp) return true; else return false;
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2023-04-08
接口与继承 Object类
3 个答案
木宇 跳转到问题位置 答案时间:2024-05-04 运行结果:
护甲150
false
true
Domiko 跳转到问题位置 答案时间:2023-08-14 你想问的是直接将Item item = (Item)o;改为(Item)o;是吗
(Item) o;是一个类型转换的表达式,它将o引用强制转换为Item类型。但是,这个转换并没有被赋值给任何变量,因此没有创建一个新的对象引用来接收转换后的结果。
我觉得可以理解为,(Item)强制转换也是有一个返回值的,返回的类型就是括号中的类型,因此需要一个Item变量来接收。(Item)o;并不会像i++;一样解释为i = i + 1; 。
加长版海贼 跳转到问题位置 答案时间:2023-08-10 finalize重写不了好像因为废弃了,我遇到的问题:
判断o是否是Item之后,如果是的话要建立一个新的Item引用h来指向o,没建立就错了
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2022-11-20
这一段代码看不懂有没有大佬讲解一下
2022-06-28
重写finalize没有被调用
2022-05-10
equals方法我怎么搞都是false
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 57 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|