Java知识点:条件编译
条件编译
一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional compile)。 ---百度百科
具体应用场景:
- 实现一个在 Linux和Windows上使用的程序,当程序在Linux上运行时,运行某一段代码,当程序在Windows上运行时,运行另一段代码。
- 实现一个区分 Debug 和 Release 模式的程序,即当程序用于Debug时,运行某一段代码,当程序用于 Release时,运行另一段代码。
Java编译器优化法则
(1)如果if的条件是false,则在编译时忽略这个if语句。
(2)忽略未使用的变量。
下面举一个例子来证明上面的观点。
public class ConditionalCompilation01
{
public static void main(String[] args) {
final boolean flag = false;
int a = 1;
if(flag)
{
System.out.println("hello");
}
}
}
生成class文件后,用jad反编译后结果如下:
public class ConditionalCompilation01
{ public ConditionalCompilation01()
{
} public static void main(String args[])
{
}
}
其中 a 是未使用的变量,而因为flag是final的,且为false,因此编译器也将其忽略。
条件编译应用
场景:实现一个区分DEBUG和RELEASE模式的程序。
通常为了让Java条件编译更加方便,我们创建一个类:CompilationConfig。
class CompilationConfig
{
static final boolean DEBUG_MODE = true;
static final boolean RELEASE_MODE = false;
}
从上面可以看出,这个类有如下特点:
- 全部都是static final boolean常量。
- 如果是debug模式,则DEBUG_MODE=true;
- 如果是release模式,则RELEASE_MODE=true;
public class ConditionalCompilation02
{
public static void main(String[] args) {
if(CompilationConfig.DEBUG_MODE)
{
System.out.println("[DEBUG MODE]You can print sth");
}
else
{
System.out.println("[RELEASE MODE]You can print sth");
}
}
}
如果DEBUG_MODE=true,则class文件编译后,用jad反编译为如下代码:
import java.io.PrintStream; public class ConditionalCompilation02
{ public ConditionalCompilation02()
{
} public static void main(String args[])
{
boolean flag = true;
System.out.println("[DEBUG MODE]You can print sth");
}
}
Java知识点:条件编译的更多相关文章
- 学Android开发,入门语言java知识点
学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...
- 给Java新手的一些建议----Java知识点归纳(Java基础部分)
写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给 ...
- java没有条件编译
摘自http://maosidiaoxian.iteye.com/blog/1290740 条件编译绝对是一个好东西.如在C或CPP中,可以通过预处理语句来实现条件编译.代码如下: #IFDEF DE ...
- java知识点梳理
网络搜索结果,出处不详,仅供参考 对于刚刚接触Java的人,java基础知识技术点繁多,那么gkstk小编为大家汇总最全java知识点如下,仅供大家参考学习! 1. JVM相关(包括了各个版本的特性) ...
- 自己整理的所有java知识点(不断迭代中)
1. 自己整理的所有java知识点(不断迭代中) 画图工具注册 https://www.processon.com/i/599d35fae4b00d97d7f9bb17 1.1. Java整体知识架构 ...
- Java知识点-判断null、空字符串和空格
Java知识点-判断null.空字符串和空格 // 判断headerKey是否为null,空字符串或者空格 if (headerKey != null && headerKey.len ...
- typora中文版官方免费快速下载以及Markdown的一些常用语法、Java知识点
typora下载 链接:https://某度云盘的域名/s/1geD1APxnyV3gogYW3E08bQ 密码:8fdp 把某度云盘的域名进行替换 1.标题 # 标题1 ## 标题2 ### 标题3 ...
- 给Java新手的一些建议——Java知识点归纳(Java基础部分)
原文出处:CSDN邓帅 写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些Java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行 ...
- 给Java新手的一些建议——Java知识点归纳(Java基础部分)
写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给 ...
- Java知识点脑图
做服务器开发有十几年了,其中大部分用到的都是Java服务器开发,从JDK1.4到现在的JDK1.8,从基本的Java Application到 J2EE(JBOSS,Glassfish),OSGI,到 ...
随机推荐
- 常用git 命令
1.取消跟踪某些文件或文件夹: 删除文件: $git rm --cached FILENAME 删除文件夹: $git rm -r --cached Path 2.忽略某些文件或文件夹 $vi .gi ...
- python学习之“切片操作从入门到精通”
在python学习开发的过程中,我们总是不断的要对List(列表),Tuple(元组)有取值操作:假如我们有一个列表List1现在想取出1其中的前5个元素,改怎么操作呢? >>> L ...
- hibernate4.0中SessionFactory的创建
创建SessionFactory 首先创建Configuration对象,主要方式是: new Configuration().configure() 默认情况下Hibernate会去classPat ...
- hdu 1754 线段树入门
线段树点修改 区间最大值查询 #include <cstdio> #include <cstdlib> #include <cmath> #include < ...
- 【C++之STL】理解容器(ing)
“容器可容纳一些数据的模板类” “容器是包容其他对象的对象” 两种类型:顺序容器.关联容器 顺序容器 关联容器 访问成员 顺序访问和随机访问 经过优化关键键值访问 ...
- VisualSvn Server介绍
1 .VisualSvn Server VisualSvn Server是免费的,而VisualSvn是收费的.VisualSvn是Svn的客户端,和Visual Studio集成在一起,但是不免费 ...
- Thread的第一天学习
1.实现线程的方法: 1)extend Thread 2)implements Runnable 2.下面代码执行哪个run方法: new Thread( new Runnable(){ public ...
- Ubuntu Geany中文乱码
打开Geany,编辑,首选项,文件,选中“使用固定的编码打开非Unicode文件”,缺省编码选择“简体中文GBK)”. 另外,直接把文本文件拖进浏览器也行(前提是你的浏览器使用的是中文,我用的chro ...
- 用 EasyBCD 在 Win7/8 中硬盘安装 Ubuntu
写在前面: 1. 我装的是ubuntu 13.10 64位,不一样的地方是,从casper文件夹复制出来的文件不是vmlinuz,而是vmlinuz.efi,相应的,menu.lst里也要将vmlin ...
- lintcode :Trailing Zeros 尾部的零
题目: 尾部的零 设计一个算法,计算出n阶乘中尾部零的个数 样例 11! = 39916800,因此应该返回 2 挑战 O(logN)的时间复杂度 解题: 常用方法: 也许你在编程之美中看到,通过求能 ...