Java中Object类常用的12个方法(小结)
在Java中,Object类是所有类的根类,其包含了许多常用的方法。以下是Java中Object类常用的12个方法:
equals
equals
方法用来比较两个对象是否相等。默认情况下,equals
方法比较的是对象的引用地址,即比较的是两个对象是否是同一个对象。如果我们希望比较它们的内容是否相等,就需要在自定义类中重写该方法。
示例代码:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (!(obj instanceof Person)) {
return false;
}
Person other = (Person) obj;
return this.name.equals(other.name) && this.age == other.age;
}
}
Person p1 = new Person("Tom", 18);
Person p2 = new Person("Tom", 18);
System.out.println(p1.equals(p2)); // true
hashCode
hashCode
方法返回对象的哈希码,如果两个对象相等,那么它们的哈希码一定相等。如果在自定义类中重写了equals
方法,也应该重写hashCode
方法,以便可以使使用该对象的哈希数据结构(如HashSet或HashMap)更加高效。
示例代码:
public class Person {
private String name;
private int age;
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (!(obj instanceof Person)) {
return false;
}
Person other = (Person) obj;
return this.name.equals(other.name) && this.age == other.age;
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
Person p1 = new Person("Tom", 18);
Person p2 = new Person("Tom", 18);
System.out.println(p1.equals(p2)); // true
System.out.println(p1.hashCode() == p2.hashCode()); // true
toString
toString
方法返回一个包含对象信息的字符串,通常它被用来调试类的实例。
示例代码:
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
Person p1 = new Person("Tom", 18);
System.out.println(p1); // Person{name='Tom', age=18}
getClass
getClass
方法返回对象的类对象,它可以用于获得该对象的具体类型,或者在反射中使用。
示例代码:
Person p1 = new Person("Tom", 18);
Class<? extends Person> clazz = p1.getClass();
System.out.println(clazz.getName()); // com.example.Person
finalize
finalize
方法是Java中对象的垃圾回收方法,它指定了在对象被回收前需要执行哪些操作。这个方法一般不需要手动调用,而是由垃圾回收器自动调用。
示例代码:
public class Person {
@Override
protected void finalize() {
System.out.println("The object is being finalized.");
}
}
Person p1 = new Person();
p1 = null;
System.gc(); // 建议垃圾回收器尽快回收垃圾
clone
clone
方法用于创建当前对象的一个副本(浅拷贝),一般在需要复制某个对象时使用。需要注意的是,在使用clone
方法时,需要保证被复制的对象实现Cloneable
接口,否则在运行时会抛出CloneNotSupportedException
异常。
示例代码:
public class Person implements Cloneable {
private String name;
private int age;
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
Person p1 = new Person("Tom", 18);
Person p2 = (Person) p1.clone();
System.out.println(p1 == p2); // false
notify和wait
notify
和wait
方法是在多线程编程中使用的方法,它们用于在共享资源的同步机制中协作,实现线程的等待和唤醒。
示例代码:
public class SharedResource {
private int value;
synchronized void setValue(int value) {
this.value = value;
notify();
}
synchronized int getValue() throws InterruptedException {
while (value == 0) {
wait();
}
int result = value;
value = 0;
return result;
}
}
SharedResource sr = new SharedResource();
Thread t1 = new Thread(() -> {
try {
Thread.sleep(1000); // 让t2先运行
sr.setValue(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
Thread t2 = new Thread(() -> {
try {
int result = sr.getValue();
System.out.println(result); // 输出10
} catch (InterruptedException e) {
e.printStackTrace();
}
});
t1.start();
t2.start();
notifyAll
notifyAll
方法用于唤醒在该对象上等待的所有线程。
示例代码:
public class SharedResource {
private int value;
synchronized void setValue(int value) {
this.value = value;
notifyAll();
}
synchronized int getValue() throws InterruptedException {
while (value == 0) {
wait();
}
int result = value;
value = 0;
return result;
}
}
SharedResource sr = new SharedResource();
Thread t1 = new Thread(() -> {
try {
Thread.sleep(1000); // 让t2先运行
sr.setValue(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
Thread t2 = new Thread(() -> {
try {
sr.getValue();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
Thread t3 = new Thread(() -> {
try {
sr.getValue();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
t1.start();
t2.start();
t3.start();
finalize
finalize
方法是Java中对象的垃圾回收方法,它指定了在对象被回收前需要执行哪些操作。这个方法一般不需要手动调用,而是由垃圾回收器自动调用。
示例代码:
public class Person {
@Override
protected void finalize() {
System.out.println("The object is being finalized.");
}
}
Person p1 = new Person();
p1 = null;
System.gc(); // 建议垃圾回收器尽快回收垃圾
getClass
getClass
方法返回对象的类对象,它可以用于获得该对象的具体类型,或者在反射中使用。
示例代码:
Person p1 = new Person("Tom", 18);
Class<? extends Person> clazz = p1.getClass();
System.out.println(clazz.getName()); // com.example.Person
finalize
finalize
方法是Java中对象的垃圾回收方法,它指定了在对象被回收前需要执行哪些操作。这个方法一般不需要手动调用,而是由垃圾回收器自动调用。
示例代码:
public class Person {
@Override
protected void finalize() {
System.out.println("The object is being finalized.");
}
}
Person p1 = new Person();
p1 = null;
System.gc(); // 建议垃圾回收器尽快回收垃圾
getClass
getClass
方法返回对象的类对象,它可以用于获得该对象的具体类型,或者在反射中使用。
示例代码:
Person p1 = new Person("Tom", 18);
Class<? extends Person> clazz = p1.getClass();
System.out.println(clazz.getName()); // com.example.Person
总结
Java中Object类提供了许多常用的方法,包括equals
、hashCode
、toString
、getClass
、clone
、notify
、wait
、notifyAll
、finalize
等。学习并掌握这些方法可以帮助我们更加高效地设计和开发Java程序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中Object类常用的12个方法(小结) - Python技术站