[Java基础] Java如何实现条件编译
条件编译绝对是一个好东西。如在C或CPP中,可以通过预处理语句来实现条件编译。但是在JAVA中却没有预处理,宏定义这些东西,而有时在一些项目中,我们又需要条件编译。那么,在JAVA中,该如何实现条件编译呢?
条件编译绝对是一个好东西。如在C或CPP中,可以通过预处理语句来实现条件编译。代码如下:
#IFDEF DEBUG
#UNDEF DEBUG
#ENDIF
#define DEBUG
#IFDEF DEBUUG
/*
code block 1
*/
#ELSE
/*
code block 2
*/
#ENDIF
但是在JAVA中却没有预处理,宏定义这些东西,而有时在一些项目中,我们又需要条件编译。那么,在JAVA中,该如何实现条件编译呢?
我们来看一个例子。
编写一个helloworld程序。代码如下:
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
保存为Hello.java并编译,得到一个class文件,并且观察到文件大小是417字节。然后我们对这个文件进行反编译,用jd-gui。得到代码如下:
import java.io.PrintStream;
public class Hello
{
public static void main(String[] paramArrayOfString)
{
System.out.println("Hello, world!");
}
}
得到这个有什么用呢?
现在我们再来对源代码进行修改,修改后的代码如下。
public class Hello {
public static void main(String[] args) {
if(false) {
System.out.println("Hello, world!");
}
}
}
进行编译,这时我们再看它的大小,只有255字节。怎样?想到什么了吧?没错,编译器会对代码进行优化,对于条件永远为false的语句,JAVA编译器将不会对其生成字节码。下面我们再来对该class文件进行反编译,果然代码如下:
public class Hello
{
public static void main(String[] paramArrayOfString)
{
}
}
利用JAVA编译的这一优化机制,我们就可以实现JAVA的条件编译了。
public class Hello {
public static void main(String[] args) {
if(false) {
System.out.println("Hello, world!");
}
}
}
定义一个final的变量,然后再在if语句中使用。代码如下:
public class Hello {
public static void main(String[] args) {
final boolean DEBUG = true;
if(DEBUG) {
System.out.println("Hello, world!");
}
}
}
当条件编译使用得多时,上面将极不利于代码的修改及维护,这时就可以用一种更为灵活的方法。定义一个静态类,里面专门定义用来控制条件编译的变量。然后再在具体的代码中导入该类,使用这些final变量。代码如下:
public class DebugConfig {
public static final boolean BLUETOOTH_DEBUG = false;
public static final boolean WIRELESS_DEBUG = false;
}
if ( DebugConfig.BLUETOOTH_DEBUG) {
// TODO
}
[Java基础] Java如何实现条件编译的更多相关文章
- java基础---->java中正则表达式二
跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...
- Java基础-Java中的堆内存和离堆内存机制
Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java基础-Java中的内存分配与回收机制
Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.
- Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)
Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...
- Java基础-Java中的并法库之线程池技术
Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.
- Java基础-Java中23种设计模式之常用的设计模式
Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...
- Java基础-JAVA中常见的数据结构介绍
Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...
- Java基础-Java数据类型
Java基础-Java数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据类型的作用 数据类型就是一组值,以及这一组值上的操作,数据类型可以决定数据的存储方式,取值范围 ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- java基础-java核心知识库
本人从事java开发6年左右,主要从事互联网相关的开发,目前还是奋战在一线的码农,痛并快乐着.受互联网产品热潮的影响,关注高性能低成本架构,互联网开发框架,以下是我认为作为一个资深java程序员应该掌 ...
随机推荐
- jquery的ajax提交
ajax函数封装 function Ajax(imethod,iurl,iasync,idata,ifunc){ $.ajax({ type:imethod, cache: false, dataTy ...
- 在ubuntu 上面安装ubuntu touch 模拟器
Canonical 公司已经发布了一个运行着Unity8和Mir的Ubuntu Touch模拟器.虽然有一些bug,例如在64位的系统上会使系统崩溃,但我们相信这些都会被一 一修复,这篇文章将教大家如 ...
- python mysql插入多条数据
#!/usr/bin/env python # encoding: utf-8 import pymysql from config.config import * import datetime d ...
- vs附加到进程报MSVSMON.EXE未在远程计算机启动错误
拿到同事电脑发现居然附加不上本地进程,网上那些关防火墙更改目标平台之类的方法都没用.最后发现是后台运行着一个叫 ss_privoxy.exe 的代理软件搞的,禁用所有非系统服务重启后删掉以绝后患.
- Java坦克大战 (七) 之图片版
本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...
- 修改ueditor CSS
- PHPExcel 长数字串显示为科学计数 与 其他错误
一.解决 PHPExcel 长数字串显示为科学计数 在excel中如果在一个默认的格中输入或复制超长数字字符串,它会显示为科学计算法,例如身份证号码,解决方法是把表格设置文本格式或在输入前加一个单引号 ...
- AJAX--前后台交互
注:ajax通过async参数决定是异步还是同步,false同步,true异步; 异步执行顺序是先执行后续动作,再执行success里代码; 同步是先执行success里代码,再执行后续代码; 验证: ...
- DELPHI 参数前缀的使用
传值参数传值参数可在过程内部修改,但过程返回时该修改不会反映出来.不加任何前缀,就表示该参数为传值参数.Procedure Foo( I : Integer );I 的值被传递到Foo 过程.当Foo ...
- Servlet中使用 Last-Modified、Expires和Cache-Control
long now = System.currentTimeMillis(); long expires = System.currentTimeMillis() + (1000 * 60 * minu ...