Object类:
所有类的直接或者间接父类,根类,任何一个类如果没有写继承的父类,则默认继承Object,所以Object类中定义的方法是所有类都具备的。
1.getClass():返回引用中存储的对象的实际类型(可以判断两个引用中存储的对象的实际类型是否一致)。
public class TestAnimal {
public static void main(String[] args) {
Animal a1 = new Dog();
Animal a2 = new Dog();
Animal a3 = new Cat();
System.out.println(a1.getClass());//返回引用中存储的对象的实际类型
System.out.println(a2.getClass());
//判断a1引用中存储的对象的实际类型是否与a2引用中存储的对象的实际类型相同
System.out.println(a1.getClass()==a2.getClass());//true
System.out.println(a1.getClass()==a3.getClass());//false
}
}
class Animal{}
class Dog extends Animal{}
class Cat extends Animal{}
2.hashCode():返回对象的哈希码值(一般是通过将该对象的内部地址转换成的一个整数)。
3.toString():返回该对象的String形式(一般为了方便打印输出对象的内容,可以选择覆盖toString())。
class Worker{
private name,age,sex,salary;
//如果父类提供的方法无法满足子类需求 可以选择覆盖父类中的方法 方法实现按照自己的要求书写
//覆盖要求:方法名,参数表,返回值类型相同,访问修饰符子类和父类相同或者比父类更宽
@Override
public String toString() {
return name+"\t"+age+"\t"+sex+"\t"+salary;
}
}
4.equals():比较两个对象的内容是否一致,内容相同返回true,否则返回false。
==:
如果等号两端是基本数据类型的变量,则比较数值
如果等号两端是引用数据类型的变量,则比较地址
equals()比较的是内容
class Worker{
//覆盖equals5步
@Override
public boolean equals(Object o) {//w1.equals(w2) Object o = w2;
//自反性 (比较两个引用是否指向同一个对象)
if(this==o)return true;
//非空性(判断o引用是否为null)
if(o==null)return false;
//一致性(判断两个引用中存储的对象的实际类型是否一致)
if(this.getClass()!=o.getClass())return false;
//强转
Worker w = (Worker)o;
//比较两个对象的具体的属性值
//注意:o为Object类型的引用 父类引用仅可调用父类中声明的属性和方法 不可调用子类中独有的属性和方法
if(this.name.equals(w.name) && this.age==w.age && this.sex==w.sex
&& this.salary==w.salary) {//这些信息一样才算一样,返回true
return true;
}else {
return false;
}
}
}
class TestEquals{
public static void main(String[] args){
int a = 1;
int b = 2;
System.out.println(a==b);//false
Worker w1 = new Worker("zs",20,'男',1000.0);
Worker w2 = new Worker("li",30,'女',2000.0);
Worker w3 = new Worker("ww",40,'男',3000.0);
System.out.println(w1==w2);//false
System.out.println(w1.equals(w2));//true
System.out.println(w1.equals(w3));//false
}
}
5.finalize():垃圾回收器在回收垃圾对象时调用的方法。
1.垃圾对象:没有引用指向的对象
public class TestFinalize {
public static void main(String[] args) {
Student s = new Student();
s = null;//此引用没有指向实际的对象 此时刚创建的Student对象属于垃圾对象
}
}
class Student{}
2.垃圾回收:销毁垃圾对象,并释放数存储空间。
3.垃圾回收器(GC)何时回收垃圾对象?
1)自动回收机制:JVM内存耗尽,不能再为新创建的对象分配内存空间,一次性回收所有的垃圾对象(会自动调用Object类中的finalize()方法)
public class TestFinalize {
public static void main(String[] args) {
Student s = new Student();
s = null;//此引用没有指向实际的对象 此时刚创建的Student对象属于垃圾对象
for(int i=0;i<1000000000;i++) {
new Student();
}
}
}
class Student{
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("垃圾回收了");
}
}
2)手动回收机制:使用System.gc(),通知JVM做垃圾回收,如果GC空闲则回收;如果繁忙则暂时不回收。
public class TestFinalize {
public static void main(String[] args) {
Student s = new Student();
s = null;//此引用没有指向实际的对象 此时刚创建的Student对象属于垃圾对象
System.gc();
}
}
class Student{
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("垃圾回收中......");
}
}