C代码  
#IFDEF DEBUG  
#UNDEF DEBUG  
#ENDIF  
#define DEBUG  
#IFDEF DEBUUG  
  /* 
   code block 1 
   */   
#ELSE  
  /* 
   code block 2 
  */  
#ENDIF

  但是在JAVA中却没有预处理,宏定义这些东西,而有时在一些项目中,我们可能需要条件编译。那么,在JAVA中,该如何实现条件编译呢?
  我们来看一个例子。
  编写一个helloworld程序。代码如下:
Java代码  
public class Hello {  
    public static void main(String[] args) {  
        System.out.println("Hello, world!");  
    }  
}

  保存为Hello.java并编译,得到一个class文件,并且观察到文件大小是417字节。然后我们对这个文件进行反编译,用jd-gui。得到代码如下:
Java代码  
import java.io.PrintStream;  
  
public class Hello  
{  
  public static void main(String[] paramArrayOfString)  
  {  
    System.out.println("Hello, world!");  
  }  
}

  得到这个有什么用呢?
  现在我们再来对源代码进行修改,修改后的代码如下。
Java代码  
public class Hello {  
    public static void main(String[] args) {  
        if(false) {  
            System.out.println("Hello, world!");  
        }  
    }  
}

  进行编译,这时我们再看它的大小,只有255字节。怎样?想到什么了吧?没错,编译器会对代码进行优化,对于条件永远为false的语句,JAVA编译器将不会对其生成字节码。下面我们再来对该class文件进行反编译,果然代码如下:
Java代码  
public class Hello  
{  
  public static void main(String[] paramArrayOfString)  
  {  
  }  
}

  利用JAVA编译的这一优化机制,我们就可以实现JAVA的条件编译了。
Java代码  
public class Hello {  
    public static void main(String[] args) {  
        if(false) {  
            System.out.println("Hello, world!");  
        }  
    }  
}

  定义一个final的变量,然后再在if语句中使用。代码如下:
Java代码  
public class Hello {  
    public static void main(String[] args) {  
        final boolean DEBUG = true;  
        if(DEBUG) {  
            System.out.println("Hello, world!");  
        }  
    }  
}

  当条件编译使用得多时,上面将极不利于代码的修改及维护,这时就可以用一种更为灵活的方法。定义一个静态类,里面专门定义用来控制条件编译的变量。然后再在具体的代码中导入该类,使用这些final变量。代码如下:
Java代码  
public class DebugConfig {  
    public static final boolean BLUETOOTH_DEBUG = false;  
    public static final boolean WIRELESS_DEBUG = false;  
}

Java代码  
if ( DebugConfig.BLUETOOTH_DEBUG) {  
    // TODO   
}  
--------------------- 
作者:郭风朴 
来源:CSDN 
原文:https://blog.csdn.net/Guofengpu/article/details/51104185 
版权声明:本文为博主原创文章,转载请附上博文链接!

java实现条件编译相关推荐

  1. [Java基础] Java如何实现条件编译

    条件编译绝对是一个好东西.如在C或CPP中,可以通过预处理语句来实现条件编译.但是在JAVA中却没有预处理,宏定义这些东西,而有时在一些项目中,我们又需要条件编译.那么,在JAVA中,该如何实现条件编 ...

  2. Java中的条件编译

    在代码中添加大量log,对于CPU和内存的影响如何,会不会降低性能?相信有不少人对此有疑问,本文将详细解答该问题. 一.概述 条件编译是指源程序的代码行,可以在满足一定条件的情况下才进行编译,而未选中 ...

  3. 自然语言交流系统 phxnet团队 创新实训 个人博客 (二)

    因为项目用的到条件编译,遂专门记载: 众所周知在C和CPP中可以通过预处理语句来实现条件编译,但是在java中没有预处理语句,我们该如何实现条件编译呢? 这是一个简单的demo Java代码   pu ...

  4. Java知识点:条件编译

    (1)如果if的条件是false,则在编译时忽略这个if语句. (2)忽略未使用的变量. 下面举一个例子来证明上面的观点. public class ConditionalCompilation01 ...

  5. Java 条件编译 Conditional Compilation

    根据Java编译器的优化的机制,Java也能够提供条件编译.对于条件设为false的语句,编译器将不对条件覆盖的代码段生成字节码. 不仅可以用简单的boolean常量值来做条件编译,还可以用字符串常量 ...

  6. Java中利用package机制实现条件编译

    Java中并没有C语言里的"条件编译"特性.这种特性在C语言里是用来解决代码的跨平台问题的,可以通过让代码的不同部分根据其运行的具体平台进行编译.由于Java本身就设计为一种跨平台 ...

  7. java 条件编译_Java条件编译:如何防止代码块被编译?

    Java条件编译:如何防止代码块被编译? 我的项目需要Java 1.6进行编译和运行. 现在,我有一个要求使其与Java 1.5一起使用(从市场营销方面). 我想替换方法主体(返回类型和参数保持相同) ...

  8. elif是不是java关键字_C# 中的#if、#elif、#else、#endif等条件编译符号 (转载)

    这些是C#中的条件编译符号.这些指令我在项目中遇到过,查过网络,问过人(当然,既不认识大牛,也不认识小牛,所以没什么收获).今天翻看一本资料,有提到这个方面的东西,所以写下来和能看到这篇文章的人一起学 ...

  9. c java 的关系,c#与c、java的关系

    c#与c.java的关系 C#从Java继承而来的特点 类:在C#中类的申明与Java很相似.这是合理的因为经验告诉我们Java模型工作得很好.Java的关键字import已经被替换成using,它起 ...

最新文章

  1. php 写入exif,PHP写入读取图片自定义信息_exif或者什么的?
  2. 【Spring源码分析系列】bean的加载
  3. golang 正则表达式 简介
  4. python 属性可修改的装饰器 监控函数的运行时间
  5. python 学习笔记 5 -- 文件输入输出
  6. [转]ubuntu系统重新分区、根目录扩容
  7. ElasticSearch-.net平台下c#操作ElasticSearch详解
  8. Java 新手习题()
  9. css居中的几种方法_CSS几种常用的水平垂直居中对齐方法
  10. 什么是实验室人员比对人员_中实在线——程老师小课堂 实验室人员管理技巧...
  11. 如何保证消息队列的高可用啊
  12. dedecms 封面模板和列表模板有什么不同
  13. 中国幻想向欧美妥协取得5G权益将是一种错误
  14. 矩阵链乘——动态规划
  15. C盘快要满啦-给Windows10优化瘦身
  16. css3多变形,CSS3 clip-path polygon图形构建与动画变换二三事
  17. 努比亚Z5Smini刷机包 官方H125 音量唤醒 自启管理 CRT管理 稳定
  18. Python+Vue计算机毕业设计教师教学质量评价管理2lbw7(程序+LW+源码+部署)
  19. 2021年安徽省大数据与人工智能应用竞赛大数据(网络赛)-高职组赛题第三部分可视化
  20. 推荐一个学习SQL的网站-自学SQL网

热门文章

  1. 百度如何能实时检索到15分钟前新生成的网页?--转
  2. Spring Security 4 Method security using @PreAuthorize,@PostAuthorize, @Secured, EL--转
  3. Mybatis之Oracle增删查改示例--转
  4. Java Machine Learning Tools Libraries--转载
  5. 深入了解ibatis源码----简单ibatis示例代码
  6. 客户流失预警模型-GBDT模型
  7. 从生命周期去看互联网金融产品的风险管理框架
  8. 中国人民银行:关于防范代币发行融资风险的公告
  9. 深入理解分布式技术 - 结合RocketMQ和Kafka理解MQ的两种经典模式_P2P模式和发布订阅模式
  10. Apache ZooKeeper - ZK的ACL权限控制( Access Control List )