一.構造函數-Constructor
1.構造函數
a.函數名和類名相同
b.沒有返回值類型 (注意: 區別於void!)
c.new關鍵字創建對象時自動調用
注意:
a.構造函數可以重載;
b.可以定義與類名相同的方法.
2.什麼時候使用構造函數
當我們想在創建對象的時候就執行一段代碼, 就可以把這段代碼放在構造函數中
例如對成員變量的賦值, 定義構造函數, 接收參數, 在執行構造函數的時候, 就可以對成員變量賦值了
3.構造函數的調用
a.當new關鍵字創建對象的時候調用
b.在其他構造函數的第一條語句中使用this()形式調用
4.自動生成構造函數
一個類如果沒寫任何構造函數, 那麼會自動生成一個. 這個自動生成的構造函數沒有參數, 也沒有任何代碼.
注意:
如果寫了一個有參的構造函數, 就不會自動生成無參的了.
5.構造函數的訪問權限
通常情況下都是public的, 在別的類中可以創建該類對象
某些特殊情況下我們定義了一個類, 不希望別人創建對象, 那麼就可以用private修飾構造函數.
二.局部變量和成員變量
1.局部變量:
LocalVariable, 方法中定義的變量.
2.成員變量:
Field, 類中定義的變量
3.重名問題:
局部變量可以和成員變量同名.
但是局部變量不能和局部變量同名. 成員變量不能和成員變量同名
4.訪問問題:
在方法中直接以一個變量名形式訪問的時候, 會先找局部變量, 再找成員變量.
如果存在局部變量, 直接訪問局部的, 如果沒有局部的才找成員的, 如果成員的也沒有, 纔會報錯.
使用"this.變量名"形式訪問一個變量, 可以直接找到成員變量
三.this關鍵字
1.構造函數中
可以使用"this(參數)"形式調用其它構造函數
2.普通函數中
this代表調用當前函數的對象
通常在set方法和構造函數中都會使用, 當局部變量和成員變量同名時訪問成員變量
3.內部類中
訪問外部類的成員時,使用"外部類名.this.成員名"進行訪問
四.函數的參數傳遞
1.基本數據類型
基本數據類型的數據由於是存儲在棧內存中的, 傳入函數中函數中的變量是一個新的值, 函數中改變調用處不變.
2.引用數據類型
引用數據類型的數據是存儲在堆內存中的, 變量記住的是地址, 在調用函數時函數中傳入的也是地址, 兩邊指向同一個對象, 一邊改變兩邊都變.
五.代碼塊
1.什麼是代碼塊
a.在類中用"{}"可以定義一個代碼塊
b.代碼塊在創建對象的時候執行
2.代碼塊和成員變量賦值的順序
一個類中如果定義了成員變量, 在創建對象的時候就會初始化, 這個默認的初始化是在代碼塊之前做的. 基本數據類型等於0, 引用數據類型等於null.
如果代碼中對成員變量賦了值, 也定義了代碼塊, 這兩部分的順序是按照定義的先後而決定的
如果代碼塊寫在了賦值的前面, 那麼是先初始化, 再代碼塊, 再賦值
如果代碼塊卸載了賦值的後面, 那麼是先初始化, 再賦值, 再代碼塊
六.static關鍵字
1.static用於修飾類的成員:
靜態變量
靜態方法
靜態代碼塊
靜態內部類
2.靜態變量
a.類加載後就初始化
b.所有對象共享
c.可以用"類名.變量名"訪問
七.思考題
海灘上有一堆桃子, 有五隻猴子來分.
第一隻猴子發現了桃子, 將桃子分成了5份, 發現多了1個, 吃了. 拿走了一份.
第二隻猴子也來到海灘發現了桃子, 也是將桃子分成5份, 發現多了1個, 吃了. 又是拿走一份.
五隻猴子都是這麼做的. 問: 海灘上最初有多少個桃子?
public static void sum()
{
int count=0;
int total=1;
while(count<=99999){
count=total;
for(int j=0;j<5;j++)
{
count=count*5+1;
}
System.out.println(count);
total++;
}
}