Java筆記(二)異常罩缴、斷言蚊逢、日志

異常

常見錯誤類型

  1. 用戶錯誤輸入
  2. 設(shè)備錯誤
  3. 物理限制
  4. 代碼錯誤

異常分類

Java中的異常對象由Throwable派生而來,可分為Error和Exception兩個分支箫章。其中烙荷,Error類錯誤屬于內(nèi)部錯誤,如果出現(xiàn)檬寂,除了通告給用戶终抽,并盡力使程序安全的終止外,再也無能為力了。這種情況很少出現(xiàn)昼伴。
Exception類可分為兩個RuntimeException和IOException匾旭。

  1. RuntimeException
    RuntimeException由程序錯誤導(dǎo)致,包含以下幾種情況:
    • 錯誤的類型轉(zhuǎn)換
    • 數(shù)組訪問越界
    • 訪問空指針
  2. IOException
    IOException是程序本身沒問題亩码,但由于像I/O錯誤這類問題導(dǎo)致的異常,包括:
    • 試圖在文件尾部后面讀取數(shù)據(jù)野瘦;
    • 試圖打開一個不存在的文件描沟;
    • 試圖根據(jù)給定的字符串查找Class對象,而這個字符串表示的類并不存在鞭光;

創(chuàng)建異常類

class FileFormatException extends IOException{
    public FileFormatException (){}
    public FileFormatException (String gripe){
        super(gripe);
    }
}

String readData(BufferedReader in) throws FileFormatException{
    ...
    while(...){
        if (ch == -1){
            if (n < len)
                throw new FileFormatException();
        }
        ...
    }
    return s;
}

斷言

assert 條件
或
assert 條件:表達式
如
assert x > 0 : x;

斷言機制將會對條件進行判斷吏廉,當(dāng)不滿足條件是,會拋出一個AssertionError異常惰许,在第二種形式中席覆,表達式會以字符串的形式傳入AssertionError的構(gòu)造器,并打印出來汹买。斷言檢查只用于開發(fā)和測試階段佩伤,當(dāng)代碼發(fā)布時,這些插入的檢測語句將會被自動的移走晦毙。

日志

日志記錄器級別

  1. SEVER
  2. WARNING
  3. INFO
  4. CONFIG
  5. FINE
  6. FINER
  7. FINEST
    在默認情況下生巡,只記錄前三個級別。也可以設(shè)置其他的級別见妒。如
logger.setLevel(Level.FINE);

默認情況下孤荣,日志配置文件存在于:jre/lib/logging.properties

創(chuàng)建新的日志

通過 Logger.getLogger() 方法創(chuàng)建新 Logger,這個方法接收一個 String 參數(shù)须揣,用于指定 Logger 的名字盐股。如果指定名字的 Logger 已經(jīng)存在,那么只需要返回已經(jīng)存在的 Logger耻卡;否則疯汁,程序會創(chuàng)建一個新 Logger。
通常情況下卵酪,一種好的做法是涛目,我們在當(dāng)前類下使用 class.getName() 作為新 Logger 的名字。示例:

Logger logger = Logger.getLogger(MyClass.class.getName());

記錄日志事件

logger.log() 方法除了日志消息以外凛澎,還需要一個日志級別作為參數(shù):logger.log(Level.WARNING, "This is a warning!");大部分日志框架都針對輸出特定級別日志提供了快捷方式霹肝。例如,下面語句的作用和上面語句的作用是一樣的:logger.warning("This is a warning!")塑煎;你還可以阻止 Logger 輸出低于指定日志級別的消息沫换。在下面的示例中,Logger 只能輸出等于或者高于WARNING 級別的日志消息,并丟棄日志級別低于WARNING的消息:

logger.setLevel(Level.WARNING);

調(diào)試技巧

  1. 打印變量值讯赏;
System.out.println("x=" + x);
或
Logger.getGlobal().info("x=" + x);
  1. 在每一個類中放置一個main方法垮兑,這樣就可以對每一個類進行單元測試;
  2. JUnit單元測試框架漱挎;
  3. 日志代理是一個子類的對象系枪,它可以竊取方法調(diào)用,并進行日志記錄磕谅,然后調(diào)用超類中的方法私爷;
  4. 利用Throwable類提供的printStackTrace方法,可以從任何一個異常對象中獲得堆棧情況膊夹;
  5. 利用printStackTrace(PrintWriter s)方法將堆棧跟蹤信息發(fā)送到一個文件中衬浑;
  6. 將程序錯誤信息保存在一個文件中;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末放刨,一起剝皮案震驚了整個濱河市工秩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌进统,老刑警劉巖助币,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異螟碎,居然都是意外死亡奠支,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門抚芦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倍谜,“玉大人,你說我怎么就攤上這事叉抡《蓿” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵褥民,是天一觀的道長季春。 經(jīng)常有香客問我,道長消返,這世上最難降的妖魔是什么载弄? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮撵颊,結(jié)果婚禮上宇攻,老公的妹妹穿的比我還像新娘。我一直安慰自己倡勇,他們只是感情好逞刷,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般夸浅。 火紅的嫁衣襯著肌膚如雪仑最。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天帆喇,我揣著相機與錄音警医,去河邊找鬼。 笑死坯钦,一個胖子當(dāng)著我的面吹牛预皇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葫笼,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼深啤,長吁一口氣:“原來是場噩夢啊……” “哼拗馒!你這毒婦竟也來了路星?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤诱桂,失蹤者是張志新(化名)和其女友劉穎洋丐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挥等,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡友绝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了肝劲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迁客。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辞槐,靈堂內(nèi)的尸體忽然破棺而出掷漱,到底是詐尸還是另有隱情,我是刑警寧澤榄檬,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布卜范,位于F島的核電站,受9級特大地震影響鹿榜,放射性物質(zhì)發(fā)生泄漏海雪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一舱殿、第九天 我趴在偏房一處隱蔽的房頂上張望奥裸。 院中可真熱鬧,春花似錦沪袭、人聲如沸刺彩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽创倔。三九已至嗡害,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間畦攘,已是汗流浹背霸妹。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留知押,地道東北人叹螟。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像台盯,于是被迫代替她去往敵國和親罢绽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 處理錯誤 如果Java程序運行期間出現(xiàn)了錯誤明垢,并且由于出現(xiàn)錯誤導(dǎo)致某些操作沒有完成,程序應(yīng)該能夠返回到一種安全狀態(tài)...
    Dcl_Snow閱讀 480評論 0 4
  • java異呈醒剩看這篇就夠了http://www.cnblogs.com/lulipro/p/7504267.html...
    luckee閱讀 435評論 0 0
  • idea 添加注釋/** 然后回車 選中代碼塊 Ctrl+Shift+/ 重點推薦閱讀:https://www....
    Helen_Cat閱讀 19,826評論 0 37
  • 寫在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 2,743評論 0 8
  • 你走時 一步一回首 漫天的雪花 輕舞飛揚 也在挽留你的腳步 芳草綠了又黃 屋檐下的燕子 已做了祖母 兒孫滿堂 伊人...
    弱水一杯閱讀 310評論 6 13