1.3 Object类
- 超类、基类、所有类的直接或间接父类,位于继承树的最顶层。
- 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。
- Object类中所定义的方法,是所有对象都具备的方法。
- Object类型可以存储任何对象。
- 作为参数,可接受任何对象。
- 作为返回值,可返回任何对象。
getClass()方法
public final Class<?> getClass(){}
返回值为Class- 返回引用中存储的实际对象类型。
- 应用:通常用户判断两个引用中实际存储对象类型是否一致。
package demo1;
public class Outer{
private String name;
private int age;
public Outer() {
}
public Outer(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;
}
}
package demo1;
public class TestOuter {
public static void main(String[] args) {
Outer outer = new Outer("tz",18);
Outer outer2 = new Outer("lhh",19);
System.out.println(outer.getClass());
System.out.println(outer2.getClass());
Class<? extends Outer> aClass = outer.getClass();
Class<? extends Outer> aClass2 = outer2.getClass();
if (aClass.equals(aClass2)){
System.out.println("----------");
System.out.println(aClass);
System.out.printf("1");
}else {
System.out.printf("2");
}
}
}
输出值为
class demo1.Outer
class demo1.Outer
----------
class demo1.Outer
1
hashCode()方法
public int hashCode(){}
返回值为int- 返回该对象的哈希马值。
- 哈希值根据对象的地址或字符串或数字使用hash算法出来的int类型的数值。
- 一般情况下相同对象返回相同哈希码。
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
Student s3=s1;
System.out.println(s3.hashCode());
to String()方法
public String toString(){}
- 返回该对象的字符串表示(表现形式)。
- 可以根据程序需求覆盖该方法,如展示对象各个属性值。
Sytem.out.println("------3toString-----");
System.out.println(s1.toString());
System.out.println(s2.toString());
/*第一个输出:
com.qf.chapter11.Student@15db9742
带出了包名称+16进制的哈希值
hashCode()出来的是10进制。两者可以互相转换
*/
/*第二个输出:
com.qf.chapter11.Student@15db9742
*/
equals()方法
public boolean equals(Object obj) {}
- 默认实现为
(this == obj)
,比较两个对象地址是否相同。 - 可进行覆盖,比较两个对象的内容是否相同。
equals方法:判断两个对象是否相同
//注:==比较地址,equals比较值,String的类重写了了equals()方法
//equals在Object类中比的是地址,但是sun公司在String类中重写了equals(),所以比值
- 比较两个引用是否指向同一个对象。
- 判断obj是否为null
- 判断两个引用指向的实际对象类型是否一致
- 强制类型装换
- 依次比较各个属性值是否相同。
@Override
public boolean equals(Object obj){
//判断两个类型是否一样
if(this==obj){
return true;
}
//判断obj是否为空
if(obj==null){
return false
}
//判断是否是同一个类型
if (this.getClass()==obj.getClass()){
return true;
}
//instanceof 判断对象是否是某种类型。。再提醒:如果有继承关系的话,都会相等的
if (obj instanceof Student){
//4强制类型转换
Student s=(Student)obj;
//5比较属性
if(this.name.equals(s.getName())&&this.age=s.getAge()){
return
}
}
}
finalize()方法:日常用的不多
- 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记辣鸡对象,进入辣鸡队列。
- 垃圾对象:没有有效引用指向此对象时,为垃圾对象。
- 垃圾回收:由
GC
销毁垃圾对象,释放数据存储空间。 - 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。
- 手动回收机制:使用System.gc();通知JVM执行垃圾回收。
@Override
protected void finalize() throws Throwable{
System.out.println(this.name+"对象被回收了");
}
System.gc();
System.out.println("辣鸡回收");