第四章·1學習筆記
一、教材學習內容(4.類和物件)
1、程式語言的幾個發展物件:面對機器語言(01程式碼)、面向過程語言(C語言)、面對物件語言,其中面嚮物件語言有三個特點:1)封裝性2)繼承性3)多型性
2、類(class)的建立包括1)類宣告2)類體 兩部分組成
3、成員變數1)型別:可以是Java中的任何一種型別。 2)有效範圍:成員變數在整個類內都有效,其有效性與它在類體中的書寫的先後位置無關。3)程式設計風格:①一行只宣告一個變數②首單詞字母小寫,第二個單詞開始首字母大寫③變數名字見名知意
4、方法由1)方法頭,即宣告2)方法體,即定義 兩部分組成,其中方法的名字定義與成員變數相同
5、區分成員變數與區域性變數,若區域性變數的名字與成員變數名字相同,那麼成員變數在該區域性變數的生存域中被隱藏,如果想要呼叫該成員變數,可以用this.成員變數名
6、成員變數可以有預設值,而區域性變數沒有預設值!因此在使用區域性變數之前必須為它賦予初值。
7、構造方法1) 方法名必須與類名相同。2)不要宣告返回型別。3)不能被static、final修飾。構造方法不能被子類繼承,所以用final和abstract修飾沒有意義。構造方法用於初始化一個新建的物件,所以用static修飾沒有意義。
特別的,允許一個類中有多個構造方法(過載建構函式),若類中沒有編寫建構函式,則系統會預設地為該類建立一個無參的建構函式,且方法體沒有語句。
8、建立物件 類名 物件名=new 建構函式名(引數列表)
關於建立物件時的預設值:
整形——0
浮點型——0.0
波爾型——flase
引用型——null
9、物件的引用存放在棧中,物件的實體存放在堆中。棧存取速度快,堆動態分配記憶體大小。
10、避免使用空物件,否則會報錯。
11、一個類的兩個物件若具有相同的引用,則二者就擁有完全相同的變數。
特別的,在編寫程式時儘量避免使用匿名物件去訪問自己的變數,以免引起混亂。
12、可變引數:指在宣告方法時不給出引數列表中從某項開始直至最後一項引數的名字和個數,但這些引數的型別必須相同,用“...”表示若干引數(比起陣列,個數的變化更加靈活)
特別的,可以用引數名.length查詢引數列表的長度。
簡單例子,用可變引數求多個數的和(個數不確定)
public class Varable {
public static void main(String[] args) {
System.out.println(add(2, 3));
System.out.println(add(2, 3, 5));
}
public static int add(int x, int... args) {
int sum = x;
for (int i = 0; i < args.length; i++) {
sum += args[i];
}
return sum;
}
}
13、組合和複用:1)“黑盒”複用,即當前物件只能委託被組合物件並呼叫其方法2)當前物件可以隨意更改被組合物件。
class Circle {
double radius,area;
void setRadius(double r) {
radius=r;
}
double getRadius() {
return radius;
}
double getArea(){
area=3.14*radius*radius;
return area;
}
}
class Circular {
Circle bottom;
double height;
void setBottom(Circle c) {
bottom = c;
}
void setHeight(double h) {
height = h;
}
double getVolme() {
if(bottom == null)
return -1;
else
return bottom.getArea()*height/3.0;
}
double getBottomRadius() {
return bottom.getRadius();
}
public void setBottomRadius(double r){
bottom.setRadius(r);
}
}
public class Seven{
public static void main(String args[]) {
Circle circle = new Circle(); //【程式碼1】
circle.setRadius(10); //【程式碼2】
Circular circular = new Circular(); //【程式碼3】
System.out.println("circle的引用:"+circle);
System.out.println("圓錐的bottom的引用:"+circular.bottom);
circular.setHeight(5);
circular.setBottom(circle); //【程式碼4】
System.out.println("circle的引用:"+circle);
System.out.println("圓錐的bottom的引用:"+circular.bottom);
System.out.println("圓錐的體積:"+circular.getVolme());
System.out.println("修改circle的半徑,bottom的半徑同樣變化");
circle.setRadius(20); //【程式碼5】
System.out.println("bottom的半徑:"+circular.getBottomRadius());
System.out.println("重新建立circle,cirlce的引用將發生變化");
circle = new Circle(); //重新建立circle 【程式碼6】
System.out.println("circle的引用:"+circle);
System.out.println("但是不影響circular的bottom的引用");
System.out.println("圓錐的bottom的引用:"+circular.bottom);
}
}
二、教材學習中的問題和解決過程
暫無
三、程式碼除錯過程中的問題
暫無
四、學習思考和感悟
暫無
五、學習進度條
程式碼函式(新增/積累) | 部落格量(新增/積累) | 學習時間(新增/積累) | 重要成長 | |
目標 | 7000行 | 30篇 | 400h | |
第四周 | 868/1620 | 2/5 | 19/46 |