Java 条件编译 Conditio…
2013-06-27 16:28
330 查看
根据Java编译器的优化的机制,Java也能够提供条件编译。对于条件设为false的语句,编译器将不对条件覆盖的代码段生成字节码。
不仅可以用简单的boolean常量值来做条件编译,还可以用字符串常量及任何其他类型的常量.
例如:
简单的boolean常量.
字符串常量.
这里要注意的是不能用equals方法,必须用简单的判断符号(==, != ....)
其他常量就不设置了
当然我们可以写个CompilationConfig类,里面仅设置所有要用条件编译的选项.
这里我写了个示例,呵呵,记录下以后不要忘记了,也希望能够帮助需要这方向东东的人
ConmpilationCofig.java
javaConditionalCompilationTest.java
编译后,javaConditionalCompilationTest.class 反编译后为:
看看是不是去掉了平台2的代码呢
如果不知道怎么反编译,请使用Java
反编译工具反编译就行了.
不仅可以用简单的boolean常量值来做条件编译,还可以用字符串常量及任何其他类型的常量.
例如:
简单的boolean常量.
1 2 3 4 5 6 | final boolean isDebug = true ; if (isDebug) { // debug模式状态 System.out.println( "现在是debug模式!" ); } |
这里要注意的是不能用equals方法,必须用简单的判断符号(==, != ....)
1 2 3 4 5 6 7 | final String debug = "true" ; final String currentMode = debug; if (currentMode == debug) { // debug模式状态 System.out.println( "现在是debug模式!" ); } |
当然我们可以写个CompilationConfig类,里面仅设置所有要用条件编译的选项.
这里我写了个示例,呵呵,记录下以后不要忘记了,也希望能够帮助需要这方向东东的人
ConmpilationCofig.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package cn.lite3.javaConditionalCompilationTest; public class CompilationConfig { // 配置是否是debug模式, 关键字 final是启用条件编译的关键 static public final boolean isDebug = true ; // 用条件编译来判别不同的平台 static public final String platform1 = "platfor1" ; static public final String platform2 = "platform2" ; // 当前所用的平台 static public final String currentPlatform = platform1; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | package cn.lite3.javaConditionalCompilationTest; //import cn.lite3.javaConditionalCompilationTest.otherPackage.OtherPackageTest; public class ConditionalCompilationTest { public ConditionalCompilationTest() { // 用条件编译来去除多余代码 // 这里仅仅是输出语句,也可以是其他逻辑代码 final String debug = "true" ; final String currentMode = debug; if (currentMode == debug) { // debug模式状态 System.out.println( "现在是debug模式!" ); } // 用条件编译来判别不同的平台 // 平台1 if (CompilationConfig.currentPlatform == CompilationConfig.platform1) { System.out.println( "这里是平台1的输出!" ); } // 平台2 if (CompilationConfig.currentPlatform == CompilationConfig.platform2) { System.out.println( "这里是平台2的输出!" ); } } static public void main(String[] args) { // 实例化两个应用了条件编译,在不同包的类 new ConditionalCompilationTest(); //new OtherPackageTest(); } } |
看看是不是去掉了平台2的代码呢
如果不知道怎么反编译,请使用Java
反编译工具反编译就行了.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package cn.lite3.javaConditionalCompilationTest; import java.io.PrintStream; public class ConditionalCompilationTest { public ConditionalCompilationTest() { String debug = "true" ; String currentMode = "true" ; System.out.println( "现在是debug模式!" ); System.out.println( "这里是平台1的输出!" ); } public static void main(String[] args) { new ConditionalCompilationTest(); } } |
相关文章推荐
- C语言的条件编译#if, #elif…
- 如何设置Notepad 直接编译java程…
- 【C语言】14 预处理指令--条件编译
- 怎么样从零基础开始学java 新…
- java 逻辑运算符的应用
- java 最新力作
- java 产生随机码
- java 多线程 两种方法
- java 正则式
- think_java第二章 一切皆对象(1)
- java 生成pdf文件 注解
- 【原创】java web Actio…
- java.lang.OutOfMemoryError:&nbsp…
- java vector类型变量总结
- java.lang.OutOfMemoryError: Java…
- JAVA标准系列(JSR 208: Java Busi…
- Java运行问题:Error:could n…
- 如何编译64位( 64bit ) boost类库
- Java语法总结 - 异常
- 左连接中on 后面的条件与wher…