用java这么久,说来惭愧,大部分情况下使用的调试语句是:System.out.println("value:"+value);这种形式(难怪自己是earth girl了),这两天看了些关于java调试技巧的东西,总结一下,以后要积极使用: 一:一种很简单的方法就是使用一个boolean量如:debugMode,需要看看程序的输出时可以使用:if(debugMode)System.out.println("..");       在项目完毕后把debugMode变量设为false;      这种方法的不足是:为了启动或者禁止debug,必须改动代码 二:     一个比上述方法稍好的是:使用java -D:如:java -Ddebug=true MyClass,     在使用这种方法时,必须在你所有的class中添加System.getProperty("debug")来取得调试标志,这样第一种方法的使用,就改为:     public static final boolean debug;     static{        String sDebug=System.getProperty("debug");        if(sDebug!=null && sDebug.equalsIngnoreCase("true"))           debug=true;        else           debug = false;     }     这样在不更改source code的情况下可以直接修改调试标志,但是这样不够灵活,比如你不能指定哪一部分使用调试功能,而只是     要使用调试功能就必须在代码的全部使用,这样就引出了第三种调试方法,可以定义一个用于调试的类。 三:    public class DebugManager { 
 public static final String SYSTEM_DEBUG_KEY="system.Debug";  public static final boolean debug;  static {      debug = toBoolean(SYSTEM_DEBUG_KEY);  }  private static boolean toBoolean(String key){   boolean debug;   String sDebug = System.getProperty(key);   if(sDebug != null && sDebug.equalsIgnoreCase("true"))    debug = true;   else    debug =false;   return debug;  }    public static boolean getSystemDebug(){   return debug;  }  public static boolean getSystemDebug(String applicationKey) {   if(debug || toBoolean(applicationKey))    return true;   else    return false;  } } 
这样对于一个application(Test)可以着牙功能调用:    boolean debug =DebugManager.getSystemDebug(applicationKey); 要打开Test的调试功能,只需:   java -DTest.Debug=true Test   当然这个类可以进行进一步扩展,比如将其变为日志管理,控制调试信息的输出位置等 四:    使用断言    断言是Merlin(jdk1.4)中一项新功能,默认情况下不使用断言,但是programmer可以在任何时候enable或者disable这项功能,    从而可以在测试时启用断言验证,而在部署时禁用断言验证,而程序运行时若用户碰到问题时再重新启用断言。    断言检查,失败时不会抛出Exception,而是抛出AssertionError,    1,断言的两种语法形式:      (1)assert booleanExpression;       (2) assert boolExpression:message; //message将作为错误抛出后的结果显示    assert必须位AssertTest   于可执行快中,不能将assert和实例的类变量一起使用,但可以将其放在任何方法内。    2,启用断言:    编译:javac -source 1.4 AssertTest.java    运行:java -ea AssertTest (参数)     -ea是启用断言的简易方法,但是-ea不能用于系统类,    (1)若要对系统类使用断言:则需:-enablesystemassertions,或者-esa    (2)若要对这个package启用断言:要在-ea后加(:,package的名字,...)如对test.util包及其所有的    子包启用断言,则可以java -ea:test.util... AssertTest  
 
  |