辞梦

导航

7. Java——Object

Object类

超类、基类,所以类的直接或间接父类,位于继承树的最顶层

任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承

Object类中所定义的方法,是所有对象都具备的方法

Object类型可以存储任何对象

  • 作为参数,可接受任何对象

  • 作为返回值,可返回任何对象

getClass()方法

public final Class<?> getClass(){}

返回引用中存储的实际对象类型

应用:通常用于判断两个引用中实际存储对象类型是否一致

public class Student {
   private String name;
   private int age;
   public Student(String name, int age) {
       this.name = name;
       this.age = age;
  }
   public String getName() {
       return name;
  }
   public void setName(String name) {
       this.name = name;
  }
   public int getAge() {
       return age;
  }
   public void setAge(int age) {
       this.age = age;
  }
}

 

public class Test {
   public static void main(String[] args) {
       Student s1 = new Student("aaa", 20);
       Student s2 = new Student("bbb", 22);
       //判断s1和s2是不是同一类型
       Class class1 = s1.getClass();
       Class class2 = s2.getClass();
       if (class1 == class2){
           System.out.println("s1和s2属于同一类型");
      }else {
           System.out.println("s1和s2不属于同一类型");
      }
  }
}
/*
s1和s2属于同一类型
*/

hashCode()方法

public int hashCode(){}

返回该对象的哈希码值

哈希值根据对象的地址字符串数字使用hash算法计算出来的int类型的数值

一般情况下相同对象返回相同哈希值

public class TesthashCode {
   public static void main(String[] args) {
       Student s1 = new Student("aaa", 20);
       Student s2 = new Student("bbb", 22);

       System.out.println(s1.hashCode());
       System.out.println(s2.hashCode());
       Student s3 = s1;
       System.out.println(s3.hashCode());
  }
}
/*
460141958
1163157884
460141958
*/

toString()方法

public String toString(){}

返回该对象的字符串表示(表现形式)

可以根据程序需求覆盖该方法,如展示对象各个属性值

可根据需要进行重写

equals()方法

public boolean equals (Object obj){}

默认实现为(this==obj),比较两个对象地址是否相同

可进行覆盖,比较两个对象的内容是否相同

equals()方法覆盖步骤

  • 比较两个引用是否指向同一个对象

  • 判断obj是否为null

  • 判断两个引用指向的实际对象类型是否一致

  • 强制类型转换

  • 依次比较各个属性值是否相同

    public boolean equals(Object obj) {
       if (this==obj){
           return true;
      }
       if (obj==null)
           return false;
//       if (this.getClass()==obj.getClass())
//       instenceof 判断对象是否是某种类型
       if (obj instanceof Student){
           Student s = (Student) obj;
           if (this.name.equals(s.getName()) && this.age==s.getAge()){
               return true;
          }
      }
       return false;
  }
Student s3 = new Student("xiix",10);
Student s4 = new Student("xiix",10);
System.out.println(s3.equals(s4));
//true

finalize()方法

当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列

垃圾对象:没有有效引用指向此对象时,为垃圾对象

垃圾回收:由GC销毁垃圾对象,释放数据存储空间

自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象

手动回收机制:使用System.gc();通知JVM执行垃圾回收

 protected void finalize() throws Throwable {
       System.out.println(this.name+"对象被回收");
  }
public class TestFinalize {
   public static void main(String[] args) {
//       Student s1 = new Student("aa", 20);
////       Student s2 = new Student("bb", 20);
////       Student s3 = new Student("cc", 20);
////       Student s4 = new Student("ee", 20);
////       Student s5 = new Student("ff", 20);
       new Student("aa", 20);
       new Student("bb", 20);
       new Student("cc", 20);
       new Student("ee", 20);
       new Student("ff", 20);
       //回收垃圾
       System.gc();
       System.out.println("回收垃圾");
  }
}
/*
回收垃圾
aa对象被回收
ff对象被回收
ee对象被回收
cc对象被回收
bb对象被回收
*/
 

posted on 2023-02-09 20:58  辞梦  阅读(21)  评论(0)    收藏  举报