静态内部类在概念和实现上都十分简单,基本上来说就是在您的主类中定义一个静态类:
public class Foo
{
// ....
public static class Test
{public static void main (String[] args)
{
// ....
}
}
}说到向您主要的类中添加辅助代码,其中最重要的一点就是静态内部类被编译到一个单独的 .class 文件中,这个文件独立于它的外部类。例如,如果外部类叫做 Foo,而它的一个内部类叫 Test,那么这个内部类将被编译成 Foo$Test.class 文件。.class 文件的分离意味着您可以将辅助的嵌套代码与主要的外部类牢固地捆绑在一起。它们在同一个源文件中,内部类的确是在外部类的 内部。您无需再付出任何发布或运行时的开销。真棒!例如,如果辅助代码只是用于调试,那么您只需发布 Foo.class 文件而将 Foo$Test.class 文件留下即可。我将这个技巧主要用于编写外部类的演示代码、错误调试代码,以及进行单元测试实现类行为的自动验证。(当然,做为一个勤奋的开发人员,我准备将测试代码转化成单元测试。)注意,要执行 Foo.Test 类的 main() 方法,请使用下面的命令:% java Foo$Test
如果您正在使用的命令解释程序(shell)把“$”做为一个保留字,那么您应该使用下面的命令:% java Foo\$Test
还有一点十分有趣:静态内部类根据定义可以访问外部类的保护域和私有域。这件事可以说既有利也有弊。因为您可能在不经意间就破坏了外部类的保护域和私有域,从而违反了它的封装性,所以请小心对待!这一功能最恰当的应用就是编写类的 白盒测试程序--因为这样可以引入一些利用通常的黑盒测试很难引入的问题(黑盒测试不能访问对象的内部状态)。如果您更加大胆,您可能想检验 Java 单元测试构架(JUnit)。您可以去掉源代码中的各种注释,然后利用 JUnit 的测试引擎运行这些测试程序。结论
通过使用静态内部类,您可以给您的系统添加辅助功能,以便完成诸如测试之类的工作,而对正式发布的产品不会带来任何不利影响。 

解决方案 »

  1.   

    1.静态的好处:可以直接使用,不必new什么实体。节省资源。
    2.类的好处:封装对象。
    3.内部类的好处:
       a.只对当前类有效,外面的其他类也可以访问,但会很麻烦。
       b.内部类可以实现很多接口,从而引入很多特性和功能,这些特性和功能,可能都是
    包装它的外部类需要的。
       c.如果没有内部类,要想使用刚才提到的一些特性与功能,外部类必须继承或实现很多接口,
    但这一般都很没必要。因为外部类不常用这些功能。