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