Java條件編譯


      學習過C語言或者C++語言的同學都知道它們支持條件編譯,那么今天我們來學習下在Java語言中如何實現條件編譯。Java語言本身沒有提供條件編譯,但是Java編譯器對.java文件編譯為.class文件做了優化,下面通過一個例子給大家詳細講解。

      下面先給出HelloWorld.java文件:

 1 package com.test;
 2 
 3 /**
 4  * Test Demo
 5  */
 6 public class HelloWorld {
 7 
 8     public static void main(String[] args) {
 9         if (BuildConfig.FLAG) {
10             System.out.println("Hello World");
11         } else {
12             System.out.println("Java條件編譯測試");
13         }
14     }
15 
16 }

       再來看看BuildConfig.java文件:      

package com.test;

/**
 * Created by Administrator on 2015/5/24.
 */
public final class BuildConfig {

    public static final boolean FLAG = false;
}

 

再來看看該.java文件被轉化為.class文件的內容:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.test;

public class HelloWorld {
    public HelloWorld() {
    }

    public static void main(String[] args) {
        System.out.println("Java條件編譯測試");
    }
}

      可以知道的是BuildConfig.FLAG永遠都為false,if塊內的代碼當然也不會被執行,這部分代碼就不會被編譯到.class文件中。

  如果FLAG是字符串會怎么樣?字符串之間如果使用equals進行比較,在轉化為.class文件時不會得到優化。

      HelloWorld.java文件:

package com.test;

/**
 * Test Demo
 */
public class HelloWorld {

    public static void main(String[] args) {
        if (BuildConfig.FLAG.equals("false")) {
            System.out.println("Hello World");
        } else {
            System.out.println("Java條件編譯測試");
        }
    }

}

       HelloWorld.class文件:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.test;

public class HelloWorld {
    public HelloWorld() {
    }

    public static void main(String[] args) {
        if("false".equals("false")) {
            System.out.println("Hello World");
        } else {
            System.out.println("Java條件編譯測試");
        }

    }
}

      如果真的需要字符串比較,實現條件編譯的話可以使用 "=="。

      HelloWorld.java文件:

package com.test;

/**
 * Test Demo
 */
public class HelloWorld {

    public static void main(String[] args) {
        if (BuildConfig.FLAG == "false") {
            System.out.println("Hello World");
        } else {
            System.out.println("Java條件編譯測試");
        }
    }

}

       HelloWorld.class文件:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.test;

public class HelloWorld {
    public HelloWorld() {
    }

    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM