Java 匿名内部类实战:通用代码耗时统计工具实现
·
一、需求介绍
开发中经常需要统计任意一段代码 / 方法的执行耗时,本案例利用匿名内部类封装通用计时工具,不用每次写重复的起止时间代码,任意方法都能快速传入进行耗时测算,也是匿名内部类经典使用场景。
核心思路:定义一个功能接口,工具类接收接口对象,在工具方法中统一封装「记录开始时间→执行目标代码→记录结束时间→计算耗时」逻辑,调用时通过匿名内部类传入要计时的业务代码。
二、代码实现
- 定义函数式接口(规范待执行代码)
// 无参数无返回值的功能接口,用来承载需要计时的业务代码
public interface Task {
void run();
}
- 通用耗时统计工具类
/**
* 通用代码耗时计算工具
*/
public class TimeCountUtil {
// 接收任务接口,统一计算任务执行耗时
public static void calcTime(Task task){
// 记录开始毫秒时间
long start = System.currentTimeMillis();
// 执行传入的业务代码
task.run();
// 记录结束毫秒时间
long end = System.currentTimeMillis();
// 输出总耗时
System.out.println("方法执行耗时:" + (end - start) + " 毫秒");
}
}
- 客户端使用:匿名内部类传入待测试代码
public class TestMain {
public static void main(String[] args) {
// 1. 测试循环运算耗时,使用匿名内部类重写run方法
TimeCountUtil.calcTime(new Task() {
@Override
public void run() {
long sum = 0;
for(int i = 1; i <= 1000000; i++){
sum += i;
}
System.out.println("循环计算完成,结果:"+sum);
}
});
// 2. 测试另一段业务代码,直接新建匿名内部类即可,不用修改工具类
TimeCountUtil.calcTime(new Task() {
@Override
public void run() {
try {
Thread.sleep(500); // 模拟业务休眠
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
三、拓展:Lambda 简化写法(JDK8+)
因为是函数式接口,还可以用 Lambda 替代匿名内部类,代码更精简:
public class LambdaTest {
public static void main(String[] args) {
TimeCountUtil.calcTime(()->{
int num = 0;
for(int i=0;i<50000;i++){
num++;
}
});
}
}
四、知识点总结
1.匿名内部类作用:快速实现接口,不用单独创建接口实现类,适合一次性使用的业务代码;
2.设计优势:计时逻辑全部封装在工具类,后续统计任意代码耗时只需要传入匿名内部类,复用计时代码;
3.应用场景:代码计时器、回调函数、线程启动(new Thread (new Runnable (){}))都是匿名内部类高频场景。
更多推荐

所有评论(0)