我在SCJP书中看到了下面的练习题下面的代码
Object obj = new Object();
首先我认为这可能是一个错误,因为我没有使用这样的语句。现在我明白这是一个有效的陈述。
我只是想了解这个的实际用途(如果有的话)。您可以使用Object
类型的对象(而不是从Object
派生的类)来使用什么?
答案 0 :(得分:16)
代码声明了Object
类型的引用,并为其分配了一个新分配的Object
实例。
现在,类Object
的实例可能看起来毫无意义。但是,它们确实有实际用途。一个这样的用途是锁定:
...
synchronized (obj) {
...
}
...
答案 1 :(得分:1)
它可以用于例如同步:
synchronized (obj) {
...
}
答案 2 :(得分:1)
实际使用并不常见(NPE答案就是一个例子),但由于每个类都继承自Object,当你调用它的构造函数时,Object类的构造函数会在某个时候被隐式调用,所以你需要构建新对象的能力。
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()(超类构造函数)的调用将被编译器隐含地插入。
答案 3 :(得分:0)
使用new运算符,为对象分配内存,并调用其构造函数。 通常,创建Object类的实例在日常编码中不会出现太多。知道你制作的每个课程都来自于对象也很重要。