在java中,如何快速注释几行代码?

在java中,如何快速注释几行代码?,java,debugging,annotations,Java,Debugging,Annotations,我想测试某些代码块的运行时间,如下所示: start = System.currentTimeMillis(); { ... this.dosomething(); } end = System.currentTimeMillis(); System.out.println(end - start); 当我优化代码块时,如何注释那些计算时间很快的代码,如下所示 //start = System.currentTimeMillis(); { ... this.dosome

我想测试某些代码块的运行时间,如下所示:

start = System.currentTimeMillis();
{
   ...
   this.dosomething();
}
end = System.currentTimeMillis();
System.out.println(end - start);
当我优化代码块时,如何注释那些计算时间很快的代码,如下所示

//start = System.currentTimeMillis();
{
   ...
   this.dosomething();
}
//end = System.currentTimeMillis();
//System.out.println(end - start);

如果您只是想要一些简单的东西,那么当您想要打印调试信息时,您可以始终拥有一个
debug
(布尔)变量,该变量为true,例如:

if (debug) start = System.currentTimeMillis();
{
   ...
   this.dosomething();
}
if (debug) {
    end = System.currentTimeMillis();
    System.out.println(end - start);
}
在执行此操作时,我经常使用命令行参数设置
debug
,因此无需更改代码即可切换调试模式


编辑:如果你想在程序的其他地方重复这个结构,我肯定会像其他答案中提到的那样使用AOP。

我不太清楚你的意思。如果您只想对代码进行注释,那么在eclipse中的捷径是ctrl+/。如果您试图在项目中对这类代码进行分类,您可以使用log4j来完成这类工作。

您可以使用
注释处理
来创建
编译时
注释
并基于此生成源代码

本文讨论如何使用注释生成代码。 您可以定义自定义注释,如
@Start
@End
@Calculate
,并使用它们,如下所示。如果不生成源代码,它们无论如何都会被删除

@Start
{
      ...
      this.dosomething();
}
@End
@Caclulate

注意:它不能修改正在检查的代码,因此您需要创建子类。

将用于性能度量的代码与主代码从一开始分离。执行以下操作之一:

start = System.currentTimeMillis();
{
   ...
   this.dosomething();
}
end = System.currentTimeMillis();
System.out.println(end - start);
  • 正如chm052在其anwswer中所述,带有一些旗帜和警戒命令
  • 通过将日志框架与这些受保护的命令一起使用,例如:
  • 通过使用,它可以帮助您进行良好的时间测量、统计和保护命令(例如,通过AspectOrientedProgramming)。您绝对应该使用这样的工具来获得合理的测量结果(参见示例)

chm052提出的方法肯定会起作用,但它会将时间度量时间逻辑与您的业务方法相耦合,这是不可取的。在编写完所有方法以执行“dosomething()”——在这些方法之前和之后,您需要测量时间。明天您将需要记录“输入方法/离开方法doSomething”的语句链接,稍后您可能需要检查是否可以运行此代码的权限

我希望您理解我的观点,虽然这种方法适用于简单的项目,但它会用不相关的问题污染您的代码

有两种技巧

  • AOP,这是约阿希姆·伊萨克森提出的。AOP在这一领域非常出色。创建一个建议,在那里你可以使用你的时间测量逻辑,你就可以开始了

  • 如果你想/需要坚持OOP技术,我建议你创建一个 或

  • 从技术上讲,这两种关系非常密切,只是你如何记住你关心的意图


    希望这有帮助,只需使用分析器即可。它将以最小的占用空间自动插入代码,显示各种统计数据和热点。查看探查器,或者


    当您不需要它时,您不需要为它支付任何费用。

    类似于?的东西不是您问题的答案,但请不要使用
    System.currentTimeMillis()
    为了进行基准测试,请改用
    System.nanoTime()
    。请阅读这个问题的答案:原始海报没有指出他们正在使用哪个IDE(Eclipse只是众多可能性之一)。另外,你需要扩展你的答案来解释为什么log4j会有帮助,因为我不知道怎么做。我刚刚加入了这个伟大的地方,所以不知道规则是什么,我很高兴与大家分享我的想法。但是如果这是不允许的,那么我对此感到抱歉。如果没有人们分享他们的想法,StackOverflow就不会存在——这很好。但它也因同行评议和建设性批评而蓬勃发展。并不是你给出的每一个答案都是正确的,如果别人质疑你的答案,不要受伤是很重要的。顺便说一句,并非所有的注释都是正确的:-)如何使用探查器测试特定代码块的运行时间(如果代码块既不是单个操作也不是完整的方法)?@DaveBall:确实不可能。我想解决这个问题最简单的方法就是简单地提取方法(这本身通常是个好主意)