从思路开始 Java如何实现条件编译

条件编译绝对是一个好东西。如在C或CPP中,可以通过预处理语句来实现条件编译。代码如下:

#IFDEF DEBUG 
#UNDEF DEBUG 
#ENDIF 
#define DEBUG 
#IFDEF DEBUUG 
  /* 
   code block 1 
   */ 
#ELSE 
  /* 
   code block 2 
  */ 
#ENDIF

  但是在JAVA中却没有预处理,宏定义这些东西,而有时在一些项目中,我们又需要条件编译。那么,在JAVA中,该如何实现条件编译呢?

  我们来看一个例子。

  编写一个helloworld程序。代码如下:

public class Hello { 
    public static void main(String[] args) { 
        System.out.println("Hello, world!"); 
    } 
}

  保存为Hello.java并编译,得到一个class文件,并且观察到文件大小是417字节。然后我们对这个文件进行反编译,用jd-gui。得到代码如下:

import java.io.PrintStream; 
public class Hello 

  public static void main(String[] paramArrayOfString) 
  { 
    System.out.println("Hello, world!"); 
  } 
}

  得到这个有什么用呢?

  现在我们再来对源代码进行修改,修改后的代码如下。

public class Hello { 
    public static void main(String[] args) { 
        if(false) { 
            System.out.println("Hello, world!"); 
        } 
    } 
}

  进行编译,这时我们再看它的大小,只有255字节。怎样?想到什么了吧?没错,编译器会对代码进行优化,对于条件永远为false的语句,JAVA编译器将不会对其生成字节码。下面我们再来对该class文件进行反编译,果然代码如下:

public class Hello 

  public static void main(String[] paramArrayOfString) 
  { 
  } 
}

 利用JAVA编译的这一优化机制,我们就可以实现JAVA的条件编译了。

public class Hello { 
    public static void main(String[] args) { 
        if(false) { 
            System.out.println("Hello, world!"); 
        } 
    } 
}

  定义一个final的变量,然后再在if语句中使用。代码如下:

public class Hello { 
    public static void main(String[] args) { 
        final boolean DEBUG = true
        if(DEBUG) { 
            System.out.println("Hello, world!"); 
        } 
    } 
}

  当条件编译使用得多时,上面将极不利于代码的修改及维护,这时就可以用一种更为灵活的方法。定义一个静态类,里面专门定义用来控制条件编译的变量。然后再在具体的代码中导入该类,使用这些final变量。代码如下:

public class DebugConfig { 
    public static final boolean BLUETOOTH_DEBUG = false
    public static final boolean WIRELESS_DEBUG = false
}
if ( DebugConfig.BLUETOOTH_DEBUG) { 
    // TODO 
}

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-20 01:35:29

从思路开始 Java如何实现条件编译的相关文章

求思路:java 针对字符串表达式 计算

问题描述 有这样一些表达式b = a - 19;b = a + 1;b = a * 12;b = a - (a/200) * 80......等一系列的表达式相当于就两个变量 a ,b就是怎么用方法实现 提供一个 a 这样的值,加入都是int类型的就是 public int method(int num_a){ ...... //按照上面某个表达式 ,就相当于 用这里的变量num_a 去替换 上面表达式的 a,然后执行计算,返回b return num_b (按照某个表达式计算的结果)}大家给个

Java 图片压缩实现思路及代码

本文为大家详细介绍下图片压缩的具体实现思路及java代码,想学习的各位可以参考下哈,希望对大家有所帮助   Java图片压缩代码 复制代码 代码如下: package com.img; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.im

java代码-java中影院售票系统的思路

问题描述 java中影院售票系统的思路 用java做一个影院售票系统,但是思路不是很清晰.感觉集合里面要嵌套类,类里面又有类.感觉很不清晰.哪位大神可以解答一下.说一下具体的思路也行 .当然要是有代码参考更好 解决方案 我的中级项目就是这个题材. 具体的思路和表的设计还有源码都有.给我个邮箱,晚上发给你.

extjs中用DWR调用java返回字符串放到panel的html中,求思路,谢谢

问题描述 如题 解决方案 解决方案二:哪进行不下去!还要求思路!java返回字符串不会DWR获取不到返回的字符串不会extJs用返回的字符串放到panel的HTML中不会

java 文章发布-利用java系统做个文章发布求思路

问题描述 利用java系统做个文章发布求思路 利用java做一个文章发布系统 初期的想法是使用Spring+Hibernate 在数据库取出的内容如何显示在页面 是用request么? 新手一只求指导 解决方案 数据库资源宝贵,肯定不能把源文件存进去,可以存文件名,再根据文件名到某一路径下获取该文件,使用浏览器可以在线预览或者下载!

java实现图片压缩的思路与代码_java

本文实例为大家分享了java实现图片压缩的相关代码,供大家参考,具体内容如下 import java.awt.Image; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import javax.imageio.ImageIO; public class ImageProcess {

php生成短网址的思路以及实现方法

短网址流行的已经有一段时间了,以前做新浪微博应用的时候就有接触,但没有搞清楚,最近再次接触到这个东东,仔细研究了下,发现短网址其实也挺容易的.下面就将本次对于生成短网址的思路以及使用php生成短网址的实现方法做一下记录. 生成短网址的思路:如果把短网址还原了,你知道是个什么样子的吗?比如: http://www.Alixixi.com/javascript-function/834.html 对于以上这个链接,除了直接打开之外,还有一种方法打开它,如下: http://www.Alixixi.c

在java中实现 AutoCAD api

因为在项目中需要从autoCAD 的dwg文件中提取标题框中的属性插入到数据库中实现图纸的批量入库. 一开始在网上搜索这方面的资料,其中有一些控件可以脱离autoCAD系统提取的,但都是要收费的.比如openDwg是用的比较多的.但是要交费成为会员才能使用.于是想自己分析DWG的文件格式,然后自己写个控件出来.找到了DWG文件格式说明.一看,吓一跳,如此的复杂,自己写是不现实的. 只好找其他的门路了.后来知道了ActiveX Automation,可以通过 ActiveX Automation操

Java 打开浏览器

使用Java 语言如何打开浏览器呢? 我们先研究下在cmd窗口中,如何打开网址 使用IE 打开 D:\software\bin>cmd /c start iexplore http://hw1287789687.iteye.com/blog/2153709 使用火狐打开 D:\software\bin>cmd /c start firefox http://hw1287789687.iteye.com/blog/2153709 使用google-chrome打开 D:\software\bin