num
- это поле non static
, оно принадлежит конкретному экземпляру. Вы не можете ссылаться на него в static main
напрямую, потому что метод static
может быть вызван без создания экземпляра.
this
фактически ссылается на thread
, это локальная переменная, при выполнении run
должен быть создан thread
.
Если вы попробуете ссылку AnonymousThreadDemo.this
в main
, вы получите тот же результат:
public static void main(String[] args) {
Thread thread = new Thread() {
@Override
public void run() {
System.out.println("Anonymous " + AnonymousThreadDemo.this); // compile error
}
};
thread.start();
}
Это нормально, вы можете ссылаться на локальную переменную в локальном классе:
public static void main(String[] args) {
int num = 0;
Thread thread = new Thread() {
@Override
public void run() {
System.out.println("Anonymous " + num);
}
};
thread.start();
}
Это нормально, вы можете ссылаться на нестатическое поле локального класса в его методе:
public static void main(String[] args) {
Thread thread = new Thread() {
int num = 0;
@Override
public void run() {
System.out.println("Anonymous " + num);
}
};
thread.start();
}
Проверьте это для более.