Java中的#ifdef #ifndef

Java中的#ifdef #ifndef

我怀疑是否有一种方法可以在Java中创建编译时条件,如C ++中的#ifdef #ifndef。

我的问题是有一个用Java编写的算法,我有不同的运行时间改进了该算法。所以我想测量每次改进时我节省了多少时间。

现在我有一组布尔变量,用于在运行时决定应该使用哪些改进,哪些不使用。但即使测试这些变量也会影响总运行时间。

所以我想找到一种方法来在编译期间决定编译和使用程序的哪些部分。

有人知道在Java中使用它的方法。或者也许有人知道没有这样的方式(它也会有用)。


心有法竹
浏览 673回答 3
3回答

收到一只叮咚

javac不会输出无法访问的编译代码。使用最终变量设置为您的常量值#define和。的正常if语句#ifdef。您可以使用javap来证明输出类文件中不包含无法访问的代码。例如,请考虑以下代码:public class Test{   private static final boolean debug = false;   public static void main(String[] args)   {       if (debug)        {           System.out.println("debug was enabled");       }       else       {           System.out.println("debug was not enabled");       }   }}javap -c Test 给出以下输出,表明只编译了两个路径中的一个(并且if语句不是):public static void main(java.lang.String[]);  Code:   0:   getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;   3:   ldc     #3; //String debug was not enabled   5:   invokevirtual   #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V   8:   return

函数式编程

我认为我已经找到了解决方案,它更加简单。如果我使用“final”修饰符定义布尔变量,Java编译器本身就可以解决问题。因为它事先知道测试这种情况的结果是什么。例如这段代码:&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;flag1&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;flag2&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;j=0; &nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i<1000000000;i++){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(flag1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(flag2) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(flag2) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++; &nbsp;&nbsp;&nbsp;&nbsp;}在我的电脑上运行大约3秒钟。还有这个&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;boolean&nbsp;flag1&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;boolean&nbsp;flag2&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;j=0; &nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i<1000000000;i++){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(flag1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(flag2) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(flag2) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++; &nbsp;&nbsp;&nbsp;&nbsp;}跑了大约1秒钟。这段代码需要同样的时间&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;j=0; &nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i<1000000000;i++){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++; &nbsp;&nbsp;&nbsp;&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java