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关键字,它会显示一个错误。实际上,我正在学习匿名内部类的概念,并在这里卡住了。需要帮助....有人能解释一下吗?
6条答案
按热度按时间lrl1mhuk1#
Java中的static关键字意味着变量或函数在该类的所有示例之间共享,而不是在实际对象本身之间共享。
在您的示例中,您尝试在
static
方法中访问资源,因此,我们在没有创建类
Flavor1Demo
的示例的情况下访问的任何东西都必须是static
资源。如果要从
Demo
类中删除static
关键字,代码应如下所示:在这里,您可以看到,我们创建了
Flavor1Demo
的示例,然后获取non-static
资源d
。上面的代码不会抱怨编译错误。希望能有所帮助!
iq0todco2#
从
static Demo d = new Demo()
中删除static
关键字会出错,因为您在main
方法(static
)中使用Demo
类的对象d
。从static Demo d = new Demo()
中删除static
关键字时,你正在使对象d
属于你的Demo
类non-static
并且non-static
对象不能从static
上下文引用.如果您从
main
方法中删除d.show();
,同时从static Demo d = new Demo()
中删除static
关键字,则不会出现此错误。现在,如果你想调用
Demo
类的show
方法,你必须在main
方法中创建一个Demo
类的对象。5vf7fwbs3#
这是因为您试图使用属于静态方法中对象的
d
。然后必须在main方法中创建该对象。
static属于类,而不是对象本身。
I want to know the difference between static method and non-static method
wz3gfoph4#
这取决于你所处的环境。
main(String[])
方法是一个静态方法。简单地说,这意味着它不存在于
Flavor1Demo
的示例中,这里没有this
。如果您将d
设置为非静态,它将只存在于Flavor1Demo
的示例中,因此无法从main
访问它,除非您先构建一个示例(新Flavor1Demo().d.show();
但是静态变量将链接到类而不是示例,这意味着你可以从静态上下文访问它,在你的情况下,主方法.
mrphzbgm5#
为了在不创建对象的情况下访问主类中的方法或变量,这里我们定义了匿名内部类,在其中我们创建了静态类型的对象,以便在不创建对象的情况下直接从主类访问。
xmjla07d6#
Java中没有静态对象这回事,指向对象的变量可以是静态的,但是对象是静态的这个概念是没有意义的。
静态变量或任何其他静态类型成员的用途是将成员附加到类型本身,而不是附加到类型的示例。