1:成員變量和局部變量的區(qū)別(理解)
(1)在類中的位置不同
成員變量:類中方法外
局部變量:方法定義中或者方法聲明上
(2)在內(nèi)存中的位置不同
成員變量:在堆中
局部變量:在棧中
(3)生命周期不同
成員變量:隨著對象的創(chuàng)建而存在,隨著對象的消失而消失
局部變量:隨著方法的調(diào)用而存在甸饱,隨著方法的調(diào)用完畢而消失
(4)初始化值不同
成員變量:有默認(rèn)值
局部變量:沒有默認(rèn)值乏悄,必須定義,賦值套像,然后才能使用
2:類作為形式參數(shù)的問題?(理解)
(1)如果你看到一個(gè)方法需要的參數(shù)是一個(gè)類名聪廉,就應(yīng)該知道這里實(shí)際需要的是一個(gè)具體的對象聂受。
3:匿名對象(理解)
(1)沒有名字的對象
(2)應(yīng)用場景
A:調(diào)用方法,僅僅只調(diào)用一次的時(shí)候坦喘。
b:可以作為實(shí)際參數(shù)傳遞盲再。
4:封裝(理解)
(1)隱藏實(shí)現(xiàn)細(xì)節(jié),提供公共的訪問方式
(2)好處:
A:隱藏實(shí)現(xiàn)細(xì)節(jié)瓣铣,提供公共的訪問方式
B:提高代碼的復(fù)用性
C:提高代碼的安全性
(3)設(shè)計(jì)原則
把不想讓外界知道的實(shí)現(xiàn)細(xì)節(jié)給隱藏起來答朋,提供公共的訪問方式
(4)private是封裝的一種體現(xiàn)。
封裝:類棠笑,方法梦碗,private修飾成員變量
5:private關(guān)鍵字(掌握)
(1)私有的意義,可以修飾成員變量和成員方法
(2)特點(diǎn):
被private修飾的后的成員只能在本類中被訪問
(3)private的應(yīng)用:
以后再寫一個(gè)類的時(shí)候:
把所有的成員變量給private了
提供對應(yīng)的getXxx()/setXxx()方法
6:this關(guān)鍵字(掌握)
(1)代表當(dāng)前類的引用對象
記赘馈:哪個(gè)對象調(diào)用方法叉弦,該方法內(nèi)部的this就代表那個(gè)對象
(2)this的應(yīng)用場景:
A:解決了局部變量隱藏成員變量的問題
B:其實(shí)this還有其他的應(yīng)用,明天講解藻糖。
7:構(gòu)造方法(掌握)
(1)作用:用于對對象的數(shù)據(jù)進(jìn)行初始化
(2)格式:
A:方法名和類名相同
B:沒有返回值類型淹冰,連void都不能有
C:沒有返回值
思考題:構(gòu)造方法中可不可以有return語句呢?
可以。而是我們寫成這個(gè)樣子就OK了:return;
其實(shí)巨柒,在任何的void類型的方法的最后你都可以寫上:return;
(3)構(gòu)造方法的注意事項(xiàng)
A:如果我們沒寫構(gòu)造方法樱拴,系統(tǒng)將提供一個(gè)默認(rèn)的無參構(gòu)造方法
B:如果我們給出了構(gòu)造方法柠衍,系統(tǒng)將不再提供默認(rèn)構(gòu)造方法
如果這個(gè)時(shí)候,我們要使用無參構(gòu)造方法晶乔,就必須自己給出珍坊。
推薦:永遠(yuǎn)手動(dòng)自己給出無參構(gòu)造方法。
(4)給成員變量賦值的方式
A:setXxx()
B:帶參構(gòu)造方法
(5)標(biāo)準(zhǔn)案例
class Student {
private String name;
private int age;
public Student(){}
public Student(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
測試:
class StudentDemo {
public static void main(String[] args) {
//方式1
Student s1 = new Student();
s1.setName("林青霞");
s1.setAge(27);
System.out.println(s1.getName()+"---"+s1.getAge());
//方式2
Student s2 = new Student("劉意",30);
System.out.println(s2.getName()+"---"+s2.getAge());
}
}
8:代碼:Student s = new Student();做了哪些事情?(理解)
(1)把Student.class文件加載到內(nèi)存
(2)在棧內(nèi)存為s開辟空間
(3)在堆內(nèi)存為學(xué)生對象申請空間
(4)給學(xué)生的成員變量進(jìn)行默認(rèn)初始化正罢。null,0
(5)給學(xué)生的成員變量進(jìn)行顯示初始化阵漏。林青霞,27
(6)通過構(gòu)造方法給成員變量進(jìn)行初始化。劉意,30
(7)對象構(gòu)造完畢翻具,把地址賦值給s變量
9:面向?qū)ο蟮木毩?xí)題(掌握)
(1)標(biāo)準(zhǔn)的手機(jī)類的定義和測試
(2)Demo類有求和方法履怯,Test類進(jìn)行測試。
什么時(shí)候定義成員變量?
當(dāng)該變量是用來描述一個(gè)類的時(shí)候裆泳。
(3)長方形案例
(4)員工案例
(5)MyMath案例(自己提供加減乘除并測試)
10:static關(guān)鍵字(理解)
(1)靜態(tài)的意思叹洲。可以修飾成員變量和成員方法工禾。
(2)靜態(tài)的特點(diǎn):
A:隨著類的加載而加載
B:優(yōu)先與對象存在
C:被類的所有對象共享
這其實(shí)也是我們判斷該不該使用靜態(tài)的依據(jù)运提。
舉例:飲水機(jī)和水杯的問題思考
D:可以通過類名調(diào)用
既可以通過對象名調(diào)用,也可以通過類名調(diào)用闻葵,建議通過類名調(diào)用民泵。
(3)靜態(tài)的內(nèi)存圖
靜態(tài)的內(nèi)容在方法區(qū)的靜態(tài)區(qū)
(4)靜態(tài)的注意事項(xiàng);
A:在靜態(tài)方法中沒有this對象
B:靜態(tài)只能訪問靜態(tài)(代碼測試過)
(5)靜態(tài)變量和成員變量的區(qū)別
A:所屬不同
靜態(tài)變量:屬于類笙隙,類變量
成員變量:屬于對象洪灯,對象變量坎缭,實(shí)例變量
B:內(nèi)存位置不同
靜態(tài)變量:方法區(qū)的靜態(tài)區(qū)
成員變量:堆內(nèi)存
C:生命周期不同
靜態(tài)變量:靜態(tài)變量是隨著類的加載而加載竟痰,隨著類的消失而消失
成員變量:成員變量是隨著對象的創(chuàng)建而存在,隨著對象的消失而消失
D:調(diào)用不同
靜態(tài)變量:可以通過對象名調(diào)用掏呼,也可以通過類名調(diào)用
成員變量:只能通過對象名調(diào)用
(6)main方法是靜態(tài)的
public:權(quán)限最大
static:不用創(chuàng)建對象調(diào)用
void:返回值給jvm沒有意義
main:就是一個(gè)常見的名稱坏快。
String[] args:可以接收數(shù)據(jù),提供程序的靈活性
格式:java MainDemo hello world java
java MainDemo 10 20 30