在Java中,每个类都隐式扩展了Object类。那么,这是否意味着我们可以创建Object类的对象?
public static void main(String[] args) {
Object ob=new Object();
// code here ....
}
当我尝试它时,它编译并成功运行。在这种情况下,有人可以解释我们何时通常创建Object类的对象?
答案 0 :(得分:7)
如果要进行同步锁定,可以实例化Object
的实例。
public void SomeClass {
private Object lock = new Object();
private SomeState state;
public void mutateSomeSharedState() {
synchronized(lock) {
//mutate some state
}
}
public SomeState readState() {
synchronized(lock) {
//access state
}
}
}
当this
已用于锁定同一对象的某些其他状态,或者您希望将锁定为私有(即,没有其他人可以使用它)时,可能需要执行此操作。即使没有必要,有些人也喜欢这样做。这仅仅是某人可能会这样做的一个例子。
答案 1 :(得分:2)
通常我们不直接创建Object类的对象。通常,我们创建Object的直接/间接子类的实例。
我们创建Object实例的场景是创建一个synchronize threads的对象。
例如:
Object lock = new Object();
//...
synchronize( lock ) {
//...
//...
}
然而,Object类被用于描述方法和实例变量的参数,这些参数可以假设不同类的值(polymorphism)。
例如:
void example(Object arg) {
// ...
System.out.println( "example=" + arg.toString() );
}
Object foo = returnObject();
有时使用Generics可能比使用Object描述参数和变量更好。
答案 2 :(得分:0)
在大多数情况下,我认为不再明确使用Object
。
自从Java首次亮相Generics以来,投射到Object
类几乎不存在。
答案 3 :(得分:0)
由于java.lang.Object是最多的类,因此它可以替换为我们创建的任何实例。当您不了解类型时,此概念非常有用(例如:有条件地返回不同类型的方法,具有多种类型的集合)
当您想要从String实例化类或使用反射执行方法时也常用。
然而,由于泛型,直接使用Object变得多余。 干杯 Satheesh