在Java中创建Object类的对象

时间:2012-09-24 02:06:01

标签: java

在Java中,每个类都隐式扩展了Object类。那么,这是否意味着我们可以创建Object类的对象?


public static void main(String[] args) {

Object ob=new Object();
    // code here ....
 }

当我尝试它时,它编译并成功运行。在这种情况下,有人可以解释我们何时通常创建Object类的对象?

4 个答案:

答案 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