JDK1.4新特性:斷言(轉)
JDK1.4新特性:斷言(轉)[@more@]JDK1.4中引入的一個新特性之一就是斷言(assert),為程式的除錯提供了強有力的支援,以下的文件根據SUNTEC內容及相關內容組成。
原始碼:
/**
* Simple examples of the use of the new assertion feature in JDK1.4
*
* @author S.Ritter 16/7/2001
**/
public class AssertExample {
public static void main(String[] args) {
int x = 10;
if (args.length > 0) {
try {
x = Integer.parseInt(args[0]);
} catch (NumberFormatException nfe) {
/* Ignore */
}
}
System.out.println("Testing assertion that x == 10");
assert x == 10:"Our assertion failed";
System.out.println("Test passed");
}
}
由於引入了一個新的關鍵字,所以在編譯的時候就需要增加額外的引數,要編譯成功,必須使用JDK1.4的javac並加上引數´-source 1.4´,例如可以使用以下的命令編譯上面的程式碼:
javac -source 1.4 AssertExample.java
以上程式執行使用斷言功能也需要使用額外的引數(並且需要一個數字的命令列引數),例如:
java -ea AssertExample 1
程式的輸出為:
Testing assertion that x == 10
Exception in thread "main" java.lang.AssertionError: Our assertion failed
at AssertExample.main(AssertExample.java:20)
由於輸入的引數不等於10,因此斷言功能使得程式執行時丟擲斷言錯誤,注意是錯誤,這意味著程式發生嚴重錯誤並且將強制退出。斷言使用boolean值,如果其值不為true則丟擲AssertionError並終止程式的執行。
由於程式設計師的問題,斷言的使用可能會帶來副作用,例如:
boolean isEnable=false;
//...
assert isEnable=true;
這個斷言的副作用是因為它修改程式變數的值並且沒有丟擲錯誤,這樣的錯誤如果不細心檢查很難發現。但是同時我們可以根據以上的副作用得到一個有用的特性,根據它測試是否將斷言開啟了。
/**
* Simple examples test enable assertion feature in JDK1.4
*
* @author Cherami 25/4/2002
**/
public class AssertExample2 {
public static void main(String[] args) {
boolean assertEnable=false;
assert assertEnable=true;
if (assertEnable==false)
{
throw new RuntimeException("Assertions should be enable");
}
}
}
如果我們不使用-ea引數執行上面的程式,則控制檯將輸出:
Exception in thread "main" java.lang.RuntimeException: Assertions should be enab
le
at AssertExample.main(AssertExample.java:14)
原始碼:
/**
* Simple examples of the use of the new assertion feature in JDK1.4
*
* @author S.Ritter 16/7/2001
**/
public class AssertExample {
public static void main(String[] args) {
int x = 10;
if (args.length > 0) {
try {
x = Integer.parseInt(args[0]);
} catch (NumberFormatException nfe) {
/* Ignore */
}
}
System.out.println("Testing assertion that x == 10");
assert x == 10:"Our assertion failed";
System.out.println("Test passed");
}
}
由於引入了一個新的關鍵字,所以在編譯的時候就需要增加額外的引數,要編譯成功,必須使用JDK1.4的javac並加上引數´-source 1.4´,例如可以使用以下的命令編譯上面的程式碼:
javac -source 1.4 AssertExample.java
以上程式執行使用斷言功能也需要使用額外的引數(並且需要一個數字的命令列引數),例如:
java -ea AssertExample 1
程式的輸出為:
Testing assertion that x == 10
Exception in thread "main" java.lang.AssertionError: Our assertion failed
at AssertExample.main(AssertExample.java:20)
由於輸入的引數不等於10,因此斷言功能使得程式執行時丟擲斷言錯誤,注意是錯誤,這意味著程式發生嚴重錯誤並且將強制退出。斷言使用boolean值,如果其值不為true則丟擲AssertionError並終止程式的執行。
由於程式設計師的問題,斷言的使用可能會帶來副作用,例如:
boolean isEnable=false;
//...
assert isEnable=true;
這個斷言的副作用是因為它修改程式變數的值並且沒有丟擲錯誤,這樣的錯誤如果不細心檢查很難發現。但是同時我們可以根據以上的副作用得到一個有用的特性,根據它測試是否將斷言開啟了。
/**
* Simple examples test enable assertion feature in JDK1.4
*
* @author Cherami 25/4/2002
**/
public class AssertExample2 {
public static void main(String[] args) {
boolean assertEnable=false;
assert assertEnable=true;
if (assertEnable==false)
{
throw new RuntimeException("Assertions should be enable");
}
}
}
如果我們不使用-ea引數執行上面的程式,則控制檯將輸出:
Exception in thread "main" java.lang.RuntimeException: Assertions should be enab
le
at AssertExample.main(AssertExample.java:14)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958320/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++11新特性(二):語言特性C++
- C++11新特性(一):語言特性C++
- C++11新特性(三):語言特性C++
- Java 10新特性:型別推斷Java型別
- C# 7.0 語言新特性C#
- JBUILDER 5 新特性 (轉)UI
- swift語言新特性:可選值Swift
- 【轉】http2 新特性HTTP
- InterBase 6.5的新特性 (轉)
- XPath 2.0 的新特性 (轉)
- 玩轉iOS開發:iOS 11 新特性《Layout的新特性》iOS
- 玩轉ES6新特性
- 【轉】Spring Framework 5.0 新特性SpringFramework
- 11GR2新特性(轉)
- Spring3.1新特性(轉)Spring
- C# 6.0新特性(轉載)C#
- XSLT 2.0 的新特性 (轉)
- Java新特性--Java Web Start (轉)JavaWeb
- Fedora Core 6的新特性(轉)
- Java從8到21的語言新特性Java
- 十二、Jmeter 斷言-響應斷言、Json 斷言和 Beanshell 斷言JMeterJSONBean
- 玩轉iOS開發:iOS 11 新特性《UIKit新特性的基本認識》iOSUI
- KPTI——可以緩解“熔斷” (Meltdown) 漏洞的核心新特性
- 10g新特性——Data Pump(轉)
- Oracle 11g 新特性(轉載)Oracle
- 號外:Delphi6新特性! (轉)
- 號外:Delphi6 新特性 !!!! (轉)
- JDBC 3.0 有什麼新特性 (轉)JDBC
- Asp(Active Server Page)的語言特性 (轉)Server
- C++2.0——語言新特性之Variadic TemplatesC++
- TiDB 4.0 新特性前瞻(四)圖形化診斷介面TiDB
- JAVA8 新特性(二)轉載整理Java
- (轉)oracle10g新特性之 flashbackOracle
- Delphi6的新特性[翻譯] (轉)
- Java8 新特性 —— 函數語言程式設計Java函數程式設計
- 新特性
- Oracle11新特性——PLSQL新特性(七)OracleSQL
- Oracle11新特性——PLSQL新特性(六)OracleSQL