Java api、Object类和hashCode()方法-11月3日讲课内容
API概述
API(Application Programming Interface) 应用程序编程接口
编写一个机器人程序去控制机器人踢足球,程序就需要向机器人发出向前跑、向后跑、射门、抢球等各种命令,没有编过程序的人很难想象这样的程序如何编写。但是对于有经验的开发人员来说,知道机器人厂商一定会提供一些用于控制机器人的Java类,这些类中定义好了操作机器人各种动作的方法。其实,这些Java类就是机器人厂商提供给应用程序编程的接口,大家把这些类称为Xxx Robot API。本章涉及的Java API指的就是JDK中提供的各种功能的Java类。
学习汉语和学习编程的异同点
相同点
- 基本语法
- 大量成语
- 写文章的手法和技巧
不同点
- 学习汉语 必须先学后用
- 学习编程 可以现用现学
Object 类
Object类是类层次结构的根类,所有类都直接或者间接的继承自该类
构造方法
public Object()
【注意】Object 只有一个无参构造方法
toString()
作用
用来返回对象的字符串表示形式
public String toString()
返回值为:包名.类名@当前对象在内存空间中的首地址
getClass().getName() + '@' + Integer.toHexString(hashCode())
重写toString()
由于默认情况下的数据对我们来说没有意义,一般会重写该方法用以展示对象的字段信息
public class Student {
String name;
int age;
// 重写 toString 方法
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
测试
public class TestStudent {
public static void main(String[] args) {
Student student = new Student("Buffer",23);
System.out.println(student);
}
}
结果
Student [name=Buffer, age=23]
总结
toString方法用来展示一些对象的基本信息:完整的包名.类名@堆内存地址,通常我们用快捷键来重写这个方法来获取我们需要的数据信息
equals()
作用
用来比较两个对象的地址是否相同
public boolean equals(Object obj) {
return (this == obj);
}
如果调用此方法的对象与 obj 的地址相同(即为同一个对象),返回true,否则返回false
重写equals()思路
一般需要重写 equals() 方法用以判断两个对象的字段是否相同
1、判断两个对象的地址是否相同
2、判断两个对象的类型是否一致
3、判断两个对象所存储的数据是否相同
重写equals()
public class Student {
String name;
int age;
// 重写 equals 方法
@Override
public boolean equals(Object obj) {
// 判断是否是同一个对象(地址相同),如果是返回 true
if (this == obj) {
return true;
}
// 判断数据类型是否一致,如果不一致返回 false
if (!(obj instanceof Student)) {
return false;
}
// 强制类型转换为当前类对象
Student student = (Student) obj;
// 所有字段全部满足时返回 true ,否则返回false
return this.name.equals(student.name) && this.age == student.age;
}
}
测试
public class TestStudent {
public static void main(String[] args) {
Student student1 = new Student("Buffer",23);
Student student2 = new Student("Banlance",22);
Student student3 = new Student("Buffer",23);
System.out.println(student1.equals(student2));
System.out.println(student1.equals(student3));
}
}
结果
false
true
【注意】基本数据类型不能使用 equals() 方法
总结
1、equals方法用来判断两个对象是否相同,默认比较的是两个对象的内存首地址。我们可以通过重写equals方法实现对两个对象的比较
2、注意equals方法的调用者,不同的调用者调用方法是不一样的
hashCode()
作用
返回对象的哈希码值,具有唯一指向性
public int hashCode()
重写hashCode()
hashCode方法要求必须和 equals() 方法的结果是对应的,如果两个对象的 equals 的结果为 true ,那这两个对象的 hashCode 的值一定相同,所以只要重写了 equals 方法,就必须重写 hashCode 方法
public class Student {
String name;
int age;
// 重写 equals 方法
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof Student)) {
return false;
}
Student student = (Student) obj;
return this.name.equals(student.name) && this.age == student.age;
}
// 重写 hashCode 方法
@Override
public int hashCode() {
// 调用 Objects 工具类的 hash 方法,根据传入的参数生成一个指定的 hashCode 值
return Objects.hash(name, age);
}
}
测试
public class TestStudent {
public static void main(String[] args) {
Student student1 = new Student("Buffer",23);
Student student2 = new Student("Banlance",22);
Student student3 = new Student("Buffer",23);
System.out.println(student1.equals(student2));
System.out.println(student1.equals(student3));
System.out.println(student1.hashCode());
System.out.println(student2.hashCode());
System.out.println(student3.hashCode());
}
}
结果
false
true
1892650872
247063595
1892650872
student1 和 student3 的 equals 方法返回值是 true ,所以他们的 hashCode 值相同
总结
1、hashCode()用来获取当前对象的哈希值,表示对象的唯一标识。如果重写equals()则必须重写hashCode()方法
2、equals相同hashCode一定相同,hashCode相同equals不一定相同
getClass()
获取当前对象的 Class 对象(字节码对象),直接打印会显示包含完整的包名,类名的信息
public final native Class<?> getClass();
class Cat {}
public class GetClassDemo {
public static void main(String[] args) {
Cat cat = new Cat();
System.out.println(cat.getClass());
}
}
finalize()
protected void finalize()
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
总结
Object类是所有类的基类,提供了一个无参的构造方法和一些公共方法
通过重写toString方法来获取对象中的数据
通过重写equals方法和hashCode方法来判断两个对象是否相同,这两个方法必须同时重写
getClass用来获取Class对象
finalize方法用于垃圾回收,不可控
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »