|
|
调试器是一个繁重的东西,使用调试器并不总是最有效的方法;有时,你可能想对代码进行一些小的调试和跟踪。一个简单的StopWatch类就是提供了一种好的计时解决方案。
- package com.generationjava.test;
-
- /**
- * 在调试或者测试情形下需要计时非常有用
- */
- public class StopWatch {
- static public int AN_HOUR = 60 * 60 * 1000;
- static public int A_MINUTE = 60 * 1000;
- private long startTime = -1;
- private long stopTime = -1;
-
- /**
- * 启动秒表
- */
- public void start() {
- this.startTime =System.currentTimeMillis();
- }
-
- /**
- * 停止秒表
- */
- public void stop() {
- this.stopTime =System.currentTimeMillis();
- }
-
- /**
- * 重置秒表
- */
- public void reset() {
- this.startTime = -1;
- this.stopTime = -1;
- }
-
- /**
- * 分割时间
- */
- public void split() {
- this.stopTime =System.currentTimeMillis();
- }
-
- /**
- * 移除分割
- */
- public void unsplit() {
- this.stopTime = -1;
- }
-
- /**
- * 获得秒表的时间,这个时间或者是启动时和最后一个分割时刻的时间差,
- * 或者是启动时和停止时的时间差,或者是启动时和这个方法被调用时的差
- */
- public long getTime() {
- if(stopTime != -1) {
- return(System.currentTimeMillis() - this.startTime);
- } else {
- return this.stopTime - this.startTime;
- }
- }
-
- public String toString() {
- return getTimeString();
- }
-
- /**
- * 取得String类型的时间差
- * 形式为小时,分钟,秒和毫秒
- */
- public String getTimeString() {
- int hours, minutes, seconds,milliseconds;
- long time = getTime();
- hours = (int) (time / AN_HOUR);
- time = time - (hours *AN_HOUR);
- minutes = (int) (time /A_MINUTE);
- time = time - (minutes *A_MINUTE);
- seconds = (int) (time / 1000);
- time = time - (seconds * 1000);
- milliseconds = (int) time;
- return hours + "h:" +minutes + "m:"
- + seconds + "s:" + milliseconds +
- }
与大块的代码相比,它是非常简单的。但是它可重用而毫不复杂。因此StopWatch类的使用也是非常简单的:
- StopWatch obj = new StopWatch();
- obj.start();
- try{
- Thread.currentThread().sleep(1500);
- }catch(InterruptedException ie) {
- // ignore
- }
- obj.stop();
- System.out.println(obj);
我们执行了1500豪秒sleep,完全在预料之中的,StopWatch的报告为:
0h:0m:1s:502ms
StopWatch不是深奥复杂的科学,但是它确实满足了常见的测量代码行间执行时间的需求。
(本文是为ZDNet翻译的系列文章之一,原文已经发表在ZDNet网站) |
|