提问
Object类是什么?
Object是超类,基类,是所有类的直接或者间接父类,位于最顶端
我们可以随便看一个类的API
Class Math
java.lang.Object
java.lang.Math
任何类如果没写extends的话,都默认集成Object类,所以他们也就拥有了Object类的所有方法
Object类可以存储任何对象
如果是作为参数 那么便可以接受任何对象
如果作为返回值 可以返回任何对象
getclass方法
先看一个程序
结果
运行结果返回的到底是什么?
getclass方法拿到的是一个对象,比如上面这个程序,我们就通过getclass方法拿到了tesk1这个对象,拿到这个对象后,我们就可以访问连得方法
toString方法
方法定义 public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
先看程序
运行结果
toString方法返回的是@加上哈希码值(但是哈希码值被转成了十六进制)
然而,当我们重新toString方法后,他又会返回什么呢
结果
我们可以看出,toString方法默认返回的是哈希码值,如果我们重写了toString方法,他便按照重写后的规则进行输出
hashCode(){}
定义:返回对象的哈希码值,是根据对象的地址,字符串或者数字使用hask算法计算出来的int类型的数值
结果
返回的是一个int类型的数字,如果对象相同,那么他们的哈希码值同样也相同
finalize()
定义: 当对象被判定为垃圾对象时,由JVM自动条用次方法,用以标记垃圾对象进入回收队列
什么是垃圾对象?创建的引用没有被对象对象成功引用,就称为垃圾对象
如下面这个
new Tesk("初d尘",12 );便是一个垃圾对象
自动回收机制: JVM的内存耗尽,一次性回收所有的垃圾对象
手动回收机制: 使用System.gc();通知JVM执行垃圾回收
调用System.gc()不一定就能立马回收,可能程序还在运行,也有可能其他因素
下面是一个垃圾回收程序
当有垃圾成功被回收是,就会在后台打印
System.out.println(name + "已经被回收");
运行程序
不知道什么原因,运行时并没有出现意向中的结果
前两天使用JDK1.8还可以使用,换了版本后,这个方法被弃用了,