API
Object类
package cn.itcast.demo1;
/*
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);
System.out.println("---------------------------");
// Class<?> getClass():返回该调用者的字节码文件对象, 一个类只有一个字节码文件对象.
Class clazz1 = obj1.getClass();
Class clazz2 = obj2.getClass();
System.out.println(clazz1);
System.out.println(clazz2);
System.out.println("---------------------------");
//String toString(): 返回该对象的字符串表示形式, 默认打印的是地址值, 但是不同对象的地址值肯定不同.
// 地址值的组成: 全类名 + @ + 该对象的哈希码的无符号十六进制形式
String s1 = obj1.toString();
String s2 = obj2.toString();
System.out.println(s1);
System.out.println(s2);
System.out.println("---------------------------");
// boolean equals(): 比较两个对象是否相等, 默认比较的是地址值, 无意义, 子类一般都会重写这个方法.
boolean b1 = obj1.equals(obj2);
System.out.println(b1);
}
}
/*
class Person extends Object {
}
class Student extends Person{
}*/
========================
JavaBean类重写Object类中的方法
package cn.itcast.demo2;
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()方法, 用来比较两个对象是否相同的.
/*//自定义版的重写equals()方法, 过程理解即可.
//假设id属性值相同, 两个对象就是同一个对象.
public boolean equals(Object obj) { //s1.equals(s2)
*//*
this: 谁调用, this就表示谁. s1
obj : s2
*//*
//向下转型
Student s2 = (Student)obj;
return this.id == s2.id;
}*/
//通过快捷键的方式生成, 步骤掌握, 代码理解.
@Override
public boolean equals(Object o) { //s1.equals(s2);
//this: s1 o: s2
//比较两个对象的地址值是否相同, 提高效率.
//补充: 如果if语句控制的语句体只有一行代码,那么{}可以省略不写.
if (this == o)
return true;
//判断要比较的两个对象是否是同一个类型的对象, 提高程序的健壮性.
if (o == null || getClass() != o.getClass())
return false;
//向下转型, 正常的逻辑代码.
Student student = (Student) o;
return id == student.id &&
score == student.score &&
name.equals(student.name);
}
}
package cn.itcast.demo2;
/*
需求: 定义一个标准的JavaBean类, 并在测试类中进行测试.
学生类: Student
属性: id(编号), name(名字), score(成绩)
注意:
实际开发中, 我们把两个对象的各个属性值都相同的情况下, 才会认为这两个对象是同一个对象.
*/
public class Test {
public static void main(String[] args) {
//测试toString()方法.
//创建学生类的对象.
Student s1 = new Student(1, "欧阳修", 66);
//输出语句直接打印对象, 默认调用了该对象的toString()方法.
System.out.println(s1);
System.out.println(s1.toString());
//测试equals()方法, s1.equals(s2);
Student s2 = new Student(1, "欧阳修", 66);
boolean b1 = s1.equals(s2);
System.out.println(b1);
}
}
通过快捷键的方式生成equals方法