Java中并没有C语言里的“条件编译”特性。这种特性在C语言里是用来解决代码的跨平台问题的,可以通过让代码的不同部分根据其运行的具体平台进行编译。由于Java本身就设计为一种跨平台的语言,因此这种特性就没有存在的必要了。

但是条件编译对于代码的调试来说还是很有用处的。就像我们在C语言中学到的一样,可以通过一些条件编译的开关来使得一些调试代码只在开发过程中使用,而在发布的版本中则不会编译进去。

我们可以利用Javapackage来模仿条件编译的概念,从而可以用于java代码的调试开发。

         代码如下所示:

  1. package com.vista.debug  
  2.  
  3. public class Assert  
  4. {  
  5.     private static void printErr(String msg)  
  6.     {  
  7.         System.err.println(msg);  
  8.     }  
  9.     public final static void isTrue(boolean exp)  
  10.     {  
  11.         if (!exp) printErr("Assertion failed");  
  12.     }  
  13.     public final static void isFalse(boolean exp)  
  14.     {  
  15.         if (exp) printErr("Assertion failed");  
  16.     }  
  17.     public final static void isTrue(boolean exp,String msg)  
  18.     {  
  19.         if (!exp) printErr("Assertion failed" + msg);  
  20.     }  
  21.     public final static void isFalse(boolean exp,String msg)  
  22.     {  
  23.         if (!exp) printErr("Assertion failed" + msg);  
  24.     }  

     如果想在我们的代码中使用这个断言类进行调试,只需要引入下述package:

  1. import com.vista.debug.*; 

 

    当我们准备编译发行版本时就需要清除掉原来引入的断言机制,为此我们只需要在了一个不同的package中创建一个同样名为Assert的类,代码如下: 

  1. package com.vista.release  
  2.  
  3. public class Assert  
  4. {  
  5.     private static void printErr(String msg){}  
  6.     public final static void isTrue(boolean exp){}  
  7.     public final static void isFalse(boolean exp){}  
  8.     public final static void isTrue(boolean exp,String msg){}  
  9.     public final static void isFalse(boolean exp,String msg){}  

  再将前面的import语句修改如下:

  1. import com.vista.release.*; 

    这样断言机制就从我们的代码中去除掉了。