一. 類
1.定義
- 成員變量(屬性):
- String name礁蔗;//姓名
- int age;//年齡
- 成員方法(行為)
- public void eat ()设拟;//吃
- public void sleep ()慨仿;睡
- 注意事項:
- 成員變量是直接定義在類當(dāng)中久脯,在方法外邊
- 成員方法不要寫
static
關(guān)鍵字 - 成員變量如果沒有賦值,會有一個默認(rèn)值
2.使用
-
導(dǎo)包:指出需要使用的類在什么位置
import 包名稱.類名稱
- 對于和當(dāng)前類屬于同一個包的情況镰吆,可省略
-
創(chuàng)建:
類名稱 對象名稱 = new 類名稱()
-
使用:
- 使用成員變量:
對象名.成員變量名
- 使用成員方法:
對象名.成員方法()
- 使用成員變量:
3. 內(nèi)存
- 方法區(qū):
- 類信息:變量帘撰、方法等信息
- 方法----地址值
- 堆:
-
new
出來的東西 - 類的成員變量(帶默認(rèn)值)
- 類的成員方法----地址值
-
- 棧:
- 對象名稱、方法的成員變量鼎姊、方法的執(zhí)行
- 根據(jù)地址映射到堆中----根據(jù)地址到方法區(qū)
- 方法區(qū)中的信息進(jìn)棧(壓棧)--- main方法最先進(jìn)棧
- 語句執(zhí)行完成后立刻馬上出棧(先進(jìn)后出)
- 當(dāng)一個對象作為方法參數(shù)傳遞時骡和,實際上傳遞的是對象的地址值
引用類型作為參數(shù),傳遞的是地址值
- 當(dāng)使用一個對象類型作為方法的返回值時相寇,return返回的其實就是對象的地址值
4. 局部變量與成員變量
- 定義的位置不一樣:
- 局部變量:在方法內(nèi)部
- 成員變量:在方法外部慰于,直接寫在類中
- 作用域不同:
- 局部變量:只有在方法當(dāng)中才能使用,出了方法不能使用
- 成員變量:在整個類中全都可以通用
- 默認(rèn)值不同:
- 局部變量:沒有默認(rèn)值唤衫,手動賦值后才可以使用
- 成員變量:有默認(rèn)值婆赠,規(guī)則同數(shù)組
- 內(nèi)存的位置不一樣:
- 局部變量:位于棧內(nèi)存
- 成員變量:位于堆內(nèi)存
- 生命周期不一樣:
- 局部變量:隨著方法進(jìn)棧而誕生,隨著方法出棧而消失
- 成員變量:隨著對象創(chuàng)建而誕生佳励,隨著對象被垃圾回收而消失
二. 封裝性
面向?qū)ο笕筇卣鳎悍庋b休里、繼承、多態(tài)
封裝性在Java中的體現(xiàn):
- 方法
- 關(guān)鍵字
private
- 間接訪問
private
成員變量赃承,就要在類中定義一對兒Setter/Getter
方法 - 方法名稱必須要叫
SetXxx妙黍、GetXxx
-
boolean
類型的getter
方法名稱為isXxx
- 間接訪問
public class Person {
String name;
/*
成員變量用Private修飾,則只能在本類中被使用瞧剖,在其他地方不能直接訪問
間接訪問則必須用Set/Get方法
提高了代碼安全性拭嫁,有效防止不合理情況發(fā)生(年齡有限制,但int并不能有效限制鬃ビ凇)
*/
private int age;
public void printPersion() {
System.out.println("my name is:" + name + " i am:" + age);
}
//set方法沒有返回值做粤,必須帶參數(shù)
public void setAge(int num) {
if (age < 100 && age >= 0) {
age = num;
} else {
System.out.println("數(shù)據(jù)不合理");
}
}
//get方法沒有參數(shù),必須有返回值
public int getAge() {
return age;
}
}
public class Demo04Person {
public static void main(String[] args) {
Person person=new Person();
person.name="arnold";
//person.age=20;錯誤寫法捉撮,不能直接訪問
person.setAge(20);
person.printPersion();
}
}
三. this關(guān)鍵字
封裝的優(yōu)化1----this關(guān)鍵字
- 場景:當(dāng)方法的局部變量和類的成員變量重名時怕品,根據(jù)“就近原則”,優(yōu)先使用局部變量
- 解決重名分不開的情況:
this.成員變量名
- 通過誰(對象)調(diào)用的方法巾遭,誰就是
this
四. 構(gòu)造方法
封裝的優(yōu)化2----構(gòu)造方法
- 構(gòu)造方法是專門用來創(chuàng)建對象的方法肉康,當(dāng)我們通過
new
關(guān)鍵字來創(chuàng)建對象時,其實就是在調(diào)用構(gòu)造方法 - 格式:
public 類名稱(參數(shù)類型 參數(shù)名稱){
方法體
}
- 注意事項:
- 構(gòu)造方法名稱必須和類名稱完全相同
- 不要寫返回類型灼舍,
void
都不要寫 - 沒有返回值吼和,不能
return
具體值
public class Student {
//構(gòu)造方法
public Student() {
System.out.println("無參構(gòu)造方法執(zhí)行啦");
}
public Student(){
}
}
public class Demo05Student {
public static void main(String[] args) {
Student s = new Student();//調(diào)用構(gòu)造方法
}
}
- 如果沒有編寫任何構(gòu)造方法,編譯器會“免費贈送”一個構(gòu)造方法
- 一旦編寫了至少一個構(gòu)造方法片仿,編譯器的默認(rèn)構(gòu)造方法將不起作用
- 構(gòu)造方法也是可以重載的(Overload)
五. 標(biāo)準(zhǔn)類
一個標(biāo)準(zhǔn)類(也叫Java bean
)由四個部分組成:
- 所有成員變量都要使用
private
關(guān)鍵字修飾 - 為每一個成員變量編寫一對兒
Getter/Setter
方法 - 編寫一個無參的構(gòu)造方法
- 編寫一個全參的構(gòu)造方法
IDEA中自動生成:
- 快捷鍵:
Alt+Insert