Java常用类梳理--Object类
其他相关文章:
- Java知识梳理:Java知识梳理
- Java知识梳理–内部类:Java知识梳理–内部类
Object类可以存储任何对象,所有类默认继承Object类。
Object类常用方法:
- getClass()
- 返回引用中存储的实际对象类型
- 通常用于判断两个引用中实际存储对象类型是否一致
- hashCode()
- 返回该对象的哈希码值
- 哈希值是通过对象的地址或字符串或数字使用hash算法计算出的int类型的数值
- 相同对象返回的哈希码相同
- toString()
- 返回该对象的字符串表示
- 可以重写该方法展示对象的其他属性
- equals()
- 对比两个对象地址是否相同,默认实现为(this==obj)
- 可以进行重写,对比两个对象内容是否相同
- finalize()
- 当对象被判定为垃圾对现象时,JVM自动调用此方法用以标记垃圾对象,进入回收站
- 垃圾对象:没有有效引用指向此对象时,对象变为垃圾对象
- 垃圾回收:由GC销毁垃圾对象,释放数据存储空间
- 自动回收机制:JVM内存耗尽,一次性回收所有垃圾对象
- 手动回收:使用System.gc(),通知JVM执行垃圾回收
案例:
public class Student {
private String name;
private int age;
public Student(){}
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;
}
//手动重写toString方法
/*public String toString(){
return name+":"+age;
}*/
//alt+insert自动重写toString方法
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
//判断两个对象是否是同一个引用
if (this == o) return true;
//判断o对象是否为空,或判断两个对象是否是同一个类型
if (o == null || this.getClass() != o.getClass()) return false;
Student student = (Student) o;
return this.age == student.age &&
Objects.equals(this.name, student.name);
}
/*@Override
public int hashCode() {
return Objects.hash(name, age);
}*/
@Override
protected void finalize() throws Throwable {
System.out.println(this.name+"对象被回收了!");
}
}
public class testStudent {
public static void main(String[] args) {
Student s1=new Student("aaa",12);
Student s2=new Student("bbb",21);
// testGetClass(s1, s2);
// testHashCode(s1, s2);
// testToString(s1, s2);
// testEquals(s1, s2);
testFinalize();
}
private static void testFinalize() {
Student s3=new Student("ccc",18);
new Student("ddd",18);
System.gc();
//匿名对象被回收,s3没有被回收
System.out.println("回收垃圾对象");
}
private static void testEquals(Student s1, Student s2) {
System.out.println(s1.equals(s2));
Student s3=new Student("ccc",18);
Student s4=new Student("ccc",18);
System.out.println(s3.equals(s4));
}
private static void testToString(Student s1, Student s2) {
//s1.toString() ===> com.yang.learning.category.commonCategory.ObjectClass.Student@4554617c
//4554617c (16进制) <===> 1163157884 (10进制)
System.out.println(s1.toString());
System.out.println(s2.toString());
}
private static void testHashCode(Student s1, Student s2) {
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
Student s3=s1;
System.out.println(s3.hashCode());
}
private static void testGetClass(Student s1,Student s2) {
Class c1=s1.getClass();
Class c2=s2.getClass();
if(c1==c2){
System.out.println("同类型");
}else {
System.out.println("不同类型");
}
}
}