20145320《Java程式設計》第3周學習總結(第四章)
教材學習內容總結
物件(Object):存在的具體實體,具有明確的狀態和行為
類(Class):具有相同屬性和行為的一組物件的集合,用於組合各個物件所共有操作和屬性的一種機制
從類看物件:類定義可以視為一個具有類似特性與共同行為的物件的模板,可用來產生物件
從物件看類:類的產生,是從少數例項,推廣到大量相似例項的抽象化過程(abstraction)
類是物件的設計圖,物件是類的例項,生成物件要先定義類
4.1 類與物件
定義類使用class
定義後建立例項,如: Clothes c1=new Clothes()在堆上生成物件, c1 可以近似看成指向物件的指標, 在《資料結構》中實現連結串列,C語言使用指標,Java使用引用。 使用類似c1.color的方式可以指定某個特定變數
String 是定義字串,使用“”、%s
char 是定義字元,使用‘’、%c
構造方法決定類生成物件的方式有 this、new
封裝 = 類 + 訪問控制(public,protected,private...)
物件相等
由於浮點數誤差的關係,為了得到更好的精確度,使用java.math.BigDecimal類
這個類提供運算plus()/add()、substract()、multiply()、divide()
== 與 equals的區別: ==比較的物件的地址、 equals 是邏輯上相等
例如定義的兩個BigDecimal a =new BigDecimal(“0.1”); BigDecimal a =new BigDecimal(“0.1”);
System.out.println(a==b);//顯示錯誤
System.out.println(a.equals(b));//顯示正確
4.2 基本型別包裝
為了讓Java的基本型別像類一樣使用 int-Integer、 long-Long、 byte-Byte、 float-Float、 double-Double、 boolean-BooleanInteger a = new Integer (10);
操作Integer的以double型別返回System.out.println(a.doubleValue()/3);//列印3.3333333...
compareTo(),相同返回0、小於返回-1、否則返回1System.out.println(a.compareTo(a));
4.3 陣列物件
Java中,陣列是物件
定義陣列的方式 int[] a;
與C語言不同,Java檢查陣列邊界,越界會觸發ArrayIndexOutOfBoundsException異常
可以用 a.length
檢視a陣列的長度
在java.util.Arrays類中有一個fill()方法可以給陣列所有數賦同一個值,使用方法如下Arrays.fill(a,60);
陣列複製
java.util.Arrays類中有個快捷的陣列複製方法 Arrays.copyOf(a,a.length);
4.4 字串物件
定義字串使用String
a.charAt(0)//顯示第一個字元
a.toUpperCase()//顯示字串
把字元組變為字串char[] cs={'n','a','m','e'};String name =new String(cs);
或者使用String的toCharArray()方法 char[] cs2=name.toCharArray();
第五章 物件封裝
5.1封裝
封裝是指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式,其目的主要就是隱藏物件細節,將物件當作黑箱進行操作。如同以前的使用過的一樣,使用者會呼叫建構函式,但不知道建構函式的細節,會呼叫方法卻不知道流程,要操作物件,一律得通過你提供的方法呼叫
5.2類語法細節
建構函式
private:許可權修飾,類私有,使用者無法在其他類程式碼中直接讀取,而public則可以
建構函式特點:首先,函式名與類名相同,其次,不用定義返回值型別,另外不可以寫return語句。 建構函式作用是給物件進行初始化,多個建構函式是以過載的形式存在的。
this關鍵字
this代表其所在函式所屬物件的引用,簡而言之就是this代本類物件的引用,當在函式內需要用到呼叫該函式的物件時,我們就可以使用this。 this()代表了呼叫另一個建構函式,至於呼叫哪個建構函式,則視呼叫this()時給的自變數型別與個數而定。注意:this()呼叫只能出現在建構函式的第一行
static關鍵字
static用於修飾成員(成員變數和成員函式),被宣告為static的成員,不會讓個別物件擁有,而是屬於類。 在static方法中不能出現this關鍵字,static方法中不能用非static資料或方法成員。 import static語法是為了偷懶,但要注意名稱衝突的問題。被宣告為static的成員,是將類名稱作為名稱空間。
教材學習中的問題和解決過程
1.
其實這一章內容開始不是很好理解,因為之前對物件沒有一個概念。所以看了好幾遍書也不太懂,想到要程式碼託管,於是就把書上的程式碼抄了一遍。在敲程式碼的過程中,有了新的理解,讀百卷書也要走萬里路。
2.
在最開始接觸物件時,感覺和C語言中的結構體struct很像。C語言是程式導向的,Java是物件導向的,但是java的類更加強大,畢竟java是建立在c語言之上,類中還可以定義函式,很厲害。
程式碼除錯中的問題和解決過程
這個我覺得裡面有很多知識點的程式碼
其他(感悟、思考等,可選)
1.
在java.util.Scaaner裡面有類似c語言的scanf的讓使用者輸入,使用方式Scanner scanner =new Scanner(System.in); guess=scanner.nextInt();
這個是使用者輸入下一個整型的數字,可把nextInt改為nextLong、nextDouble等
如果直接取得上一個字串,則使用next()
想取得使用者輸入的整行文字,則使用nextLine()
2.
增強式for語言 for(int score:scores)
這是取出scores裡的第一元素賦值給score然後執行語句,然後取出scores裡的第二元素賦值給score然後執行語句,直到全部執行完畢
增強式的for語句走訪二維陣列 for(int[] row:cords){for(int value:row){}}
程式碼託管截圖如下
學習進度條
|
程式碼行數(新增/累積) |
部落格量(新增/累積) |
學習時間(新增/累積) |
重要成長 |
目標 |
3500行 |
28篇 |
300小時 |
|
第一週 |
200/200 |
1/1 |
10/10 |
|
第二週 |
300/500 |
1/2 |
20/30 |
|
第三週 |
300/800 |
1/3 |
20/50 |
|
第四周 |
|
|
|
|
第五週 |
|
|
|