• 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");
        }
    }
  • 相关阅读:
    CSDN的博客是肿么了?
    SQL Server 2005: 存储过程签名
    SQLSERVER中数据行所占用的最小空间
    如何配置 SQL Server 2005 以允许远程连接
    XamlPad小程序
    OPEN SYMMETRIC KEY scope in SQL Server
    SQL Server 2005 helpful catalogs: crypt_properties and key_encryptions
    WPF Unleashed Chapter 3:Important New Concepts in WPF Routed Events
    xp_cmdshell
    SQL Server 2005: 如何让用户只能加密数据却不能解密数据
  • 原文地址:https://www.cnblogs.com/yili-2013/p/4526346.html
Copyright © 2020-2023  润新知