代码校验

代码校验

Java作为一个静态类型的语言,容易形成“能够通过编译器,那就没有问题了”的安全区。
但是静态类型检查是一种非常局限性的测试。


单元测试

这个过程是将集成测试构建到你创建的所有代码中,并且在每次构建系统时运行这些测试。
这样在构建的过程中不仅能够检查语法的错误,同时也能检查语义的错误。

JUnit

  • @BeforeAll: 在任何其他测试操作之前运行一次的方法
  • @BeforeEach: 在每次测试前运行,创建和初始化公共对象的方法
  • @AfterEach: 在每次测试后运行,用于关闭一些资源
  • @Test: 测试方法,可以在内部使用JUnit的断言方法(”assert“开头),验证测试的正确性
  • @TestFactory: 注释的方法都会产生一个DynamicTest对象的Stream,每个JUnit都像常规的@Test方法一样执行,可以用于测试一系列元素,以流的形式。、

剖析和优化

有时需要检测程序运行的时间在哪, 从而看出可以优化的代码在哪。
剖析器可以找到程序慢的地方。

剖析器收集的信息能显示程序哪一部分消耗内存,哪个方法最耗时。

剖析器还可以检测程序中的线程死锁。

安装Java开发工具包(JDK)中会顺带安装一个虚拟的剖析器,叫做VisualVM。它会被自动安装在与javac相同的目录下, 执行路径已经包含该目录。 启动VisualVM的命令是jvisualvm

优化准则

  • 避免为了性能牺牲代码的可读性。
  • 不要独立看待性能。衡量与之带来的收益相比所需要投入的工作量。
  • 程序的大小很重要,性能优化通常只对运行了长时间的大型项目有价值。性能通常不是小项目关注的重点。
  • 运行起来程序比一心钻研它的性能具有更高的优先级。一旦你已经有了可工作的程序,如有必要,可以用剖析器提高它的效率,只有当性能是关键因素时,才需要在设计/开发中考虑性能。
  • 不要猜测瓶颈在哪,运行剖析器,让剖析器告诉你。
  • 无论何时,有可能的话,显示的设置实例为null,表面你不再用它。这对垃圾收集器来说是个有用的暗示。
  • static final 修饰的变量会被JVM优化而提高程序的运行速度。因此程序中的常量要声明为static final

重构基石

在开始重构代码之前, 你需要有三个系统的支撑。

  1. 测试, 你能确保重构不会改变代码的行为。
  2. 自动构建, 你能够轻松的构建代码,运行所有测试。
  3. 版本控制, 以便回退到工作可用的代码版本。