学习过C语言或者C++语言的同学都知道它们支持条件编译,那么今天我们来学习下在Java语言中如何实现条件编译。Java语言本身没有提供条件编译,但是Java编译器对.java文件编译为.class文件做了优化,下面通过一个例子给大家详细讲解。
下面先给出HelloWorld.java文件:
1 packagecom.test;2
3 /**
4 * Test Demo5 */
6 public classHelloWorld {7
8 public static voidmain(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文件:
packagecom.test;/*** Created by Administrator on 2015/5/24.*/
public final classBuildConfig {public static final boolean FLAG = false;
}
再来看看该.java文件被转化为.class文件的内容:
//
//Source code recreated from a .class file by IntelliJ IDEA//(powered by Fernflower decompiler)//
packagecom.test;public classHelloWorld {publicHelloWorld() {
}public static voidmain(String[] args) {
System.out.println("Java条件编译测试");
}
}
可以知道的是BuildConfig.FLAG永远都为false,if块内的代码当然也不会被执行,这部分代码就不会被编译到.class文件中。
如果FLAG是字符串会怎么样?字符串之间如果使用equals进行比较,在转化为.class文件时不会得到优化。
HelloWorld.java文件:
packagecom.test;/*** Test Demo*/
public classHelloWorld {public static voidmain(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)//
packagecom.test;public classHelloWorld {publicHelloWorld() {
}public static voidmain(String[] args) {if("false".equals("false")) {
System.out.println("Hello World");
}else{
System.out.println("Java条件编译测试");
}
}
}
如果真的需要字符串比较,实现条件编译的话可以使用 "=="。
HelloWorld.java文件:
packagecom.test;/*** Test Demo*/
public classHelloWorld {public static voidmain(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)//
packagecom.test;public classHelloWorld {publicHelloWorld() {
}public static voidmain(String[] args) {
System.out.println("Hello World");
}
}