Effective Java 第2版 (The Java Series)の項目22で言及されているように、原則として内部クラスはstaticにすることが推奨されます。主な理由は、staticでない内部クラスが暗黙的にエンクロージングクラス(トップレベルクラス)のインスタンスを参照するためです。 staticな内部クラスを持つクラスのヒープダンプ staticな内部クラスはエンクロージングクラスのインスタンスへの参照を持ちません。 class HiddenReferenceTest { private static class InnerClass {} } 非staticな内部クラスを持つクラスのヒープダンプ 一方、staticな内部クラスはエンクロージングクラスのインスタンスへの暗黙的な参照を持ちます。 class HiddenReferenceTest { private class