201621123078 《Java程序設計》第2周學習總結

1. 本週學習總結

  • 學會了Java裏面裏面的引用類型,包裝類和數組
  • 什麼是自動拆箱,自動裝箱,瞭解了數組的屬性,如一維數組和多維數組以及ArrayList
  • 學會使用碼雲管理代碼,將本地代碼上傳至碼雲,將碼雲上的項目保存至本地。java

    2.書面做業

    1. String-使用Eclipse關聯jdk源代碼

    1.1 查看String對象的源代碼(截圖),分析String使用什麼來存儲字符串?


    String對象的設計思路:String使用了字符數組來存儲字符串,當你改變String類型值的變量時地址可能發生改變,若使用StringBuilder能夠避免。git

    1.2 分析其構造函數public String(char value[])的做用?

    該函數的做用是經過char數組,生成String字符串對象,接口中的參數是一個char數組。編程

1.3 閱讀public String replace(char oldChar, char newChar)方法的代碼,回答String的不可變性在該函數中如何體現?(重點)

Java String replace()函數是要返回一個新的字符串,用newChar替換此字符串的中所出現的oldChar,不可變性體如今於在替換過程當中,是先新建一個字符串,不是在本來的字符串上操做的,對原來的數值的值不受影響。數組

1.4 簡述String與字符數組的關係,使用字符數組就能夠處理字符串,爲何還須要String呢?

字符串是類,是String類型的,字符數組是數組,是char型的,二者可相互轉化,使用String具備不可變性,在運行過程當中不會致使本來的數值發生改變,提升可靠性。app

2. StringBuilder

2.1 結合PTA -2(StringBuilder) ,說明爲何頻繁修改字符串時,應該使用StringBuilder而不是String?

使用String時每一次對字符串進行操做時須要新建空間,而後再刪除原來的字符串,影響效率,並佔用空間,而StringBuilder是在字符串的末尾進行操做,相對 效率提升不少。eclipse

2.2 閱讀jdk文檔,查詢StringBuilderappend(char[] str)方法功能是什麼?試分析StringBuilder內部使用什麼來存放字符?調用StringBuilderappend(char[] str)方法時,是如何實現添加字符的操做?

  • 功能: StringBuffer.append(char[] str) 方法追加char數組,即str參數爲這個序列的字符串表示形式。數組參數的字符追加的順序到這個序列的內容。這個序列以該參數的長度增長它的長度。
  • 使用字符串數組來存放
  • 使用 String.valueOf(char[]) 方法將參數轉換爲字符串,而後將所得字符串的字符追加到此字符序列函數

    3. 字符串與字符串池

    3.1 嘗試使用字符串池的概念解釋以下程序段輸出結果,並回答這段代碼建立了幾個字符串對象:

String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);

根據代碼可知,建立了兩個字符串對象,最後輸出的結果爲「true」。學習

3.2 重點:對基本類型咱們可使用== 比較兩個值是否相等,對於引用類型(如String, Integer、數組等)爲何不能使用==比較?應該怎樣比較他們的值是否相等呢?

若是使用了== 進行比較,在比較字符串的值時容易出錯,由於==是用於比較兩個變量的地址是否相同,可使用str.equals()來判斷兩個字符串是否相等。ui

4.Wrapper(包裝類)

4.1 Integer i = 100;//100是基本類型,i是引用類型,爲何能夠將100賦值給i?Integer x = 100; int y = x+1;x++;這一串命令中包含了些什麼操做?

  • 由於在Integer i=100中便是Integer i=new Integer(100),JDK調用函數將100賦值給i;
  • 包含了Integer x = 100;自動拆箱,x++是先拆箱後裝箱。設計

    4.2 Java爲何有了基本數據類型,還須要其包裝類呢?包裝類能給咱們帶來什麼好處呢?

    • 更加體現了面向對象的特色,有人說java不是純面嚮對象語言,純度只有百分之九十,就是由於java中仍然使用了基本數據類型和static。而包裝類的出現,則更好的體現了面向對象的設計理念。
    • 假如我有一個方法,接收一個Object 類型的參數,那麼咱們的基本數據類型就不能夠作爲參數傳入這個方法,好比咱們最經常使用的集合類,這些集合類中的元素是否是都是對象啊?要是沒有包裝類,那麼基本數據類型就不能夠保存在集合中,仍然須要咱們本身寫一個類,將這些數據作爲這個類的成員變量封裝起來,天!太繁瑣了。而包裝類的出現就成了必然。
    • 在jdk1.5以後,出現了自動拆箱和自動裝箱,大大的縮減了繁瑣的代碼,更加方便了成員的編程.(參考百度知道的回答)

5.實驗總結

5.1 結對編程實踐:使用結對編程的方式完成本週編程題目,即兩我的同時合做完成實驗題目(可1題也可多題,但最好是是兩我的都沒作過的題目)。推薦實施步驟:1.兩我的坐在同一臺電腦屏幕前判題,討論、決定大概由誰先寫。2. 1我的先編5分鐘(本身商量多少分鐘),同時另外一我的觀察對方編程或者查相關資料。3. 5分鐘後,簡單討論後,換另一我的繼續編(請必定要換,另外一我的若是沒法接受應由第一我的講解大概思路以方便其接受)。並完成以下做業:a.描述結對隊友姓名、結對過程,提供非擺拍的兩人在討論、細化和編程時的結對照片。b.結對編程真的可以帶來1+1>2的效果嗎?經過此次結對編程,請談談你的感覺和體會(如是否有利於本身編程水平的提升、是否有利於開拓編程思路)。

個人隊友是蘇志穎同窗,經過此次編寫,讓我感覺到兩我的確實可以達到1+1>的效果,兩個一同編寫,旁邊觀看的同窗能可以更好的看出編寫同窗的錯誤,後面一塊兒更正,遇到不會的經過討論的形式更加容易記憶深入,兩個的思路有交織,能夠提升編程的水平。

5.2 PTA-1綜合小測驗

該題是經過輸入端口的不一樣對程序進行操做

  • 輸入fib執行打印斐波那契數列操做,直接調用fib函數把輸入的數轉化成斐波那契數列
  • 輸入sort進行排序操做,先把輸入的字符串型轉化成整型,用
    Arrays.sort排序函數能夠對數組進行排序
  • 輸入search,把輸入的數字轉換成int型,查找其位置

5.3 PTA-3身份證排序。並回答:使用sort2方法進行排序能夠對出生年月日進行升序排序,若是如今有須要對其進行降序排序,或者按照其中的出生月份排序,怎麼解決呢?

主要思路:經過冒泡法進行排序,截取出年月往後換成數值放到數值中,比較大小再交換。

5.4 PTA-4動態數組

主要思路:strList.add()把字符輸入到動態數組中;strList.contains()判斷是否含有指定字符;strList.get()輸出指定下標字符
ArrayList相對數組來講操做比較靈活節省空間,適應更多狀況。

6.選作:公交卡里應該還有多少錢?請分析緣由

參考他人博客:多是浮點數二進制存儲出現問題,可能出現負數,而後補碼溢出,或者機器出現故障。4294967276 轉成 16進制 是[FFFFFFEC],因此是-0.20。

3.碼雲及PTA

3.1. 碼雲代碼提交記錄

個人git在使用過程當中出現了錯誤,還未解決,之能添加代碼片斷,等我解決後再回來進行編輯.

3.2 截圖題集「Java基本語法」PTA提交列表

3.3 使用老師發的jar程序統計每週的代碼量

周次 總代碼量 新增代碼量 總文件數 新增文件數
2 280 280 5 5
相關文章
相關標籤/搜索