静态内部类在概念和实现上都很简单,基本上就是在你的主类中定义一个静态类:
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
还有一点很有意思:静态内部类可以根据定义访问外部类的保护域和私有域。这件事可以说既有利也有弊。因为你可能在不经意间破坏了外部保护区和私有区域,从而违反了它的包装,请小心!该功能最合适的应用是编写白盒测试程序--因为这可以引入一些使用普通黑盒测试难以引入的问题(黑盒测试不能访问对象的内部状态)。
XYPair 类别很简单。它提供一个固定的整数对,(x,y)。XYPair.Test 类有一个 main() 方法可以对 XYPair 简单的测试和输出结果。试着调整测试代码和核心代码来测试各种可能的问题。
如果你更大胆,你可能想测试一下 Java 单元测试框架(JUnit)。您可以删除源代码中的各种注释,然后使用它 JUnit 这些测试程序由测试引擎操作。
结论 通过使用静态内部类,您可以为您的系统添加辅助功能,以完成测试等工作,而不会对正式发布的产品产生任何不利影响。