目录
(所有类的父类)在java.lang包下
1、在类中定义的方法
equals和hashcode重写的时候一定要一起写
finalize方法
equals方法 //判断两个对象的虚地址是否相等public boolean equals(Object obj)
hashcode方法 //哈希码值public int hashcode() 两个引用的虚地址相同时返回相同的值,反之
toString方法 //返回该对象的字符串表示形式public String toString()
clone方法
getclass方法
public final Class<T> getClass() //返回Object的运行时类
2、==和equals
public class Course {
private String name;
private double score;
public Course() {
}
public Course(String name, double score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
//打印name和score的值
//方案1:System.out.println()打印拼接对象属性值,方案不是特别好,每打印一个对象都要拼接属性
//方案2:重写toString()方法,直接打印对象就可以了,代码不会重复写
@Override
public String toString() {
return "Course{" +
"name='" + name + '\'' +
", score=" + score +
'}';
}
//重写equals和hashcode 有个原则
//1、equals和hashcode要同时重写
//2、重写的结果:两个对象比较equals 返回true , hashcode 返回必须是true
//两个对象比较hashcode 返回true equals返回的不一定是true(可以是true也可以是false)
//因为我们自己在业务上判断两个对象相等 使用equals方法,不使用hashcode,
//但是在集合类中,判断两个对象相等,优先使用hashcode,如果能判断false结果,就不能调用equals方法,hashcode返回true时,可使用equals;
//一般情况下,java会大量使用集合,所以要符合集合判断两个对象的逻辑
//重写equals可以按照业务特殊需求来定制判断是否相等
//但是==没法定制,就是判断2个对象的地址是否相等
@Override
public boolean equals(Object o) {
//参数o,表示传进来的对象,本类对象的引用this比较
//需求:业务上提个要求,两个课程如果名称相同,就认为是相等
if (o==null){
return true;
}else if (!(o instanceof Course)){
return false;//传进来的对象不是Course类的对象,返回false
}else{
//判断对象的name字符串是否相等
if(this.name==((Course) o).name){
return true;
}else{
return false;
}
}
//判断对象的name字符串是否相等
}
@Override
public int hashCode() {
return this.name.hashCode();
}
public static void main(String[] args) {
Course c1=new Course("java",90);
Course c2=new Course("java",80);
//对象的toString
System.out.println(c1);
System.out.println(c2);
System.out.println("========================");
//Object1的toString
System.out.println(c1.toString());
System.out.println(c2.toString());
System.out.println("=========对象相等=========");
Course c3=c1;
//判断两个对象的地址值是否相等,使用==判断对象相等并没有调用equals方法,==表示判断两个
System.out.println(c1==c2);
System.out.println(c1==c3);
System.out.println("=========equals=========");
//比较两个对象的地址值是否相等
System.out.println(c1.equals(c2));
System.out.println(c1.equals(c3));
}
}
Run:
Course{name='java', score=90.0}
Course{name='java', score=80.0}
========================
Course{name='java', score=90.0}
Course{name='java', score=80.0}
=========对象相等=========
false
true
=========equals=========
true
true
3、finallize方法
Java 技术允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去之前,做必要的清理工作。这个方法是由垃圾收集器在确定对象没有被引用时对这个对象调用的。它是在Object 类中定义的,因此所有的类都继承了它。子类覆盖finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。