操作导入改变java行为
当前位置:以往代写 > JAVA 教程 >操作导入改变java行为
2019-06-14

操作导入改变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,我们可将本身的代码从调试版本酿成最终的刊行版本。这种技能可应用于任何种类的条件代码。

    关键字:

在线提交作业