zoukankan      html  css  js  c++  java
  • Java条件编译

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

          下面先给出HelloWorld.java文件:

     1 package com.test;
     2 
     3 /**
     4  * Test Demo
     5  */
     6 public class HelloWorld {
     7 
     8     public static void main(String[] args) {
     9         if (BuildConfig.FLAG) {
    10             System.out.println("Hello World");
    11         } else {
    12             System.out.println("Java条件编译测试");
    13         }
    14     }
    15 
    16 }

           再来看看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 内存区域 (程序计数器)
    java 枚举的应用
    ServiceLoad 应用(链式编程:统一执行某一类功能、、分支语句优化)
    python前端学习之css
    python学习四十四天(前端之HTML标签)
    python学习四十三天(网络IO模型)
    python学习四十二天(协程)
    python学习四十一天(线程)
    python学习四十天(进程池)
  • 原文地址:https://www.cnblogs.com/yili-2013/p/4526346.html
Copyright © 2011-2022 走看看