日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > Java > 正文

Java陷阱之assert關鍵字詳解

2019-11-26 15:59:12
字體:
來源:轉載
供稿:網友

一、概述
 
在C和C++語言中都有assert關鍵,表示斷言。
在Java中,同樣也有assert關鍵字,表示斷言,用法和含義都差不多。

二、語法
 
在Java中,assert關鍵字是從JAVA SE 1.4 引入的,為了避免和老版本的Java代碼中使用了assert關鍵字導致錯誤,Java在執行的時候默認是不啟動斷言檢查的(這個時候,所有的斷言語句都 將忽略!),如果要開啟斷言檢查,則需要用開關-enableassertions或-ea來開啟。

assert關鍵字語法很簡單,有兩種用法:

1、assert <boolean表達式>
如果<boolean表達式>為true,則程序繼續執行。
如果為false,則程序拋出AssertionError,并終止執行。

2、assert <boolean表達式> : <錯誤信息表達式>
如果<boolean表達式>為true,則程序繼續執行。
如果為false,則程序拋出java.lang.AssertionError,并輸入<錯誤信息表達式>。

三、應用實例
 
下面給出一個例子,通過例子說明其用法:

復制代碼 代碼如下:

public class AssertFoo {
    public static void main(String args[]) {
        //斷言1結果為true,則繼續往下執行
        assert true;
        System.out.println("斷言1沒有問題,Go!");

        System.out.println("/n-----------------/n");

        //斷言2結果為false,程序終止
        assert false : "斷言失敗,此表達式的信息將會在拋出異常的時候輸出!";
        System.out.println("斷言2沒有問題,Go!");
    }
}


保存代碼到C:/AssertFoo.java,然后按照下面的方式執行,查看控制臺輸出結果:

1、編譯程序:
C:/>javac AssertFoo.java

2、默認執行程序,沒有開啟-ea開關:
C:/>java AssertFoo
斷言1沒有問題,Go!

-----------------

斷言2沒有問題,Go!

3、開啟-ea開關,執行程序:
C:/>java -ea AssertFoo
斷言1沒有問題,Go!

-----------------

Exception in thread "main" java.lang.AssertionError: 斷言失敗,此表達式的信息將
會在拋出異常的時候輸出!
        at AssertFoo.main(AssertFoo.java:10)

四、陷阱
 
assert關鍵字用法簡單,但是使用assert往往會讓你陷入越來越深的陷阱中。應避免使用。筆者經過研究,總結了以下原因:

1、assert關鍵字需要在運行時候顯式開啟才能生效,否則你的斷言就沒有任何意義。而現在主流的Java IDE工具默認都沒有開啟-ea斷言檢查功能。這就意味著你如果使用IDE工具編碼,調試運行時候會有一定的麻煩。并且,對于Java Web應用,程序代碼都是部署在容器里面,你沒法直接去控制程序的運行,如果一定要開啟-ea的開關,則需要更改Web容器的運行配置參數。這對程序的移 植和部署都帶來很大的不便。

2、用assert代替if是陷阱之二。assert的判斷和if語句差不多,但兩者的作用有著本質的區別:assert關鍵字本意上是為測試 調試程序時使用的,但如果不小心用assert來控制了程序的業務流程,那在測試調試結束后去掉assert關鍵字就意味著修改了程序的正常的邏輯。

3、assert斷言失敗將面臨程序的退出。這在一個生產環境下的應用是絕不能容忍的。一般都是通過異常處理來解決程序中潛在的錯誤。但是使用斷言就很危險,一旦失敗系統就掛了。

 
五、對assert的思考
 
assert既然是為了調試測試程序用,不在正式生產環境下用,那應該考慮更好的測試JUint來代替其做用,JUint相對assert關鍵的所提供的功能是有過之而無不及。當然完全可以通過IDE debug來進行調試測試。在此看來,assert的前途一片昏暗。

因此,應當避免在Java中使用assert關鍵字,除非哪一天Java默認支持開啟-ea的開關,這時候可以考慮。對比一下,assert能給你帶來多少好處,多少麻煩,這是我們選擇是否使用的的原則。

============================================================
comment:
反過來說,在某些開源組件中,比如validator、junit中,判斷過程仿佛使用了斷言風格,很有可能使用了大量的斷言,但筆者在沒看源碼之前不能確定。
如果是開發階段的簡單測試,junit就是一個便捷強悍的工具,沒有理由自己寫斷言而不去用它。

============================================================
comment:
首先可以用在單元測試代碼中。junit侵入性是很強的,如果整個工程大量的代碼都使用了junit,就難以去掉或者是選擇另外一個框架。如果單元測試代碼 很多,并且想復用這些單元測試案例,應該選擇assert而不是junit,便于使用別的單元測試框架,比如TestNG。同理正式的功能代碼根本就不應 該出現Junit,應該使用assert.

assert主要適合在基類,框架類,接口類,核心代碼類,工具類中。換言之,當你的代碼的調用者是另外一個程序員寫得業務代碼,或者是另外一個子系統時,就很有必要使用它。比如你做了一個快速排序的算法

復制代碼 代碼如下:

public static List<int> quickSort(List<int> list){
  assert list != null;
  // 申請臨時空間
  //開始排序
  for(int i : list){
      //
  }
}

這種情況下,如果不檢查傳入參數的正確性,會拋出一個莫名其妙的空指針錯誤。你的調用者可能并不清楚你代碼的細節,在一個系統的深處調試一個空指針錯誤是很浪費時間的。就應該直接明確的告訴你的調用者是傳入的參數有問題。否則他會懷疑你的代碼有BUG。使用assert可以避免兩個程序員之間互相指責對方寫的代碼有問題。

assert適用那些你知道具體是什么錯誤,你和你的調用者已經約定應該由你的調用者去排除或檢查的錯誤。你通過一個斷言告訴你的調用者。assert不適用那些外部系統造成的錯誤,比如用戶輸入數據的錯誤,某個外部文件格式錯誤。這些錯誤不是你的調用者而是用戶造成的,甚至于不屬于異常,因為出現輸入錯誤和文件格式錯誤是經常的,這些錯誤應該由業務代碼去檢查。

assert比較適合于被頻繁調用的 基類,框架代碼,工具類,核心代碼,接口代碼中,這正是它在運行時被去掉的原因。測試代碼應該在測試階段開啟-ea參數,便于對系統深處的核心代碼做仔細的測試。

Java較少使用assert的原因是Java有很完整的OO體系,強制類型轉換出現得較少,所以不需要類似c那樣需要頻繁的檢查指針的類型是否正確,指針是否為空。同時Java也很少直接管理內存或緩沖區,所以不需要頻繁的檢查傳入的緩沖區是否為空或者是已經越界。

但使用好assert有助于提高框架代碼的正確性和減少框架代碼的使用者的調試時間。

===============================================================
comment:
assert要達到的目的是讓程序員方便的發現自己的邏輯錯誤,并且不影響程序的效率。assert所發現的錯誤,是完全不應該出現的,是不能用異常代替的。異常,那是系統所允許的,或者是系統不可控的“錯誤”,它不是程序員的邏輯問題。

assert應該是開發階段打開,而在發布后關閉。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
欧美日韩国产不卡在线看| 亚洲一二三不卡| 国产999在线观看| 国产欧美久久久| 欧美日韩成人一区二区| 国产 欧美 在线| 久久福利视频一区二区| 日本中文字幕在线观看| 韩日中文字幕第一页| 精品一二三四| 久久久99免费| 97久久精品| 91精品国产综合久久久久久| 不卡视频一区二区| 欧美日韩性视频一区二区三区| 欧美日韩综合在线| 欧美高清一级片在线| 日本一级一片免费视频| 日韩三级高清在线| 免费在线观看国产黄| 色www精品视频在线观看| 中文字幕一区不卡| 麻豆一区二区99久久久久| 日本亚洲欧美天堂免费| 精品亚洲综合| 拍真实国产伦偷精品| 久久久精品网| 国产欧美日韩第一页| 久久精品蜜桃| 欧美不卡一区二区| 91久久在线| √新版天堂资源在线资源| 深夜福利一区二区| 亚洲狠狠婷婷综合久久久久图片| 欧美日韩中文字幕在线观看| 免费在线国产| 日韩精品不卡一区二区| 一区二区不卡在线播放| 国产导航在线| 精品网站999| 国产日韩精品久久久| 国产乱码在线| 国产在线黄色片| 欧美亚洲国产日韩| av免费在线不卡| 日韩福利视频导航| 国产区日韩欧美| 欧美一级日韩一级| 国产欧美日韩三级| 日韩在线视频一区二区三区| 精品1区2区3区| 日韩欧美色综合网站| 精品一区二区三区中文字幕| 天天摸日日摸狠狠添| 欧美日韩久久久| 日韩精品丝袜在线| 欧美日韩国产页| 国产乱国产乱老熟300| 91精品在线看V| 日韩中文字幕在线视频播放| 国产欧美日韩视频| 中文字幕最新精品| 亚洲福利在线观看| 国产欧美久久久| 亚洲经典中文字幕| 一区在线免费| 蜜桃精品视频| 亚洲国产一区自拍| 玖玖在线免费视频| 精品久久久精品| 欧美 日韩 国产在线观看| wwww亚洲| 日本亚洲欧美三级| 伊人亚洲视频| 人成在线免费视频| 国产福利久久| 亚洲综合日韩| 人成免费在线视频 | 国产区在线看| 免费网站看黄yyy222| 天堂在线中文| 亚洲欧洲日产国码av系列天堂 | 欧美日韩中文精品| 欧美久久一二三四区| 精品乱子伦一区二区| 久久99精品国产| 欧美日韩在线三级| 国产在线观看色| 欧美日韩在线第一页| 韩国一区二区av| 亚洲成年人影院在线| 伊人www22综合色| 国产黄色片大全| 不卡一区2区| 日韩一级中文字幕| 99国产一区| 日韩欧美在线综合网| 欧美三级免费观看| 91欧美在线| 日韩中文字幕在线视频播放| 国产小视频在线观看免费| 91精品国产综合久久蜜臀 | 欧美日韩成人一区| 久久视频免费看| 91亚洲国产| 国产99在线|亚洲| av免费在线播放| 国产一级粉嫩xxxx| 国产欧美三级| 中文官网资源新版中文第二页在线观看| 亚洲综合视频一区| 日韩欧美国产成人精品免费| 中文字幕亚洲视频| 久久久久久99精品| 91精品国产高清91久久久久久| 在线欧美日韩国产| 中文字幕在线观看视频www| 激情久久99| 国产欧美日韩中文字幕在线| 精品极品三级久久久久| 欧美日韩国产一二| 久久久91精品国产| 中文字幕亚洲乱码| 日韩国产高清一区| 亚洲一区精品电影| 亚洲天堂国产视频| 香蕉精品久久| 欧美.日韩.国产.一区.二区| 日韩欧美亚洲区| 国产午夜在线观看| 国产亚洲福利| 欧美日韩国产综合视频在线观看中文| 国产手机视频一区二区| 日韩精品在线视频| 日韩欧美在线综合| 麻豆精品99| 日韩国产欧美三级| 国产欧美一级| 日韩免费电影网站| 日韩免费精品视频| 一区二区高清在线| 欧美日韩一级视频| 91极品视频在线观看| 中文字幕国产欧美| 欧美不卡视频一区| 久久夜色精品国产噜噜亚洲av| 在线观看区一区二| 又黄又www的网站| 91久久精品国产| 久久精品免费看| 日本免费在线视频不卡一不卡二| 二区三区中文字幕| 亚洲一卡二卡在线观看| 精品激情国产视频| 精品国产乱码久久久久久牛牛| 欧美日韩在线观看首页| 国产亚洲视频中文字幕视频| 欧美日韩成人综合| 久久香蕉av| 国产欧美日韩亚州综合| 久久香蕉av| 色www精品视频在线观看| 亚洲一区三区在线观看| 欧美日韩国产一二| 在线欧美日韩国产| 免费高清在线一区| 九九在线精品| 久久精品国产91精品亚洲| 中文字幕2020第一页| eeuss一区| 91久久精品网| 久久麻豆视频| 亚洲综合中文字幕在线| 午夜私人影院在线观看| 日韩欧美99| 国产欧美日韩中文字幕| 日韩精品大片| 欧美 日韩 国产在线| 国产又粗又猛又爽又黄91精品| 91精品免费观看| 亚洲国产欧美日韩在线| 国产网站欧美日韩免费精品在线观看| 久久久水蜜桃| 欧美日韩精品在线观看| 日本一级一片免费视频| 国产一二三四| 中文字幕4区| www..com日韩| 亚洲 欧美综合在线网络| 欧美wwww| 亚洲高清不卡一区| 日韩精品在线中文字幕| 精品无人国产偷自产在线| 91精品国产综合久久久久| 欧美日韩在线精品成人综合网| 欧美日韩国产免费观看视频| 91精品国产综合久久精品| 精品999在线| 日韩欧美国产黄色| 国产三级在线播放| 亚洲国产午夜精品| 日韩视频在线一区| 日韩欧美综合在线视频| 最近免费中文字幕在线第一页| 亚洲第一福利视频在线| 欧美日韩激情在线一区二区三区| 亚洲国产午夜精品| 国产 欧美 在线| 久久精品99久久久久久久久| 国产欧美日产一区| 欧美日韩亚洲一区| 黄色国产网站在线播放| 91精品国产经典在线观看| 国产中文在线| 日韩在线精品| 欧美日韩在线三级| 国产亚洲欧美色| 不卡av免费在线| 91xxx在线观看| 欧美日韩中文字幕在线| 亚洲 国产 欧美 日韩| 中文在线视频| 91精品免费观看| 92久久精品| 91精品婷婷国产综合久久竹菊| 欧美日韩国产区| 在线国产三级| 精品一区二区在线观看视频| 国产一级粉嫩xxxx| 欧美日韩精品电影| 九九精品调教| 国产一级片在线| 一区二区不卡视频在线观看| 亚洲男女av一区二区| 在线精品日韩| 在线视频不卡国产V| 欧美日韩国产高清一区| 伊人www22综合色| 一区二区在线看| 中文字幕亚洲国产| 久久久精品日韩欧美| 免费日韩精品中文字幕视频在线| 亚洲一区中文字幕在线观看| 一区二区在线视频播放| 欧美成人一区二区| 中文字幕欧美日韩在线| 欧美成人一区二区| 国产视频一区三区| 91久久精品网| 国产欧美 在线欧美| 日韩久久不卡| 国产三级第一页| 中文字幕4区| 国产欧美日韩91| 久久99久久久久久久噜噜| 亚洲综合视频一区| 亚洲一区在线观看视频| 日韩视频在线观看一区| 欧美日韩国产一区中文午夜| 亚洲免费精品视频| 91精品国产丝袜白色高跟鞋| 亚洲综合在线电影| 亚洲国内精品视频| 中文字幕日韩在线观看| 91精品999| 欧美日韩精品高清| 国产激情在线观看| 中文国产字幕在线观看| 欧美日韩不卡在线视频| 欧美三级中文字幕在线观看| 国产三级精品在线观看| 国产高潮久久久| 亚洲经典中文字幕| 日韩欧美不卡在线| 在线一区二区三区精品| www.精品视频| 欧美日韩国产综合视频在线观看中文| www.狠狠干| 你懂的亚洲视频| 欧美日韩在线不卡| 中文字幕第一页在线播放| 精品久久久久久综合日本欧美| 一区二区不卡在线| 亚洲一区视频在线观看视频| 国产69精品久久app免费版| 亚洲国产专区| 91九色精品视频| 日韩欧美在线网址| 欧美不卡一区二区| 日韩 欧美 亚洲| 国产在线第一页| 日韩欧美亚洲视频| av免费网站在线| 精品无人国产偷自产在线| 91精品999| 激情婷婷亚洲| 日韩免费电影网站| 红桃视频亚洲| 亚洲国产欧美久久| 日韩欧美在线视频日韩欧美在线视频| wwwwww国产| 国产视频不卡| 亚洲综合三区| 一区二区高清视频| 日韩午夜中文字幕| 国产在线导航| 日韩欧美不卡视频| 国产不卡一区二区在线观看| 日韩高清不卡在线| 国产乱国产乱300精品| 91精品国产91久久久久| 国产欧美日韩在线看| 国内国产区免费视频| 国产欧美亚洲一区| 亚洲专区一区| 久久久综合av| 日本精品二区| 欧美日韩精品区| 国产欧美日韩最新| 日韩精品视频网站| 欧美日韩亚州综合| 日韩欧美中文在线| va中文字幕| 久久99久久久久久久噜噜| 91精品国产调教在线观看| 久久精品欧美日韩精品| 中文精品在线观看| 激情国产在线| 日韩a一区二区| 日韩精品视频中文字幕| 日韩欧美中文在线视频| 精品国产欧美日韩| 精品视频在线导航| 欧美三级免费观看| 高清中文字幕在线| 91精品免费在线观看| 国产激情三区| 成人禁用看黄a在线| 国产成人综合精品| 国产三级精品网站| 国产高清精品二区| 91精品在线免费观看| 亚洲伊人婷婷| 欧美日韩高清一区二区| 一区二区三区久久| 亚洲综合在线中文字幕| 日韩一级在线免费观看| 国产 中文 字幕 日韩 在线| 日韩在线中文| av首页在线| 欧美日韩夫妻久久| 午夜福利一区二区三区| 欧美日韩免费不卡视频一区二区三区| 国产美女主播视频一区| 久艹在线视频| 久久久精品日韩欧美| 日本黄色一区二区| 91亚洲国产高清| 精品视频在线导航| 日韩专区中文字幕| 91亚洲欧美| 午夜黄色小视频| 亚洲一区三区在线观看| 国产字幕中文| 亚洲大胆人体av| 日韩在线播放一区二区| 日韩亚洲欧美中文在线| 欧美在线亚洲一区| 国产卡1卡2卡三卡在线| 在线免费播放av| 在线观看国产一级片| 麻豆一区二区99久久久久| 欧美日韩国产在线观看| 亚洲高清精品视频| 欧美日韩色综合| 在线资源av| 中文字幕不卡三区| 在线日韩欧美| 亚洲免费福利视频| 国产黄色在线| 亚洲男女av一区二区| 在线精品日韩| 999精品色在线播放| 91精品日本| 日韩中文字幕综合| 亚洲日本欧美日韩高观看| 欧美亚洲另类制服自拍| 中文字幕日韩免费视频| aaa欧美日韩| 不卡中文一二三区| 日韩免费看网站| 国产区高清在线| 欧美日韩999| 色妇色综合久久夜夜| 国产一区精品| 欧美日本精品在线| 中文字幕精品视频| 亚洲乱码中文字幕综合| 亚洲小说春色综合另类网蜜桃| 日韩精品一区二区三区视频播放|