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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

201621123037 《Java程序设计》第10周学习总结

發(fā)布時(shí)間:2025/7/14 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 201621123037 《Java程序设计》第10周学习总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作業(yè)10-異常

標(biāo)簽(空格分隔): Java


1. 本周學(xué)習(xí)總結(jié)

1.1 以你喜歡的方式(思維導(dǎo)圖或其他)歸納總結(jié)異常相關(guān)內(nèi)容。


2. 書(shū)面作業(yè)

本次PTA作業(yè)題集異常

1. 常用異常

結(jié)合題集題目7-1回答

1.1 自己以前編寫(xiě)的代碼中經(jīng)常出現(xiàn)什么異常、需要捕獲嗎(為什么)?應(yīng)如何避免?

答:

常出現(xiàn)異常:
比如不合理調(diào)用時(shí),容易產(chǎn)生空指針,蹦NullPointerException錯(cuò)誤;
當(dāng)輸入的類(lèi)型和定義的類(lèi)型有出入時(shí),蹦NumberFormatException錯(cuò)誤;
當(dāng)對(duì)于一個(gè)類(lèi)型進(jìn)行強(qiáng)制轉(zhuǎn)換時(shí),有時(shí)會(huì)蹦ClassCastException錯(cuò)誤;
對(duì)于數(shù)組,最常見(jiàn)的便是數(shù)組的越界問(wèn)題。

這些異常屬于Unchecked Exception,此類(lèi)異常不需要捕獲,只有checked Exception才一定需要捕獲。

避免:
對(duì)于上述的那些空指針可以提前的進(jìn)行判斷是否為Null,數(shù)組越界也可以加判斷語(yǔ)句進(jìn)行防止,
不過(guò)之后可以用try-catch語(yǔ)句來(lái)捕獲異常增強(qiáng)代碼的穩(wěn)定性。

1.2 什么樣的異常要求用戶(hù)一定要使用捕獲處理?

答:

除了Error、RuntimeException及其子類(lèi) 以外的異常都是Checked Exception,此類(lèi)異常需要捕獲。

當(dāng)Checked Exception拋出異常之后需要用try-catch塊來(lái)捕獲并處理該異常,或者對(duì)于一些方法,在其之后添加上
throws關(guān)鍵字,來(lái)提示可能拋出異常,再針對(duì)拋出的異常進(jìn)行處理。

2. 處理異常使你的程序更加健壯

題集題目7-2

2.1 實(shí)驗(yàn)總結(jié)。并回答:怎么樣才能讓你的程序更加健壯?

答:

try {String x = sc.next();list[i]=Integer.parseInt(x); }catch(Exception e) {System.out.println(e);i--; }

這道題對(duì)于非整型字符串,拋出異常信息,用catch捕獲之后,輸出異常的信息便可。需要注意的地方是,由于要填滿(mǎn)整個(gè)數(shù)組,異常輸入值被空過(guò)時(shí),“i--”來(lái)完成題目要求。

3. throw與throws

題集題目7-3
閱讀Integer.parsetInt源代碼

3.1 Integer.parsetInt一開(kāi)始就有大量的拋出異常的代碼,這種做法有什么好處?

源代碼: public static int parseInt(String s) throws NumberFormatException {return parseInt(s,10); } //將字符串參數(shù)作為帶符號(hào)十進(jìn)制整數(shù)來(lái)分析。除過(guò)第一個(gè)字符為 ASCII 字符中減號(hào) '-' 表示的負(fù)數(shù),字符串中的字符都必須是十進(jìn)制數(shù)。 源代碼: 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;int multmin;int digit;if (len > 0) {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;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; }

源代碼里拋出NumberFormatException異常,拋出異常的判斷主要是:
s為Null、radix進(jìn)制小于2、radix進(jìn)制大于36、第一個(gè)字符既不是“-”也不是“+”等異常。

在實(shí)驗(yàn)題中ArrayUtils類(lèi)中的判斷也仿照以上源代碼進(jìn)行throw,并附帶上異常的原因,給調(diào)用者提供信息。

3.2 結(jié)合自己編寫(xiě)的程序與3.1,分析自己編寫(xiě)的方法拋出異常時(shí)一般需要傳遞給調(diào)用者一些什么信息?

答:

拋出IllegalArgumentException異常的同時(shí)也傳遞出異常的原因,如圖中表明出的,begin/end到底是越界的問(wèn)題還是相對(duì)大小關(guān)系的錯(cuò)誤問(wèn)題。

4. 用異常改進(jìn)ArrayIntegerStack

題集題目6-3

4.1 結(jié)合6-3代碼,回答使用拋出異常的方式代表程序運(yùn)行時(shí)出錯(cuò)有什么好處?比單純的返回錯(cuò)誤值,有何優(yōu)點(diǎn)?

答:

使用拋出異常的方式代表運(yùn)行的出錯(cuò),不僅可以報(bào)錯(cuò)誤類(lèi)型,還可以具體實(shí)現(xiàn)到拋出錯(cuò)誤原因,給使用者更大的便利。除此之外,如果按照以前C語(yǔ)言自己設(shè)置返回值,將正確時(shí)返回結(jié)果,錯(cuò)誤時(shí)返回-1的話,這樣不嚴(yán)謹(jǐn)。因?yàn)楫?dāng)返回結(jié)果為-1時(shí),程序的代碼會(huì)將其按照錯(cuò)誤代碼來(lái)判斷,整個(gè)代碼的嚴(yán)謹(jǐn)性會(huì)大打折扣。

4.2 如果一個(gè)方法內(nèi)部的內(nèi)碼拋出的是RuntimeException類(lèi)型的異常,那么方法聲明是否應(yīng)該使用throws關(guān)鍵字,如果使用throws關(guān)鍵字聲明該方法拋出的異常,能給我們帶來(lái)什么好處嗎?

答:

可以不使用throws關(guān)鍵字,用throws關(guān)鍵字拋出異常優(yōu)點(diǎn)
當(dāng)一個(gè)異常不想在方法中用try-catch進(jìn)行處理時(shí),可以將異常拋給別的類(lèi)或方法來(lái)處理,此時(shí)就用到了throws。并且throw和throws就該是成對(duì)出現(xiàn)的(除了RuntimeException,RuntimeException可以不用Throws聲明異常拋出)

5. 函數(shù)題-多種異常的捕獲

題集題目6-1

5.1 結(jié)合6-1代碼,回答:一個(gè)try塊中如果可能拋出多種異常,且異常之間可能有繼承關(guān)系,捕獲時(shí)需要注意些什么?

答:

就如6-1這道題,里面有多個(gè)錯(cuò)誤,則在捕獲時(shí)就需要注意是否存在繼承的關(guān)系。
父類(lèi)的異常處理一定要放在子類(lèi)的后面,否則父類(lèi)異常的處理就會(huì)搶在子類(lèi)前進(jìn)行捕獲。如題中RuntimeException 是Exception的子類(lèi),如果Exception放在子類(lèi)的前面,則優(yōu)先被父類(lèi)捕獲。

5.2 一個(gè)try塊中如果可能拋出多種異常,使用Java8的多重異常捕獲語(yǔ)法需要注意些什么?

答:
在java8 中 異常捕獲的try-catch可以自動(dòng)關(guān)閉在try表達(dá)式中打開(kāi)的對(duì)象,無(wú)需開(kāi)發(fā)者手動(dòng)關(guān)閉。

如下圖:

不在需要:

6. 為如下代碼加上異常處理

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)容

6.1 改正代碼,并增加如下功能。當(dāng)找不到文件時(shí),需提示用戶(hù)找不到文件xxx,請(qǐng)重新輸入文件名,然后嘗試重新打開(kāi)。 如果是其他異常則提示打開(kāi)或讀取文件失敗!。

注1:里面有多個(gè)方法均可能拋出異常。
功能2:需要添加finally關(guān)閉文件。無(wú)論上面的代碼是否產(chǎn)生異常,總要提示關(guān)閉文件ing。如果關(guān)閉文件失敗,提示關(guān)閉文件失敗!

答:

如上異常之一,更改如下即可解除報(bào)錯(cuò)

  • 需要拋出FileNotFoundException異常,故要加上throws FileNotFoundException。
  • 又available()方法和read()方法都需要拋出IOException異常,故也需要加上throws IOException。
  • FileNotFoundException是IOException的子類(lèi),所以只需要加上throws IOException即可解決。

按要求更改后代碼:

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Arrays; import java.util.Scanner;public class boke5_1 {public static void main(String[] args) throws IOException {byte[] content = null;Scanner sc = new Scanner(System.in);FileInputStream fis =null;String str = sc.next();while(true) {try {fis = new FileInputStream(str);// fis = new FileInputStream("D\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)容}catch(FileNotFoundException e) {System.out.println("找不到testfis.txt文件,請(qǐng)重新輸入文件名");str = sc.next();}catch(IOException e) {System.out.println("打開(kāi)或讀取文件失敗!");System.exit(0);}finally {fis.close();}}} }

運(yùn)行結(jié)果:

6.2 結(jié)合題集6-2代碼,要將什么樣操作放在finally塊?為什么?使用finally關(guān)閉資源需要注意一些什么?

答:
6-2的代碼,將close()釋放資源方法放到了finally塊中。
因?yàn)閒inally起到維護(hù)對(duì)象的內(nèi)部狀態(tài),并可以清理非內(nèi)存資源的作用。特別是在關(guān)閉數(shù)據(jù)庫(kù)連接這方面,如果把數(shù)據(jù)庫(kù)連接的close()方法放到finally中,就會(huì)大大降低程序出錯(cuò)的幾率。并且finally也起到一個(gè)最佳補(bǔ)充的作用。

使用finally關(guān)閉資源需要注意:

  • finally塊的陷阱
源代碼: public class Test{ public static void main(String[]args){ FileOutputStream fos=null; try{ // do something... System.out.println("打開(kāi)資源"); System.exit(0); }finally{ if(fos!=null){ try{ fos.close(); }catch(Exception){ e.printStackTrace(); } } System.out.println("關(guān)閉資源"); } } }

注意:
"關(guān)閉資源"不會(huì)輸出,因?yàn)閠ry塊中的System.exit(0);將當(dāng)前線程停止了,而finally塊不能執(zhí)行已經(jīng)停止的線程.

  • finally塊和方法返回值
public class Test { public static void main(String[] args) { int a = test(); System.out.println(a); } private static int test() { int count = 5; try { System.out.println("try"); return count + 2; // 不執(zhí)行 } finally { System.out.println("finally"); return -1; // 執(zhí)行 } } }

注意:
當(dāng)在try塊中既有return 語(yǔ)句也有finlly的時(shí)候,系統(tǒng)不會(huì)立馬執(zhí)行try塊中的return ,而是執(zhí)行finally中的程序。
若finally塊中也有return 語(yǔ)句,則執(zhí)行finally中的reutrn語(yǔ)句,然后程序結(jié)束,不會(huì)執(zhí)行try塊中的return

public class Test { public static void main(String[] args) { int a = test(); System.out.println(a); } private static int test() { int count = 5; try { throw new RuntimeException("測(cè)試異常"); //不執(zhí)行 } finally { System.out.println("finally"); return count; } } }

注意:
若finally塊中有 return語(yǔ)句,則程序不會(huì)真正拋出異常,而是直接執(zhí)行完finally塊后,返回return語(yǔ)句。

6.3 使用Java7中的try-with-resources來(lái)改寫(xiě)上述代碼實(shí)現(xiàn)自動(dòng)關(guān)閉資源。簡(jiǎn)述這種方法有何好處?

答:

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Arrays; import java.util.Scanner;public class boke5_1 {public static void main(String[] args) throws IOException {byte[] content = null;Scanner sc = new Scanner(System.in);String str = sc.next();while(true) {try(FileInputStream fis = new FileInputStream(str)) {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)容}catch(FileNotFoundException e) {System.out.println("找不到testfis.txt文件,請(qǐng)重新輸入文件名");str = sc.next();}catch(IOException e) {System.out.println("打開(kāi)或讀取文件失敗!");System.exit(0);}} } }

運(yùn)行結(jié)果(同上):

好處:

  • 少了finally塊,使代碼精簡(jiǎn)化了。
  • 不用編寫(xiě)finally塊,系統(tǒng)自動(dòng)關(guān)閉可以使開(kāi)發(fā)人員在編寫(xiě)時(shí),不再用考慮資源關(guān)閉這方面,省去了開(kāi)發(fā)中可能出現(xiàn)的代碼風(fēng)險(xiǎn)。

7. 面向?qū)ο笤O(shè)計(jì)作業(yè)-圖書(shū)館管理系統(tǒng)(分組完成,每組不超過(guò)3個(gè)同學(xué))

登錄lib.jmu.edu.cn,對(duì)圖書(shū)進(jìn)行搜索。然后登錄圖書(shū)館信息系統(tǒng),查看我的圖書(shū)館。如果讓你實(shí)現(xiàn)一個(gè)圖書(shū)借閱系統(tǒng),嘗試使用面向?qū)ο蠼!?/p>

7.1 該系統(tǒng)的使用者有誰(shuí)?

答:
使用者包括 學(xué)生/老師、管理員

7.2 主要功能模塊(不要太多)及每個(gè)模塊的負(fù)責(zé)人。下周每個(gè)人要提交自己負(fù)責(zé)的模塊代碼及運(yùn)行視頻。

學(xué)生、老師:

  • 登陸
  • 注冊(cè)
  • 查找書(shū)籍
  • 借閱書(shū)籍
  • 歸還書(shū)籍
  • 查詢(xún)當(dāng)前借閱信息
  • 掛失

管理員:

  • 登陸
  • 增加新書(shū)籍
  • 下架舊書(shū)籍
  • 修改圖書(shū)信息
  • 查詢(xún)書(shū)籍去向
  • 查詢(xún)庫(kù)中預(yù)留書(shū)籍

7.3 該系統(tǒng)的主要的類(lèi)設(shè)計(jì)及類(lèi)圖(可用)

  • 主要設(shè)計(jì):

用戶(hù)類(lèi)[Users]:存放用戶(hù)信息

屬性

private String Name //用戶(hù)名 private String Account //賬號(hào) private String Password //密碼 static ArrayList<User> user = new ArrayList() //用于存儲(chǔ)每個(gè)用戶(hù)的信息

方法

BorrowBook //借閱書(shū)籍 SearchBook //查找書(shū)籍 ReturnBook //歸還書(shū)籍 Show //查詢(xún)當(dāng)前借閱信息

管理員類(lèi)[Manager]:管理員管理

屬性

private String Name //用戶(hù)名 private String Account //賬號(hào) private String Password //密碼 static ArrayList<User> Manager = new ArrayList() //用于存儲(chǔ)每個(gè)用戶(hù)的信息

方法

AddBook //增加新書(shū)籍 DelBook //下架舊書(shū)籍 FindInformation //查詢(xún)書(shū)籍去向 ChangeInformation //修改圖書(shū)信息 remainBook //查詢(xún)庫(kù)中預(yù)留書(shū)籍

圖書(shū)類(lèi)[Book]

屬性

private String Name //書(shū)名 private String AuthorName //作者 private int num //數(shù)量 static ArrayList<User> books = new ArrayList() //用于存儲(chǔ)書(shū)籍條目
  • 類(lèi)圖:

7.4 你準(zhǔn)備如何存儲(chǔ)圖書(shū)信息、解決信息、讀者信息等。

答:
在用戶(hù)進(jìn)行操作期間,使用動(dòng)態(tài)數(shù)組進(jìn)行存儲(chǔ)圖書(shū)信息等問(wèn)題,當(dāng)系統(tǒng)退出時(shí),全部信息寫(xiě)入文件中。大概這么設(shè)想的,具體后續(xù)團(tuán)隊(duì)編寫(xiě)再按需更改。

8. 選做:使用異常改進(jìn)你的購(gòu)物車(chē)系統(tǒng)

舉1個(gè)例子說(shuō)明你是如何使用異常處理機(jī)制讓你的程序變得更健壯。
說(shuō)明要包含2個(gè)部分:1. 問(wèn)題說(shuō)明(哪里會(huì)碰到異常)。2.解決方案(關(guān)鍵代碼)
答:

  • 栗子1號(hào):

在菜單欄中輸入序號(hào)時(shí)會(huì)產(chǎn)生錯(cuò)誤:

之前利用循環(huán)進(jìn)行反復(fù)輸入,直到輸入正確才讀入:

現(xiàn)在改用異常類(lèi)優(yōu)化后的關(guān)鍵代碼:

try {x=sc.nextInt();if(x<0|x>1)throw new InputMismatchException("plese input agian:(input在0-1之間)"); elsebreak;}catch(InputMismatchException e){ System.out.println(e);x=sc.nextInt();}

運(yùn)行效果:

  • 栗子2號(hào):
    將購(gòu)物車(chē)系統(tǒng) 的商品信息寫(xiě)入文件中再讀出,在讀文件時(shí)可能會(huì)出現(xiàn)讀入的文件為空的異常,并且關(guān)閉文件時(shí)也會(huì)出現(xiàn)IOException

關(guān)鍵代碼:

try {fils= new FileInputStream(name);ObjectInputStream objIn=new ObjectInputStream(fils);temp=(Object[]) objIn.readObject();objIn.close();} catch (IOException e) {System.out.println("read object failed");} catch (ClassNotFoundException e) {System.out.println(e);}finally{if(fils!=null){try {fils.close();} catch (IOException e) {System.out.println(e);}}}

3.碼云及PTA

題目集:異常

3.1. 碼云代碼提交記錄

在碼云的項(xiàng)目中,依次選擇“統(tǒng)計(jì)-Commits歷史-設(shè)置時(shí)間段”, 然后搜索并截圖

3.2 截圖PTA題集完成情況圖

需要有兩張圖(1. 排名圖。2.PTA提交列表圖)

3.3 統(tǒng)計(jì)本周完成的代碼量

需要將每周的代碼統(tǒng)計(jì)情況融合到一張表中。

周次總代碼量新增代碼量總文件數(shù)新增文件數(shù)
10000
20000
30000
40000
5116711672626
61830663326
722824524513
82446164483
92774328568
103313539659
1137264137510

轉(zhuǎn)載于:https://www.cnblogs.com/qin-yu/p/7881854.html

總結(jié)

以上是生活随笔為你收集整理的201621123037 《Java程序设计》第10周学习总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。