zoukankan      html  css  js  c++  java
  • Java知识点:条件编译

    条件编译

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

    具体应用场景

    • 实现一个在 Linux和Windows上使用的程序,当程序在Linux上运行时,运行某一段代码,当程序在Windows上运行时,运行另一段代码。
    • 实现一个区分 Debug 和 Release 模式的程序,即当程序用于Debug时,运行某一段代码,当程序用于 Release时,运行另一段代码。

    Java编译器优化法则

    (1)如果if的条件是false,则在编译时忽略这个if语句。

    (2)忽略未使用的变量。

    下面举一个例子来证明上面的观点。

     1 public class ConditionalCompilation01
     2 {
     3     public static void main(String[] args) {
     4         final boolean flag = false;
     5         int a = 1;
     6         if(flag)
     7         {
     8             System.out.println("hello");
     9         }
    10     }
    11 }

    生成class文件后,用jad反编译后结果如下:

     1 public class ConditionalCompilation01
     2 {
     3 
     4     public ConditionalCompilation01()
     5     {
     6     }
     7 
     8     public static void main(String args[])
     9     {
    10     }
    11 }

    其中 a 是未使用的变量,而因为flag是final的,且为false,因此编译器也将其忽略。

    条件编译应用

    场景:实现一个区分DEBUG和RELEASE模式的程序。

    通常为了让Java条件编译更加方便,我们创建一个类:CompilationConfig。

    1 class CompilationConfig
    2 {
    3     static final boolean DEBUG_MODE = true;
    4     static final boolean RELEASE_MODE = false;
    5 }

    从上面可以看出,这个类有如下特点:

    • 全部都是static final boolean常量。
    • 如果是debug模式,则DEBUG_MODE=true;
    • 如果是release模式,则RELEASE_MODE=true;
     1 public class ConditionalCompilation02
     2 {
     3     public static void main(String[] args) {
     4         if(CompilationConfig.DEBUG_MODE)
     5         {
     6             System.out.println("[DEBUG MODE]You can print sth");
     7         }
     8         else
     9         {
    10             System.out.println("[RELEASE MODE]You can print sth");
    11         }
    12     }
    13 }

    如果DEBUG_MODE=true,则class文件编译后,用jad反编译为如下代码:

     1 import java.io.PrintStream;
     2 
     3 public class ConditionalCompilation02
     4 {
     5 
     6     public ConditionalCompilation02()
     7     {
     8     }
     9 
    10     public static void main(String args[])
    11     {
    12         boolean flag = true;
    13         System.out.println("[DEBUG MODE]You can print sth");
    14     }
    15 }
  • 相关阅读:
    JavaWeb
    申请百度开发者账号
    秋招C++面试相关总结索引
    游戏开发客户端
    Python源码剖析——02虚拟机
    Python源码剖析——01内建对象
    Pymongo 笔记
    调用其他文件__name__=='__main__'下代码
    Python 相关
    Python import本地模块
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3233278.html
Copyright © 2011-2022 走看看