Java Object类
Java Object是所有类的父类,也就是说所有类可以使用Object所有方法。
Object类位于java.lang包中,编译时会自动导入,创建类时如果没有明确而继承一个类,那么它就会自动继承Object。同时你也可以进行显式继承。
显式继承:
public class a extends Object{
}
隐式继承:
public class a{
}
类的结构
(1)没有属性
(2)构造方法:
public Object() {}
(3)方法:
在Java中,Object
是所有类的超类(根类),也就是说,所有的类都直接或间接地继承自Object
类。因此,Object
类在Java中具有特殊的地位,它提供了一些通用的方法,可以在所有类中使用。
以下是Object
类的一些重要方法:
1. equals(Object obj): 用于比较两个对象是否相等。默认情况下,该方法是通过比较对象的引用地址来判断对象是否相等。但是,很多类都会重写这个方法,来实现自己的相等判断逻辑。
2. hashCode(): 返回对象的哈希码值。哈希码用于将对象放入哈希表中,通常在使用集合类(如HashMap、HashSet等)时会用到。为了保证在使用哈希表时对象能够被正确找到,必须同时重写equals
和hashCode
方法。
3. toString(): 返回对象的字符串表示。默认情况下,该方法返回的是对象的类名和哈希码组成的字符串。在自定义类中,可以重写toString
方法,返回自定义的字符串表示。
4. getClass(): 返回对象的运行时类,即对象所属的类的Class对象。可以通过getClass().getName()
获取类名。
5. clone(): 用于复制对象,生成一个新的、与原对象相同的对象。要实现正确的对象复制,需要在类中实现Cloneable
接口,并重写clone
方法。
6. finalize(): 用于垃圾回收,当对象被垃圾回收器回收时,会调用该方法。但是,不推荐使用该方法进行资源的释放,因为其调用时间是不确定的。
7. notify()和notifyAll(): 用于线程间的通信,调用这些方法可以唤醒处于等待状态的线程。
8. wait(): 用于线程间的通信,调用这个方法会使当前线程进入等待状态,直到其他线程调用notify()
或notifyAll()
来唤醒它。
Object
类还有其他一些方法,但上述是其中最常用的方法。在自定义类中,如果有特殊的需求,可以重写Object
类中的方法,以满足具体的业务逻辑。
使用举例:
// 自定义一个Person类
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 重写toString()方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class ObjectExample {
public static void main(String[] args) {
// 创建两个Person对象
Person person1 = new Person("Alice", 25);
Person person2 = new Person("Bob", 30);
// 使用equals方法比较对象是否相等
System.out.println("person1.equals(person2): " + person1.equals(person2)); // 输出:false
// 使用hashCode方法获取哈希码值
System.out.println("person1.hashCode(): " + person1.hashCode()); // 输出:某个整数值
System.out.println("person2.hashCode(): " + person2.hashCode()); // 输出:某个整数值
// 使用toString方法获取对象的字符串表示
System.out.println("person1.toString(): " + person1.toString()); // 输出:Person{name='Alice', age=25}
System.out.println("person2.toString(): " + person2.toString()); // 输出:Person{name='Bob', age=30}
// 使用getClass方法获取对象的运行时类
System.out.println("person1.getClass().getName(): " + person1.getClass().getName()); // 输出:Person
// 使用clone方法复制对象
Person person3 = null;
try {
person3 = (Person) person1.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
System.out.println("person3: " + person3); // 输出:Person{name='Alice', age=25}
// 使用wait方法和notify方法进行线程通信(略,需要在多线程环境下使用)
// 使用finalize方法(不推荐使用,这里只是演示)
person1 = null;
person2 = null;
// 强制进行垃圾回收
System.gc();
}
}