學習過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"); } }
