一、前言
在日常 Java 开发中,我们经常需要统计一段代码、一个方法的运行耗时,用来分析代码性能。如果每次都手动写记录开始时间、结束时间、计算差值,代码会大量冗余。
本文利用 Java 接口 + 匿名内部类 封装通用耗时统计工具,一行代码即可完成任意代码块的计时,代码简洁、复用性强,同时理解匿名内部类的实际使用场景。
二、需求分析
编写通用工具类,能够统计任意代码块的执行时间;
使用匿名内部类实现任务传递,不额外创建独立类文件;
运行程序,直观输出代码执行耗时。
三、知识点铺垫
接口:定义统一任务规范,只声明执行方法;
匿名内部类:不用单独定义类,直接对接口进行实例化并实现方法,适合临时使用的场景;
系统时间 API:System.currentTimeMillis() 获取当前系统毫秒时间,用于计算时间差。
四、完整代码实现
- 全部代码(单文件,直接运行)
java
运行
// 定义任务接口:规范所有待执行的任务
interface Task {
void execute();
}
/**
代码耗时统计工具类
*/
public class TimeCount {/**
- 通用计时方法
- @param task 待执行的任务
- @return 执行耗时(毫秒)
*/
public static long getRunTime(Task task) {
// 记录任务开始时间
long start = System.currentTimeMillis();
// 执行目标代码
task.execute();
// 记录任务结束时间
long end = System.currentTimeMillis();
// 返回总耗时
return end - start;
}
public static void main(String[] args) {
// 使用匿名内部类实现接口,传入待测试代码
long time = getRunTime(new Task() {
@Override
public void execute() {
// 此处为需要统计耗时的业务代码
try {
// 模拟耗时操作:休眠1秒
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});// 输出最终耗时 System.out.println("代码执行总耗时:" + time + " 毫秒");}
}
- 运行方式
将代码保存为 TimeCount.java;
打开命令行 / IDE,执行编译运行:
plaintext
javac TimeCount.java
java TimeCount - 运行结果
plaintext
代码执行总耗时:1000 毫秒
五、代码解析
自定义 Task 接口
只定义一个 execute() 抽象方法,代表需要被执行的任务,所有要计时的代码都放到这个方法中。
通用计时方法 getRunTime
执行任务前记录时间戳;
调用 execute() 运行目标代码;
执行完成后再次记录时间,计算时间差并返回。
该方法可复用,支持统计任意代码块。
匿名内部类核心用法
java
运行
new Task() {
@Override
public void execute() {
// 自定义业务代码
}
}
没有创建新的 Java 类,直接在方法参数中实例化接口并实现抽象方法,这就是匿名内部类。优点:随用随写,简洁高效。
六、拓展使用
如需统计其他代码耗时,只需修改匿名内部类里的代码即可,工具方法无需改动:
java
运行
// 示例:统计循环运算耗时
long loopTime = getRunTime(new Task() {
@Override
public void execute() {
for (int i = 0; i < 1000000; i++) {
Math.sqrt(i);
}
}
});
System.out.println(“循环运算耗时:” + loopTime + " 毫秒");
七、学习总结
匿名内部类常配合接口 / 抽象类使用,简化临时类的编写;
封装通用工具方法,能大量减少重复代码,提升代码维护性;
利用系统时间戳可以轻松实现代码性能监控,是开发中常用的性能调优小技巧。