20145302張薇《Java程式設計》第三週學習總結

20145302張薇發表於2016-03-20

20145302張薇《Java程式設計》第三週學習總結

教材學習內容總結

  • 第四章
  • 定義類 一個原始碼中有多少類就會有多少.class文件。
  • 標準類
  1. 使用java.util.scanner讓使用者輸入資料,在開頭使用import偷懶吧
變數名=scanner.nextxxx();
  1. 使用java.math.BigDecimal提高浮點數計算的精確度,在開頭用import偷懶,BigDecimal提供加減乘除等計算方法,而且可以疊加使用
op1.add(op2).subtract(op3).multioly(op4).divide(OP5).equals(result)
  • 物件指定與相等性
  1. 對於==來說,是在比較兩個名牌是否綁到同一物件。
  2. 對於a.equals(b)來說,是在比較a、b兩個名牌的內容值是否相等。
  • 基本型別打包器
  1. Integer提供a.compareTo(b)方法,a=b時返回0,a<b時返回-1,a>b時返回1。
  2. 最好不要用==來比較兩個例項的內容值。
  • 陣列物件
  1. 陣列索引從0開始,存取超過了索引範圍,就會出現ArrayIndexOutOfBoundsException錯誤。
  2. 使用new建立陣列後,每個元素都有預設值,教材P98。
  3. 陣列一旦建立,長度就固定了。
  4. 無論是System.arraycopy()還是Arrays.copyOf(),用在類型別宣告的陣列時,都是執行淺層複製。
  • 字串物件
  1. 字串的本質是打包字元陣列的物件,是java.lang.String類的例項。
  2. 以“”包括的字串,只要內容相同(序列、大小寫均要相同),無論在程式程式碼中出現幾次,JVM只會建立一個String例項,並在字串池中維護。
  3. 與物件指定相通,比較兩個字串的內容要用equals().
  4. 字串物件一旦建立,就無法更改物件中的任何內容。
  5. 使用+連線字元會產生新的String例項,不能把+用在重複性的連線場合。
  • 查詢Java API檔案隨著不斷深入的學習,我們對API的認識會更加深刻。
  • 第五章
  • 何謂封裝
  1. 封裝的目的主要就是隱藏物件細節,將物件當作黑箱進行操作。
  2. 在java命名規範中,取值方法的名稱形式是固定的,也就是以get開頭,之後接上首寫字母大寫的單詞。
  3. 建立物件時,資料成員會初始化,如果沒有指定初始值,則會使用預設值初始化。
  • 類語法細節
  1. 如果定義類時,沒有撰寫任何建構函式,編譯程式會自動加入一個無引數、內容為空的建構函式,稱為預設建構函式。
  2. 可以定義多個建構函式,只要引數型別或個數不同,這稱為過載建構函式。
  3. public用在類前,表示的這個類是公開類,這樣就可以在其他包的類中使用;用在方法前,這樣就表示其它包中的方法可以直接呼叫這個方法;用在函式前,這表示其它包中的類可以直接呼叫這個建構函式;用在成員變數前,表示這個成員變數是公開的,這樣別人可以直接調取你類中的變數。
  4. this除了被宣告為static的地方外,this關鍵字可以出現在類中的任何地方,在物件建立後為“這個物件”的參考名稱。
  5. static用於修飾成員變數和成員函式,被宣告為static的成員,不會讓個別物件擁有,而是屬於類。
  6. import static語法是為了偷懶,但是要注意名稱衝突問題,有些名稱衝突編譯程式會通過以下程式來解析:
- 區域性變數覆蓋:選用方法中的同名變數、引數、方法名稱。
- 成員覆蓋:選用類中定義的同名資料成員、方法名稱。
- 過載方法比較:使用import static的各個靜態成員,若有同名衝突,嘗試通過過載判斷。

教材學習中的問題和解決過程

  • 問題1教材P88說明BigDecimal提供加減乘除的運算,其中“加”為plus(),而下面的程式利用的是add(),這二者一樣嗎?
  • 解決過程1 百度上沒有相關問題,尚未解決。
  • 問題2教材P92關於裝、拆箱問題不明白,下例顯示結果為20與10,為何不是20與21?
Integer i=10;
System.out.println(i+10);
System.out.println(i++);
  • 解決過程2我想到了第三章的第八題,困惑為何第八題i的值是疊加進行的,到這裡就不一樣了,也許因為這裡是輸出的原因,然後意識到i++是一個整體,輸出i++意味著:輸出=i,i=i+1;,所以輸出為20和10。
  • 問題3教材P119第一題我以為顯示結果應該是false、false,不明白為何是ture、ture。
  • 解決過程3又對比了一下書本前方的內容,發現在物件指定與相關性那部分的內容中,程式利用new關鍵詞建立了新的物件,所以二者不相等,而本題不是。
  • 問題4教材P93關於編譯程式蜜糖的內部為何那麼展開很不明白。
  • 解決過程4詢問了周圍的同學,大家都不清楚,尚未解決。

    程式碼除錯中的問題和解決過程

  • 第四章課後練習第一題程式碼如下:


import java.util.Scanner;

public class Fibonacci{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        int f1=0;
        int f2=1;
        int f_n;
        int n;
        System.out.printf("求幾個費式數?%n");
        n=scanner.nextInt();
        for(int i=0;i<n;i++){
            System.out.println(f1);
            f_n=f1+f2;
            f1=f2;
            f2=f_n;
        }
    }
}
  • 結果截圖:

20145302張薇《Java程式設計》第三週學習總結

程式碼託管

20145302張薇《Java程式設計》第三週學習總結

其他(感悟、思考等,可選)

  • 這兩章的專業術語太多了,文字描述的很晦澀,工作量很大,程式碼很多,需要注意的細節也很多,很繁瑣。
  • 看了這兩章才發現,java和C語言真的是兩種語言……二者其實是有很多不同的,java都是物件導向的,如果總用C的思維來看程式碼、編程式碼,那麼就很難看懂程式、編寫出正確的程式了。
  • 還是要多練習,IDEA有很多選項並不知道如何使用,並沒有充分的利用編寫軟體的優勢,應該不斷探索。

學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標 1500行 15篇 400小時
第一週 10/10 2/2 10/10 基礎知識
第二週 100/100 3/3 35/35 語法知識
第三週 300/300 4/4 60/60 瞭解物件

參考資料

相關文章