201521123011 《java程序设计》 第9周学习总结
1. 本周學(xué)習(xí)總結(jié)
1.1 以你喜歡的方式(思維導(dǎo)圖或其他)歸納總結(jié)異常相關(guān)內(nèi)容。
2. 書(shū)面作業(yè)
本次PTA作業(yè)題集異常
1.常用異常
題目5-1
1.1 截圖你的提交結(jié)果(出現(xiàn)學(xué)號(hào))
1.2 自己以前編寫的代碼中經(jīng)常出現(xiàn)什么異常、需要捕獲嗎(為什么)?應(yīng)如何避免?
1.3 什么樣的異常要求用戶一定要使用捕獲處理?
答:
1.1
1.2
會(huì)出現(xiàn)數(shù)組越界等異常,不需要捕獲,因?yàn)閿?shù)組越界屬于RuntimeException,不需要捕獲。只需要修改數(shù)組長(zhǎng)度就可以了。
1.3
Error(嚴(yán)重錯(cuò)誤):無(wú)需關(guān)心
RuntimeException:無(wú)需try-catch
Exception其他子類:必須try-catch處理
2.處理異常使你的程序更加健壯
題目5-2
2.1 截圖你的提交結(jié)果(出現(xiàn)學(xué)號(hào))
2.2 實(shí)驗(yàn)總結(jié)
答:
2.1
2.2
在讀取字符時(shí)用了String inputInt = sc.next();所以在輸入時(shí)需要多讀取一個(gè)enter鍵,不然會(huì)無(wú)法出現(xiàn)排序的答案
在使用try-catch,只需要將出現(xiàn)異常的部分放在其中就行了。
try {int y = Integer.parseInt(inputInt);x[i] = y;i++;} catch (Exception e)3.throw與throws
題目5-3
3.1 截圖你的提交結(jié)果(出現(xiàn)學(xué)號(hào))
3.2 閱讀Integer.parsetInt源代碼,結(jié)合3.1說(shuō)說(shuō)拋出異常時(shí)需要傳遞給調(diào)用者一些什么信息?
答:
3.1
3.2
public static int parseInt(String s, int radix)throws NumberFormatException{/** WARNING: This method may be invoked early during VM initialization* before IntegerCache is initialized. Care must be taken to not use* the valueOf method.*/if (s == null) {throw new NumberFormatException("null");}if (radix < Character.MIN_RADIX) {throw new NumberFormatException("radix " + radix +" less than Character.MIN_RADIX");}if (radix > Character.MAX_RADIX) {throw new NumberFormatException("radix " + radix +" greater than Character.MAX_RADIX");}int result = 0;boolean negative = false;int i = 0, len = s.length();int limit = -Integer.MAX_VALUE;??//limit?默認(rèn)初始化為?最大正整數(shù)的??負(fù)數(shù)?,假如字符串表示的是正數(shù),??//那么result(在返回之前一直是負(fù)數(shù)形式)就必須和這個(gè)最大正數(shù)的負(fù)數(shù)來(lái)比較,判斷是否溢出?int multmin;int digit;if (len > 0) {?//?首先是對(duì)第一個(gè)位置判斷,是否含有正負(fù)號(hào)??char firstChar = s.charAt(0);if (firstChar < '0') { // Possible leading "+" or "-"if (firstChar == '-') {negative = true;limit = Integer.MIN_VALUE;} else if (firstChar != '+')throw NumberFormatException.forInputString(s);if (len == 1) // Cannot have lone "+" or "-"throw NumberFormatException.forInputString(s);i++;}multmin = limit / radix;//?這個(gè)是用來(lái)判斷當(dāng)前的?result?在接受下一個(gè)字符串位置的數(shù)字后會(huì)不會(huì)溢出。while (i < len) {// Accumulating negatively avoids surprises near MAX_VALUEdigit = Character.digit(s.charAt(i++),radix);if (digit < 0) {throw NumberFormatException.forInputString(s);}if (result < multmin) {throw NumberFormatException.forInputString(s);}result *= radix;if (result < limit + digit) {throw NumberFormatException.forInputString(s);}result -= digit;}} else {throw NumberFormatException.forInputString(s);}return negative ? result : -result;}以上源代碼告訴我們r(jià)adix?要在(2~36)范圍內(nèi),不然會(huì)拋出NumberFormatException異常。Integer.parsetInt會(huì)根據(jù)不同的情況拋出異常,來(lái)告訴用戶出錯(cuò)的地方以方便修改。比如5-3中輸入時(shí)begin不得小于0,end不得大于arr.length,否則拋出異常
4.函數(shù)題
題目4-1(多種異常的捕獲)
4.1 截圖你的提交結(jié)果(出現(xiàn)學(xué)號(hào))
4.2 一個(gè)try塊中如果可能拋出多種異常,捕獲時(shí)需要注意些什么?
答:
4.1
4.2
catch(Exception e){System.out.println(e);}當(dāng)try塊中如果可能拋出多種異常時(shí),如果用catch一個(gè)個(gè)捕獲會(huì)很麻煩,我們可以發(fā)現(xiàn)很多異常都是Exception的子類,所以只需要用catch(Exception e)就可以捕捉所有的異常。
以下是通過(guò)百度找到的常見(jiàn)的繼承關(guān)系。
5.為如下代碼加上異常處理
byte[] content = null; FileInputStream fis = new FileInputStream("testfis.txt"); int bytesAvailabe = fis.available();//獲得該文件可用的字節(jié)數(shù) if(bytesAvailabe>0){content = new byte[bytesAvailabe];//創(chuàng)建可容納文件大小的數(shù)組fis.read(content);//將文件內(nèi)容讀入數(shù)組 } System.out.println(Arrays.toString(content));//打印數(shù)組內(nèi)容5.1 改正代碼,讓其可正常運(yùn)行。注1:里面有多個(gè)方法均可能拋出異常。注2:要使用finally關(guān)閉資源。
5.2 使用Java7中的try-with-resources來(lái)改寫上述代碼實(shí)現(xiàn)自動(dòng)關(guān)閉資源.
答:
5.1
5.2
public static void main(String[] args) throws IOException {byte[] content = null;try(FileInputStream fis = new FileInputStream("testfis.txt");) {int bytesAvailabe = fis.available();// 獲得該文件可用的字節(jié)數(shù)if (bytesAvailabe > 0) {content = new byte[bytesAvailabe];// 創(chuàng)建可容納文件大小的數(shù)組fis.read(content);// 將文件內(nèi)容讀入數(shù)組}System.out.println(Arrays.toString(content));// 打印數(shù)組內(nèi)容} }6.重點(diǎn)考核:使用異常改進(jìn)你的購(gòu)物車系統(tǒng)(未提交,得分不超過(guò)6分)
舉至少兩個(gè)例子說(shuō)明你是如何使用異常處理機(jī)制讓你的程序變得更健壯。
說(shuō)明要包含2個(gè)部分:1. 問(wèn)題說(shuō)明(哪里會(huì)碰到異常)。2.解決方案(關(guān)鍵代碼)
遭遇的問(wèn)題1.可能因?yàn)檩斎霟o(wú)效數(shù)字編號(hào)到導(dǎo)致異常。2.也可能有文件已經(jīng)結(jié)束異常、文件未找到異常。
解決問(wèn)題一:
3. 碼云上代碼提交記錄
題目集:異常
3.1. 碼云代碼提交記錄
轉(zhuǎn)載于:https://www.cnblogs.com/jiaowoxiaotiancai/p/6747160.html
總結(jié)
以上是生活随笔為你收集整理的201521123011 《java程序设计》 第9周学习总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: test18
- 下一篇: FTL页面常用到的一些方法combobo