程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 利用導入改變java行為

利用導入改變java行為

編輯:關於JAVA

Java已取消的一種特性是C的“條件編譯”,它允許我們改變參數,獲得不同的行為,同時不改變其他任何代碼。Java之所以拋棄了這一特性,可能是由於該特性經常在C裡用於解決跨平台問題:代碼的不同部分根據具體的平台進行編譯,否則不能在特定的平台上運行。由於Java的設計思想是成為一種自動跨平台的語言,所以這種特性是沒有必要的。
然而,條件編譯還有另一些非常有價值的用途。一種很常見的用途就是調試代碼。調試特性可在開發過程中使用,但在發行的產品中卻無此功能。Alen Holub(www.holub.com)提出了利用包(package)來模仿條件編譯的概念。根據這一概念,它創建了C“斷定機制”一個非常有用的Java版本。之所以叫作“斷定機制”,是由於我們可以說“它應該為真”或者“它應該為假”。如果語句不同意你的斷定,就可以發現相關的情況。這種工具在調試過程中是特別有用的。
可用下面這個類進行程序調試:
 

//: Assert.java
// Assertion tool for debugging
package com.bruceeckel.tools.debug;

public class Assert {
  private static void perr(String msg) {
    System.err.println(msg);
  }
  public final static void is_true(boolean exp) {
    if(!exp) perr("Assertion failed");
  }
  public final static void is_false(boolean exp){
    if(exp) perr("Assertion failed");
  }
  public final static void 
  is_true(boolean exp, String msg) {
    if(!exp) perr("Assertion failed: " + msg);
  }
  public final static void 
  is_false(boolean exp, String msg) {
    if(exp) perr("Assertion failed: " + msg);
  }
} ///:~

這個類只是簡單地封裝了布爾測試。如果失敗,就顯示出出錯消息。在第9章,大家還會學習一個更高級的錯誤控制工具,名為“違例控制”。但在目前這種情況下,perr()方法已經可以很好地工作。
如果想使用這個類,可在自己的程序中加入下面這一行:
import com.bruceeckel.tools.debug.*;
如欲清除斷定機制,以便自己能發行最終的代碼,我們創建了第二個Assert類,但卻是在一個不同的包裡:

 

//: Assert.java
// Turning off the assertion output 
// so you can ship the program.
package com.bruceeckel.tools;

public class Assert {
  public final static void is_true(boolean exp){}
  public final static void is_false(boolean exp){}
  public final static void 
  is_true(boolean exp, String msg) {}
  public final static void 
  is_false(boolean exp, String msg) {}
} ///:~

現在,假如將前一個import語句變成下面這個樣子:
import com.bruceeckel.tools.*;
程序便不再顯示出斷言。下面是個例子:
 

//: TestAssert.java
// Demonstrating the assertion tool
package c05;
// Comment the following, and uncomment the
// subsequent line to change assertion behavior:
import com.bruceeckel.tools.debug.*;
// import com.bruceeckel.tools.*;

public class TestAssert {
  public static void main(String[] args) {
    Assert.is_true((2 + 2) == 5);
    Assert.is_false((1 + 1) == 2);
    Assert.is_true((2 + 2) == 5, "2 + 2 == 5");
    Assert.is_false((1 + 1) == 2, "1 +1 != 2");
  }
} ///:~

通過改變導入的package,我們可將自己的代碼從調試版本變成最終的發行版本。這種技術可應用於任何種類的條件代碼。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved