在静态方法中定义内部类的目的是什么?

fed*_*o-t 8 java oop static inner-classes

我正在阅读" Head First Java " 这本书,并且在某些时候它提到内部类实例必须绑定到我已经知道的外部类实例,但有一个例外:

一个非常特殊的例子 - 静态方法中定义的内部类.但是你可能会在没有遇到其中一个的情况下完成整个Java生活.

我很确定最后一个语句确实是正确的,但是如果编译器允许它发生它意味着它存在是有原因的,否则它将是非法的Java.有人能告诉我一个有用的例子吗?

ζ--*_*ζ-- 3

它可能很特别,也可能不是。

您正在查看方法中可用的本地类:

class Foo {
    static void bar(){
       class MyRunnable implements Runnable {
           public void run() {
               System.out.println("No longer anonymous!");
           }    
        };
       Thread baz = new Thread(new MyRunnable());
    }

}
Run Code Online (Sandbox Code Playgroud)

我见过匿名内部类的使用,例如:

class Foo {
    static void bar(){
        Thread baz=new Thread(new Runnable(){
            public void run(){
                System.out.println("quux");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从技术上讲,这是一个内部类(尽管是匿名的)并在静态方法中定义。我个人会创建一个实现 Runnable 的静态嵌套类并执行以下操作:

baz = new Thread(new MyRunnable());
Run Code Online (Sandbox Code Playgroud)

其中MyRunnable定义为:

class Foo {
    static void bar(){
       // SNIP
    }
    static class MyRunnable implements Runnable {
        public void run() {
            System.out.println("No longer anonymous!");
        }    
    }
}
Run Code Online (Sandbox Code Playgroud)