Анонимный класс является статическим, если контекст статичен. например в статическом методе.
Анонимный класс не статичен, если существует нестационарный контекст, независимо от того, нужен ли он для нестатического или нет. Компилятор недостаточно умен, чтобы сделать статический класс, если нестатический контекст не используется.
В этом примере были созданы два анонимных класса. Один из статических методов не имеет ссылки на внешний класс и как статический вложенный класс.
Примечание: эти классы по-прежнему называются «внутренними» и не могут содержать статические элементы, даже если они не имеют ссылки на класс Outer.
import java.util.Arrays;
public class Main {
Object o = new Object() {
{
Object m = Main.this; // o has a reference to an outer class.
}
};
static Object O = new Object() {
// no reference to Main.this;
// doesn't compile if you use Math.this
};
public void nonStaticMethod() {
Object o = new Object() {
{
Object m = Main.this; // o has a reference to an outer class.
}
};
printFields("Anonymous class in nonStaticMethod", o);
}
public static void staticMethod() {
Object o = new Object() {
// no reference to Main.this;
// doesn't compile if you use Math.this
};
printFields("Anonymous class in staticMethod", o);
}
private static void printFields(String s, Object o) {
System.out.println(s + " has fields " + Arrays.toString(o.getClass().getDeclaredFields()));
}
public static void main(String... ignored) {
printFields("Non static field ", new Main().o);
printFields("static field ", Main.O);
new Main().nonStaticMethod();
Main.staticMethod();
}
}
печатает
Non static field has fields [final Main Main$1.this$0]
static field has fields []
Anonymous class in nonStaticMethod has fields [final Main Main$3.this$0]
Anonymous class in staticMethod has fields []
Класс не является статическим, он является локальным для основной функции. Где вы нашли это определение? – Sage
Мы уже провели эту битву около 4 дней назад. –
Статические классы - это те, которые явно помечены ключевым словом «статические». – jdevelop