在Java中创建静态对象的目的是什么?

vd2z7a6w  于 2023-02-18  发布在  Java
关注(0)|答案(6)|浏览(122)
class Demo {
   void show() {
      System.out.println("i am in show method of super class");
   }
}
class Flavor1Demo {

   //  An anonymous class with Demo as base class
   static Demo d = new Demo() {
       void show() {
           super.show();
           System.out.println("i am in Flavor1Demo class");
       }
   };
   public static void main(String[] args){
       d.show();
   }
}

在上面的代码中,我不理解创建Demo类的对象d的用法,在它前面有static关键字。如果我删除了static关键字,它会显示一个错误。实际上,我正在学习匿名内部类的概念,并在这里卡住了。需要帮助....有人能解释一下吗?

lrl1mhuk

lrl1mhuk1#

Java中的static关键字意味着变量或函数在该类的所有示例之间共享,而不是在实际对象本身之间共享。
在您的示例中,您尝试在static方法中访问资源,

public static void main(String[] args)

因此,我们在没有创建类Flavor1Demo的示例的情况下访问的任何东西都必须是static资源。
如果要从Demo类中删除static关键字,代码应如下所示:

class Flavor1Demo {

// An anonymous class with Demo as base class
Demo d = new Demo() {
    void show() {
        super.show();
        System.out.println("i am in Flavor1Demo class");
    }
};

public static void main(String[] args) {

    Flavor1Demo flavor1Demo =  new Flavor1Demo();
    flavor1Demo.d.show();
}
}

在这里,您可以看到,我们创建了Flavor1Demo的示例,然后获取non-static资源d。上面的代码不会抱怨编译错误。
希望能有所帮助!

iq0todco

iq0todco2#

static Demo d = new Demo()中删除static关键字会出错,因为您在main方法(static)中使用Demo类的对象d。从static Demo d = new Demo()中删除static关键字时,你正在使对象d属于你的Demonon-static并且non-static对象不能从static上下文引用.
如果您从main方法中删除d.show();,同时从static Demo d = new Demo()中删除static关键字,则不会出现此错误。
现在,如果你想调用Demo类的show方法,你必须在main方法中创建一个Demo类的对象。

public static void main(String[] args){
     Demo d = new Demo(); 
     d.show();
 }
5vf7fwbs

5vf7fwbs3#

这是因为您试图使用属于静态方法中对象的d
然后必须在main方法中创建该对象。
static属于类,而不是对象本身。
I want to know the difference between static method and non-static method

wz3gfoph

wz3gfoph4#

这取决于你所处的环境。
main(String[])方法是一个静态方法。
简单地说,这意味着它不存在于Flavor1Demo的示例中,这里没有this。如果您将d设置为非静态,它将只存在于Flavor1Demo的示例中,因此无法从main访问它,除非您先构建一个示例(新Flavor1Demo().d.show();
但是静态变量将链接到类而不是示例,这意味着你可以从静态上下文访问它,在你的情况下,主方法.

mrphzbgm

mrphzbgm5#

为了在不创建对象的情况下访问主类中的方法或变量,这里我们定义了匿名内部类,在其中我们创建了静态类型的对象,以便在不创建对象的情况下直接从主类访问。

xmjla07d

xmjla07d6#

Java中没有静态对象这回事,指向对象的变量可以是静态的,但是对象是静态的这个概念是没有意义的。
静态变量或任何其他静态类型成员的用途是将成员附加到类型本身,而不是附加到类型的示例。

相关问题