一、终极父类Object
1、大boss
// Object类
// 所有类的父类
// 声明类时,默认继承Object
// 今日主题--》Object类的方法
// 对象.的方式可以看到
2、方法
(1)toString()
package ia7_object_toString;
public class Hero extends Object{
protected String name; // 英雄名称
protected float hp; // 血量
protected int armor;
protected float moveSpeed;
public static void main(String[] args) {
Hero h = new Hero();
// toString() 获取当前对象的字符串表达
System.out.println(h.toString());
// 直接打印对象就是打印toString字符串返回值
System.out.println(h);
}
}
// 试一试,输出结果一样!
(2)finalize()
package ia7_object1_finalize;
public class Hero extends Object{
protected String name; // 英雄名称
protected float hp; // 血量
protected int armor;
protected float moveSpeed;
public static void main(String[] args) {
Hero h = new Hero();
for(int i=0; i<100000; i++)
{
// finalize()
// 垃圾回收机制
// 不需开发人员调用,jvm(java虚拟机自动)
// 当垃圾足够多时,jvm将调用finalize()方法进行垃圾回收
// 当一个对象没有任何一个引用指向时,它就成为了垃圾,满足垃圾回收条件
// 每创建一个对象,前一个对象就失去了引用,变成了垃圾
// 1000/10000都没有效果,垃圾必须足够多时
h = new Hero();
}
}
}
// 虽然没有输出,但确实进行了垃圾回收,练习处我们再看是否真的进行了垃圾回收。
(3)equals()
package ia7_object2_equals;
public class Hero extends Object {
protected String name; // 英雄名称
protected float hp; // 血量
protected int armor;
protected float moveSpeed;
public static void main(String[] args) {
Hero h = new Hero();
Hero h1 = new Hero();
// equals() 判断两个对象是否相同
// 2个对象的内容是否相同
// h h1 指向不同的两个对象
System.out.println(h.equals(h1));
h1 = h;
// h h1 指向同一对象
System.out.println(h.equals(h1));
}
}
运行结果:
拓展: “==”
// 也可以判断2个对象是否相同
package ia7_object3_equi;
public class Hero extends Object{
protected String name; // 英雄名称
protected float hp; // 血量
protected int armor;
protected float moveSpeed;
public static void main(String[] args) {
Hero h = new Hero();
Hero h2 = new Hero();
// == 2个对象是否指向同一对象
System.out.println(h == h2); // false
h2 = h;
System.out.println(h == h2); // true
}
}
// 二者区别
// equals() 与 “==” 判断两个对象是否相同有什么区别
// ==
// 1-基本数据类型 判断值是否相等
// 2-非基本数据类型(引用类型) 判断是否指向同一对象,指向对象的内存地址是否相同,
// equals()
// 1-只能用于非基本数据类型,判断引用是否指向同一对象(如未进行重写)
// 更详细的内容见链接
https://www.cnblogs.com/dolphin0520/p/3592500.html
(4)其他
高级内容,以后深入。
// hashCode() 哈希值的意义 hashCode原理
// Object还提供线程同步相关方法 线程交互
// wait()
// notify()
// notifyAll()
// getClass() 类对象 反射机制
二、练习
重写Item的 toString(), finalize()和equals()方法
toString() 返回Item的name + price
finalize() 输出当前对象正在被回收
equals(Object o) 首先判断o是否是Item类型,然后比较两个Item的price是否相同
package ia7_object4_practice;
public class Item extends Object {
protected String name;
protected float price;
@Override
public String toString() {
// TODO Auto-generated method stub
return (name + price);
}
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
System.out.println("该对象正在被回收(垃圾车拖走)!");
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if (obj instanceof Item) {
Item it = (Item) obj;
return this.price == it.price;
}
return false;
}
public static void main(String[] args) {
Item item = new Item();
item.name = "物品";
item.price = 100000000;
System.out.println(item.toString());
for (int i = 0; i < 100000; i++) {
Item item1 = new Item();
}
LifePotion lp = new LifePotion();
lp.price = 10000000;
System.out.println(item.equals(lp));
lp.price = 100000000;
System.out.println(item.equals(lp));
}
}
运行结果:收工!
我的学习源泉:https://how2j.cn/k/interface-inheritance/interface-inheritance-object/312.html?p=114999
Java自学网站:https://how2j.cn?p=114999