java中类object位于_java常用类:Object类

Object类

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

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

Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类。

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

Object类型可以存储任何对象:

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

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

getClass()方法

public final Class> getClass(){}

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

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

public class TestStudent {

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类型的数值

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

System.out.println(s1.hashCode());

System.out.println(s2.hashCode());

Student s3=s1;

System.out.println(s3.hashCode());

//结果

//460141958

//1163157884

//460141958 s3与s1内存一样,所以哈希码值一样

toString()方法

public String toString(){}

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

默认返回格式:对象的 class 名称 + @ + hashCode 的十六进制字符串

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

//toString()

System.out.println(s1.toString());

System.out.println(s2.toString());

//结果

//com.wu.Object.Student@1b6d3586

//com.wu.Object.Student@4554617c

//重写toString()方法

@Override

public String toString() {

return "Student{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

//结果

//Student{name='aaa', age=20}

//Student{name='bbb', age=22}

equals()方法

public boolean equals(Object obj){}

默认实现为( this==obj ),是判断两个对象引用指向的是同一个对象,即比较两个对象地址是否相同

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

如果子类重写了 equals() 方法,就需要重写 hashCode() 方法,比如 String 类就重写了 equals() 方法,同时也重写了 hashCode() 方法

class RunoobTest {

public static void main(String[] args) {

// Object 类使用 equals() 方法

// 创建两个对象

Object obj1 = new Object();

Object obj2 = new Object();

// 判断 obj1 与 obj2 是否相等

// 不同对象,内存地址不同,不相等,返回 false

System.out.println(obj1.equals(obj2)); // false

// obj1 赋值给 obj3

// String 重写了 equals() 方法

// 对象引用,内存地址相同,相等,返回 true

Object obj3 = obj1;

System.out.println(obj1.equals(obj3)); // true

}

}

//结果

//false

//true

equals()方法覆盖步骤

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

判断obj是否为null

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

强制类型转换

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

此处先简单了解下:

当equals()方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规约定:值相同的对象必须有相同的hashCode。

object1.equals(object2)为true,hashCode也相同;

hashCode不同时,object1.equals(object2)为false;

hashCode相同时,object1.equals(object2)不一定为true;

//重写equals()方法

@Override

public boolean equals(Object o) {

//判断两个对象是否是同一个引用

if (this == o)

return true;

//判断o是否null;判断是否是同一个类型,也可以用instanceof判断

if (o == null || getClass() != o.getClass())

return false;

//强制类型转换

Student student = (Student) o;

return age == student.age &&

Objects.equals(name, student.name);

}

//重写hashCode()方法

//@Override

//public int hashCode() {

//return Objects.hash(name, age);

// }

finalize()方法

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

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

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

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

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

//重写finalize()方法

@Override

protected void finalize() throws Throwable {

System.out.println(this.name+"对象被回收了");

}

//测试

Student s1=new Student("aaa",20);

Student s2=new Student("bbb",20);

new Student("ccc",20);

new Student("ddd",20);

//回收垃圾

System.gc();

System.out.println("回收垃圾");

//结果:

//回收垃圾

//ddd对象被回收了

//ccc对象被回收了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值