关于java:Object类型的对象有什么用处

What are objects of the Object type useful for

我在SCJP手册的练习题中看到了下面的代码

1
Object obj = new Object();

首先,我认为这可能是一个错误,因为我没有使用这样的语句。现在我明白这是一个有效的声明。

我只是想知道如果有的话,这个的实际用途是什么。您可以将Object类型的对象(而不是从Object派生的类)用于什么?


代码声明一个类型为Object的引用,并为其分配一个新分配的Object实例。

现在,类Object的实例似乎没有意义。然而,它们确实有实际的用途。其中一个用途是锁定:

1
2
3
4
5
...
synchronized (obj) {
   ...
}
...


实际使用并不常见(NPE答案就是一个例子),但是由于每个类都继承自对象,所以当您调用它的构造函数时,对象类的构造函数将在某个时候被隐式调用,因此您需要有能力构造一个新的对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Foo {   // implicitly inherits from Object
    public Foo() {
        super(); // Object default constructor call
    }
}

public class Bar extends Foo {
    public Bar() {
        super(); // Foo default constructor call
    }
}

Bar b = new Bar();  // new Bar() calls new Foo() that calls new Object()

需要注意的是,super()(超类构造函数)的调用将被编译器隐式插入。


例如,它可以用于同步:

1
2
3
synchronized (obj) {
   ...
}


使用新的操作符,可以为对象分配内存,并调用其构造函数。通常,创建对象类的实例在日常编码中不会出现太多。同样重要的是要知道您所创建的每个类都是从对象扩展而来的。