我正在学习接口的行为。我已经创建了一个接口及其实现类,但在调用方法m1()时,我遇到了java.lang.StackOverflowError错误。我不知道为什么。有没有人能告诉我背后的正确原因!!!以下是代码:
public interface Employee {
String name="Kavi Temre";
}
public class Kavi implements Employee{
Employee e= new Kavi();
public static void main(String[] args) {
Kavi kt=new Kavi();
kt.m1();
}
void m1()
{
System.out.println(Employee.name);
//System.out.println(e.name);
}
}
两个sysout都给出了同样的错误:请告诉我这里实际上发生了什么?
控制台输出:
Exception in thread "main" java.lang.StackOverflowError
at Kavi.<init>(Kavi.java:2)
at Kavi.<init>(Kavi.java:2)
at Kavi.<init>(Kavi.java:2)
at Kavi.<init>(Kavi.java:2)
at Kavi.<init>(Kavi.java:2)
at Kavi.<init>(Kavi.java:2)
at Kavi.<init>(Kavi.java:2)
.....
e
变量时,该块仅在类初始化时执行一次。因此,它不会在每次调用类的构造函数时执行。顺便说一句,这样的声明是无用的,因为该变量将成为静态初始化块的局部变量,所以你将无法从该块外部访问它。 - Eran