1. Object类

0. 关键方法

1. equals()方法


2. hashCode()方法

3. toString()方法
全类名:包名 + 类名

4. finalize()方法

代码示例
package com.baidu.www;
public class Finalize_ {
public static void main(String[] args) {
Car bm = new Car("BBA");
bm = null; // Car对象成为垃圾,没有任何引用
// 垃圾回收器回收(销毁)对象
// 在回收前,会调用该对象的finalize方法
// 可以finalize中更改业务逻辑代码,例如释放资源:数据库连接 / 打开文件
System.out.println("a");
System.gc();
/**
* 系统有自己的回收机制
* 但可以尝试主动调用销毁机制
*/
}
}
class Car{
private String name;
public Car(String name) {
this.name = name;
}
// finalize重写
@Override
protected void finalize() throws Throwable {
// super.finalize();
System.out.println("正在销毁...");
}
}
运行结果
a
正在销毁...
2. 具体代码
(1)类成员方法
代码示例
package com.baidu.www;
/**
* Object类:
* 概述:
* 类层次结构最顶层的基类,所有类都直接或间接的继承自Object类
* 构造方法:
* public Object()
* 成员方法:
* int hashCode(); // 返回对象的哈希码值
* Class<?> getClass(); // 返回该调用者的字节码文件对象
* String toString(); // 返回该对象的字符串表示形式
* boolean equals(); // 比较两个对象是否相等
* 注意:
* java.lang包下的类可以直接使用,不需要导包。
*/
public class Test {
public static void main(String[] args) {
// 非静态方法
// 通过 对象名. 的形式调用
// 1. 创建Object类型的对象
Object obj1 = new Object();
Object obj2 = new Object();
// 2. 测试Object类中的成员方法
// int hashCode();
// 不同对象的哈希码值一般不同
int code1 = obj1.hashCode();
int code2 = obj2.hashCode();
System.out.println(code1);
System.out.println(code2);
// Class<?> getClass();
// 返回调用者的字节码文件对象,一个类只有一个字节码文件对象
Class clazz1 = obj1.getClass();
Class clazz2 = obj2.getClass();
System.out.println("===========================");
System.out.println(clazz1);
System.out.println(clazz2);
// String toString();
// 返回该对象的字符串表示形式
// 默认打印的是地址值,但是不同对象的地址值肯定不同
// 地址值的组成:全类名 @ 对象的哈希码的无符号十六进制形式
/**
* public String toString() {
* return getClass().getName() + "@" + Integer.toHexString(hashCode());
* }
*
* getClass().getName() 全类名
* Integer.toHexString(hashCode()) 十六进制的哈希码值
*/
String s1 = obj1.toString();
String s2 = obj2.toString();
System.out.println("===========================");
System.out.println(s1);
System.out.println(s2);
// boolean equals();
// 比较两个对象是否相等 默认比较的是地址值,无意义
// 子类一般都会重写这个方法
boolean b1 = obj1.equals(obj2);
System.out.println("===========================");
System.out.println(b1);
}
}
(2)JavaBean重写Object类方法

(1)Student类
代码示例
package com.baidu.www;
import java.util.Objects;
// 学生类
public class Student {
// 成员变量
private int id; // 编号
private String name; // 姓名
private int score; // 成绩
// 构造方法
public Student() {
}
public Student(int id, String name, int score) {
this.id = id;
this.name = name;
this.score = score;
}
// 成员方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
// toString方法:将对象转成其对应的字符串形式
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", score=" + score +
'}';
}
// equals方法:用来比较两个对象是否相同
// 自定义版本的重写
// public boolean equals(Object obj){ // s1.equals(s2)
// /*
// this:谁调用,表示谁 s1
// obj:s2
// */
// return this.id == ((Student) obj).id; // 向下转型
// }
// 通过快捷键的方式生成
@Override
public boolean equals(Object o) {
// 比较两个对象的地址值是否相同
// 提高效率
if (this == o)
return true;
// 省略this
// 判断要比较的两个对象是否是同一个类型的对象
// 提高程序健壮性
if (o == null || getClass() != o.getClass())
return false;
// 向下转型
// 正常的逻辑代码
Student student = (Student) o;
return id == student.id
&& score == student.score
&& Objects.equals(name, student.name);
}
}
(2)Test类
代码示例
package com.baidu.www;
/**
* 需求:
* 定义一个标准的JavaBean类,并在测试类中进行测试
*
* 学生类: Student
* 属 性: id (编号)
* name (名字)
* score(成绩)
*
* 注意:
* 实际开发中,我们把两个对象各个属性值都相同的情况下,才会认为这两个对象是同一个对象
*/
public class Test {
public static void main(String[] args) {
// 测试toString()方法
// 创建学生类的对象
Student s1 = new Student(1,"刷刷",100);
Student s2 = new Student(1,"刷刷",100);
// 输出语句直接打印对象
// 默认调用了该对象的toString方法
System.out.println(s1);
System.out.println(s1.toString());
// 测试equals方法 s1.equals(s2)
System.out.println(s1.equals(s2));
}
}
3. 练习题


浙公网安备 33010602011771号