学习过C语言或者C++语言的同学都知道它们支持条件编译,那么今天我们来学习下在Java语言中如何实现条件编译。Java语言本身没有提供条件编译,但是Java编译器对.java文件编译为.class文件做了优化,下面通过一个例子给大家详细讲解。

下面先给出HelloWorld.java文件:

 package com.test;

 /**
* Test Demo
*/
public class HelloWorld { public static void main(String[] args) {
if (BuildConfig.FLAG) {
System.out.println("Hello World");
} else {
System.out.println("Java条件编译测试");
}
} }

再来看看BuildConfig.java文件:

package com.test;

/**
* Created by Administrator on 2015/5/24.
*/
public final class BuildConfig { public static final boolean FLAG = false;
}

再来看看该.java文件被转化为.class文件的内容:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
// package com.test; public class HelloWorld {
public HelloWorld() {
} public static void main(String[] args) {
System.out.println("Java条件编译测试");
}
}

可以知道的是BuildConfig.FLAG永远都为false,if块内的代码当然也不会被执行,这部分代码就不会被编译到.class文件中。

  如果FLAG是字符串会怎么样?字符串之间如果使用equals进行比较,在转化为.class文件时不会得到优化。

HelloWorld.java文件:

package com.test;

/**
* Test Demo
*/
public class HelloWorld { public static void main(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)
// package com.test; public class HelloWorld {
public HelloWorld() {
} public static void main(String[] args) {
if("false".equals("false")) {
System.out.println("Hello World");
} else {
System.out.println("Java条件编译测试");
} }
}

如果真的需要字符串比较,实现条件编译的话可以使用 "=="。

HelloWorld.java文件:

package com.test;

/**
* Test Demo
*/
public class HelloWorld { public static void main(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)
// package com.test; public class HelloWorld {
public HelloWorld() {
} public static void main(String[] args) {
System.out.println("Hello World");
}
}

Java条件编译的更多相关文章

  1. Java 条件编译

    在C/C++中,使用#ifdef…#endif的代码,如果不满足条件,编译器是不会对这部分代码进行编译的.Java中并没有这种“条件编译”特性.这种特性在C语言里是用来解决代码的跨平台问题的,可以通过 ...

  2. Java知识点:条件编译

    条件编译 一般情况下,源程序中所有的行都参加编译.但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional compile).   ...

  3. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  4. java没有条件编译

    摘自http://maosidiaoxian.iteye.com/blog/1290740 条件编译绝对是一个好东西.如在C或CPP中,可以通过预处理语句来实现条件编译.代码如下: #IFDEF DE ...

  5. Java中的条件编译(转)

    源:Java中的条件编译 一直以来,不知道怎么在Java中实现像C/C++一样的#ifdef...#endif这样的预编译宏,致使Java代码中一直用if判断,刚好刚才看到了解决办法,记录一下. C/ ...

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

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

  7. 如何用Java实现条件编译

    在 C 或 C++ 中,可以通过预处理语句来实现条件编译.代码如下: #define DEBUG #IFDEF DEBUUG /* code block 1 */ #ELSE /* code bloc ...

  8. java编译期优化

    java语言的编译期其实是一段不确定的操作过程,因为它可以分为三类编译过程: 1.前端编译:把.java文件转变为.class文件 2.后端编译:把字节码转变为机器码 3.静态提前编译:直接把*.ja ...

  9. [译]C++, Java和C#的编译过程解析

    1.1.1 摘要 我们知道计算机不能直接理解高级语言,它只能理解机器语言,所以我们必须要把高级语言翻译成机器语言,这样计算机才能执行高级语言编写的程序,在接下来的博文中,我们将介绍非托管和托管语音的编 ...

随机推荐

  1. poj 1847 最短路简单题,dijkstra

    1.poj  1847  Tram   最短路 2.总结:用dijkstra做的,算出a到其它各个点要改向的次数.其它应该也可以. 题意: 有点难懂.n个结点,每个点可通向ki个相邻点,默认指向第一个 ...

  2. linux共享内存实验

    顾名思义,消息队列就是一些消息的列表,用户可以在消息队列中添加消息和读取消息等.从这点上看,消息队列具有一定的FIFO特性,但是它可以实现消息的随机查询,比FIFO具有更大的优势.同时,这些消息又是存 ...

  3. AngularJS 乱记

    1. 前端简单逻辑 <title data-ng-bind="{true:' ('+notice_count+') '}[notice_count > 0]+{true:glob ...

  4. iOS中的通知

    一.了解几个相关的类 1.NSNotification 这个类可以理解为一个消息对象,其中有三个成员变量. 这个成员变量是这个消息对象的唯一标识,用于辨别消息对象. @property (readon ...

  5. java解析xml文档(dom)

    DOM解析XML文档 读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵. DOM解析的特性就是读取xml文件 ...

  6. [CareerCup] 15.5 Denormalization 逆规范化

    15.5 What is denormalization? Explain the pros and cons. 逆规范化Denormalization是一种通过添加冗余数据的数据库优化技术,可以帮助 ...

  7. android-对话框

    一.常用对话框 AlertDialog: 功能最丰富,实际应用最广的对话框(以下三种对话框都是该对话框的子类) ProgressDialog:进度对话框.这个对话框只是对进度条的包装 DatePick ...

  8. CentOS安装开发组相关的包

    yum groupinstall "Development Tools"   yum groupremove "Development Tools"

  9. jquery选择器实例说明

    选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元素 .class $( ...

  10. html使用心得

    (1)<textarea style= "word-break:break-all" rows="5" cols="20"> 在 ...