java实现条件编译
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实现条件编译相关推荐
- [Java基础] Java如何实现条件编译
条件编译绝对是一个好东西.如在C或CPP中,可以通过预处理语句来实现条件编译.但是在JAVA中却没有预处理,宏定义这些东西,而有时在一些项目中,我们又需要条件编译.那么,在JAVA中,该如何实现条件编 ...
- Java中的条件编译
在代码中添加大量log,对于CPU和内存的影响如何,会不会降低性能?相信有不少人对此有疑问,本文将详细解答该问题. 一.概述 条件编译是指源程序的代码行,可以在满足一定条件的情况下才进行编译,而未选中 ...
- 自然语言交流系统 phxnet团队 创新实训 个人博客 (二)
因为项目用的到条件编译,遂专门记载: 众所周知在C和CPP中可以通过预处理语句来实现条件编译,但是在java中没有预处理语句,我们该如何实现条件编译呢? 这是一个简单的demo Java代码 pu ...
- Java知识点:条件编译
(1)如果if的条件是false,则在编译时忽略这个if语句. (2)忽略未使用的变量. 下面举一个例子来证明上面的观点. public class ConditionalCompilation01 ...
- Java 条件编译 Conditional Compilation
根据Java编译器的优化的机制,Java也能够提供条件编译.对于条件设为false的语句,编译器将不对条件覆盖的代码段生成字节码. 不仅可以用简单的boolean常量值来做条件编译,还可以用字符串常量 ...
- Java中利用package机制实现条件编译
Java中并没有C语言里的"条件编译"特性.这种特性在C语言里是用来解决代码的跨平台问题的,可以通过让代码的不同部分根据其运行的具体平台进行编译.由于Java本身就设计为一种跨平台 ...
- java 条件编译_Java条件编译:如何防止代码块被编译?
Java条件编译:如何防止代码块被编译? 我的项目需要Java 1.6进行编译和运行. 现在,我有一个要求使其与Java 1.5一起使用(从市场营销方面). 我想替换方法主体(返回类型和参数保持相同) ...
- elif是不是java关键字_C# 中的#if、#elif、#else、#endif等条件编译符号 (转载)
这些是C#中的条件编译符号.这些指令我在项目中遇到过,查过网络,问过人(当然,既不认识大牛,也不认识小牛,所以没什么收获).今天翻看一本资料,有提到这个方面的东西,所以写下来和能看到这篇文章的人一起学 ...
- c java 的关系,c#与c、java的关系
c#与c.java的关系 C#从Java继承而来的特点 类:在C#中类的申明与Java很相似.这是合理的因为经验告诉我们Java模型工作得很好.Java的关键字import已经被替换成using,它起 ...
最新文章
- php 写入exif,PHP写入读取图片自定义信息_exif或者什么的?
- 【Spring源码分析系列】bean的加载
- golang 正则表达式 简介
- python 属性可修改的装饰器 监控函数的运行时间
- python 学习笔记 5 -- 文件输入输出
- [转]ubuntu系统重新分区、根目录扩容
- ElasticSearch-.net平台下c#操作ElasticSearch详解
- Java 新手习题()
- css居中的几种方法_CSS几种常用的水平垂直居中对齐方法
- 什么是实验室人员比对人员_中实在线——程老师小课堂 实验室人员管理技巧...
- 如何保证消息队列的高可用啊
- dedecms 封面模板和列表模板有什么不同
- 中国幻想向欧美妥协取得5G权益将是一种错误
- 矩阵链乘——动态规划
- C盘快要满啦-给Windows10优化瘦身
- css3多变形,CSS3 clip-path polygon图形构建与动画变换二三事
- 努比亚Z5Smini刷机包 官方H125 音量唤醒 自启管理 CRT管理 稳定
- Python+Vue计算机毕业设计教师教学质量评价管理2lbw7(程序+LW+源码+部署)
- 2021年安徽省大数据与人工智能应用竞赛大数据(网络赛)-高职组赛题第三部分可视化
- 推荐一个学习SQL的网站-自学SQL网
热门文章
- 百度如何能实时检索到15分钟前新生成的网页?--转
- Spring Security 4 Method security using @PreAuthorize,@PostAuthorize, @Secured, EL--转
- Mybatis之Oracle增删查改示例--转
- Java Machine Learning Tools Libraries--转载
- 深入了解ibatis源码----简单ibatis示例代码
- 客户流失预警模型-GBDT模型
- 从生命周期去看互联网金融产品的风险管理框架
- 中国人民银行:关于防范代币发行融资风险的公告
- 深入理解分布式技术 - 结合RocketMQ和Kafka理解MQ的两种经典模式_P2P模式和发布订阅模式
- Apache ZooKeeper - ZK的ACL权限控制( Access Control List )