日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java高级断言_Java之断言

發布時間:2024/10/8 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java高级断言_Java之断言 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自博客:http://blog.csdn.net/tanga842428/article/details/52463694

一、語法形式

Java在1.4中新增了一個關鍵字:assert。在程序開發過程中使用它創建一個斷言(assertion),它的語法形式有如下所示的兩種形式:

1、assert?condition;

這里condition是一個必須為真(true)的表達式。如果表達式的結果為true,那么斷言為真,并且無任何行動。如果表達式為false,則斷言失敗,則會拋出一個AssertionError對象。這個AssertionError繼承于Error對象,而Error繼承于Throwable,Error是和Exception并列的一個錯誤對象,通常用于表達系統級運行錯誤。

2、asser?condition:expr;

這里condition是和上面一樣的,這個冒號后跟的是一個表達式,通常用于斷言失敗后的提示信息,說白了,它是一個傳到AssertionError構造函數的值,如果斷言失敗,該值被轉化為它對應的字符串,并顯示出來。

二、使用示例

下面是一個使用assert的例子:

public?class?TestAssert{

public?static?void?main(String[]?args){

String?chai";

//String?assert(name!=null):"變量name為空null";

System.out.println(name);

}

}

上面程序中,當變量name為null時,將會拋出一個AssertionError,并輸出錯誤信息。要想讓上面的程序中的斷言有效并且正確編譯,在編譯程序時,必須使用-source 1.4選項。如:

javac?-source?1.4?TestAssert.java

在Eclipse(3.0M9)開發環境中,必須在window->preferences 中,左邊選中"Java->Compiler",右邊選擇“Compliance and ClassFiles”頁面下的將"Compiler Compliance Level"選擇為1.4;同時,將"Use Default Compiler Settings"前的勾去掉。并將下面的"Generated .class file compatibility"和"Sourcecompatibility"均選擇為1.4,才能正確編譯。

同時,要想讓斷言起效用,即讓斷言語句在運行時確實檢查,在運行含有assert的程序時,必須指定-ea選項。如:為了能夠讓上面的程序運行,我們執行下面代碼:

java?-ea?TestAssert

在Eclipse(3.0M9)開發環境中,有2種開啟斷言的設置方式:

(1) Run -> Run Configurations -> Arguments頁簽 -> VM arguments文本框中加上斷言開啟的標志:-enableassertions 或者-ea

(2) 在myEclipse中,Windows -> Preferences ->Java ->Installed JREs ->點擊正使用的JDK ->Edit ->Default VM Arguments文本框中輸入:-ea

三、注意事項

理解斷言最重要的一點是必須不依賴它們完成任何程序實際所需的行為。理由是正常發布的代碼都是斷言無效的,即正常發布的代碼中斷言語句都不執行的(或不起作用的),如果一不小心,我們可以錯誤地使用斷言,如:

public?class?TestPerson{

private?TestPerson(String?name){

this.name?=?name;

}

public?void?setName(String?nameStr){

this.name?=?nameStr;

}

public?String?getName(){

return?this.name;

}

public?static?void?main(String[]?args){

TestPerson?personObj?=?new?TestPerson("Abner?Chai");

String?personName?=?null;

assert(personName=personObj.getName())?!=?null;

System.out.println(personName.length());

}

}

這個程序中,對personName的賦值被轉移到assert語句中,盡管斷言有效時它可以很好地運行(即使用-ea運行時可以有效地運行)但如果斷言失效,則它會運行時報空指針錯誤。因為斷言無效時,personName=personObj.getName()一句永遠不會執行!

斷言對Java來說是一個好的條件,因為它們使開發過程中錯誤類型檢查流線化,例如,在沒有assert之前,上面的程序要想確認personName 不空,則必須:

if(personName!=null){

System.out.println(personName.length());

}

才行。有了assert后,使用assert,只需一行代碼,并且不必從發布的代碼中刪除assert語句。于是,上面的那個程序,經改正后,我們可以這么樣來正確的使用assert,如下:

public?class?TestPerson{

private?TestPerson(String?name){

this.name?=?name;

}

public?void?setName(String?nameStr){

this.name?=?nameStr;

}

public?String?getName(){

return?this.name;

}

public?static?void?main(String[]?args){

TestPerson?personObj?=?newTestPerson("Abner?Chai");

String?personName?=?null;

personName=personObj.getName();

assert?personName!=null;

System.out.println(personName.length());

}

}

四、其它選項

當執行代碼時,使用-ea選項使斷言有效,也可以使用-da選項使斷言無效(默認為無效)。同樣,也可以通過在-ea或-da后面指定包名來使一個包的斷言有效或無效。例如,要使一個com.test包中的斷言無效,可以使用:

-da:com.test

要使一個包中的所有子包中的斷言能夠有效或無效,在包名后加上三個點。例如:

-da:com.test...

即可使com.test包及其子包中的斷言無效。

總結

以上是生活随笔為你收集整理的java高级断言_Java之断言的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。