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关键字,则会显示错误。实际上,我正在经历一个匿名的内部阶级概念并被困在这里。需要帮助....有人可以解释一下吗?
答案 0 :(得分:4)
Java中的static关键字表示变量或函数在该类的所有实例之间共享,而不是实际的对象本身。
在您的情况下,您尝试使用static
方法
public static void main(String[] args)
因此,我们在不创建类Flavor1Demo
的实例的情况下访问的任何内容都必须是static
资源。
如果您要从static
课程中删除Demo
关键字,您的代码应如下所示:
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
上面的代码不会抱怨编译错误。
希望它有所帮助!
答案 1 :(得分:1)
这是因为您尝试在静态方法中使用属于对象的d
。
然后,您必须在main方法中创建该对象。
static属于class,而不是object本身。
I want to know the difference between static method and non-static method
答案 2 :(得分:1)
这取决于你所处的背景。
main(String[])
方法是一种静态方法。
为了保持简单,这意味着它不存在于Flavor1Demo
的实例中,此处没有this
。如果您将d
设置为非静态,则它只会存在于Flavor1Demo
的实例中,因此除非您先构建实例,否则无法从main
进行访问(new Flavor1Demo().d.show();
$qb = $this->createQueryBuilder('r')
->select('SUM(r.montantHt)')
->where('r.statut <> :nostatut')
->setParameter('nostatut', Restauration::STATUT_CREEE)
->andWhere('r.affectation_jour1 <> :nosaf OR r.affectation_jour1 IS NULL')
->setParameter('nosaf','Pas de table disponible');
但是静态变量将链接到类而不是实例,意味着您可以从静态上下文访问它。在你的情况下,主要方法。
答案 3 :(得分:1)
从static
删除static Demo d = new Demo()
关键字会导致错误,因为您在d
方法Demo
中使用了main
类对象static
1}}。当您从static
中删除static Demo d = new Demo()
关键字时,您正在使d
类Demo
的对象non-static
无法引用non-static
对象static
上下文。
如果您从d.show();
方法移除main
并从static
移除static Demo d = new Demo()
关键字,则不会收到错误消息。
现在,如果您想调用show
类的Demo
方法,则必须在Demo
方法中创建main
类的对象。
public static void main(String[] args){
Demo d = new Demo();
d.show();
}
答案 4 :(得分:0)
为了在不创建对象的情况下访问主类中的方法或变量,在此定义匿名内部类,在其中创建静态类型的对象,以便直接从主类访问它而无需创建对象。