類與對(duì)象
什么是類?
類是具有相同特征和行為的對(duì)象集合丰刊。其中特征對(duì)應(yīng)的是成員變量,它存儲(chǔ)在堆區(qū)中增拥,而行為對(duì)應(yīng)的是方法啄巧。
體現(xiàn)在代碼中如下:
public class Person{
String name;// 特征對(duì)應(yīng)的成員變量
int age;
String hobby;
void thinking(){
}//行為對(duì)應(yīng)的方法
}
什么是對(duì)象?
對(duì)象是類的實(shí)例掌栅。在代碼中使用new關(guān)鍵字來創(chuàng)建秩仆。
如Person p = new Person();
特殊的:沒有變量名的對(duì)象叫做匿名對(duì)象。代碼形式:new Person();
猾封。
它的使用場(chǎng)景是:1.匿名對(duì)象可以作為實(shí)際參數(shù)進(jìn)行傳遞澄耍;
2.如有對(duì)象對(duì)方法只進(jìn)行一次調(diào)用,可以簡(jiǎn)化為匿名對(duì)象的形式(如:new Person().thinking();
)
構(gòu)造函數(shù)
概念
構(gòu)造函數(shù)是具有特殊功能的函數(shù)晌缘,負(fù)責(zé)給對(duì)象進(jìn)行初始化齐莲。形式有無參構(gòu)造方法和有參構(gòu)造方法。
無參構(gòu)造方法:
Person(){
}
有參構(gòu)造方法:
Person(String name, int age,String hobby) {
this.name = name;
this.age = age;
this.sex = sex;
this.birth = birth;
this.hobby = hobby;
}
與一般函數(shù)的區(qū)別
在格式上枚钓,構(gòu)造函數(shù)函數(shù)名和類名相同(一般函數(shù)的函數(shù)名與類名相同也可以編譯通過铅搓,但不符合編碼規(guī)范),沒有返回值類型搀捷,沒有具體的返回值星掰。在調(diào)用場(chǎng)景上,構(gòu)造函數(shù)在對(duì)象創(chuàng)建時(shí)執(zhí)行嫩舟,且只執(zhí)行一次氢烘,而一般函數(shù)是按需求調(diào)用。
默認(rèn)構(gòu)造函數(shù)
定義的每一個(gè)類中家厌,如果沒有構(gòu)造方法播玖,都會(huì)默認(rèn)生成一個(gè)無參的構(gòu)造方法。但一旦自定義了一個(gè)構(gòu)造方法饭于,就不會(huì)生成蜀踏。所以如果需要有參和無參兩種構(gòu)造方法,就一定要自己把無參的構(gòu)造方法補(bǔ)上掰吕。
私有化
通過權(quán)限修飾符private將構(gòu)造函數(shù)私有化果覆,可以使構(gòu)造函數(shù)只能在本類中使用,只能通過本類中其他方法調(diào)用殖熟。
封裝
概念
通過權(quán)限修飾符private隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié)局待,僅對(duì)外提供公共訪問方式。如下面的Person類:
public class Person {
/**
* 對(duì)屬性的封裝
*/
private String name;
private int age;
private String hobby;
/**
* setter&&getter
*/
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;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
}
優(yōu)點(diǎn)
便于使用;提高安全性钳榨;可以復(fù)用舰罚;將變化隔離,便于修改代碼薛耻。
隱藏實(shí)現(xiàn)細(xì)節(jié)-權(quán)限修飾符
訪問權(quán)限修飾符權(quán)限從高到低排列是:public, protected, default, private营罢。具體細(xì)節(jié)如圖:
提供公共訪問方式-setter&&getter
由于私有化了對(duì)象的屬性,所以無法直接對(duì)對(duì)象的屬性進(jìn)行修改和查詢饼齿。要修改和查詢就必須使用提供的公共訪問方式-setter&&getter愤钾。其中setter用于修改,getter用于查詢候醒。
this關(guān)鍵字
概念:
this關(guān)鍵字代表對(duì)象本身(哪個(gè)對(duì)象調(diào)用this所在的方法,this就代表哪個(gè)對(duì)象本身)杂瘸,只要訪問了對(duì)象數(shù)據(jù)的方法就持有了this倒淫。
使用場(chǎng)景:
構(gòu)造函數(shù)的嵌套調(diào)用:
public Person(String name, int age, String hobby) {
this.name = name;
this.age = age;
this.hobby = hobby;
}
public Person(String name, int age){
this(name,age,null);
}
解決參數(shù)名與成員變量名同名:
public void setName(String name) {
this.name = name;
}
static關(guān)鍵字
static 修飾的是 靜態(tài)變量和靜態(tài)方法,用來給類的所有對(duì)象共享數(shù)據(jù)
使用場(chǎng)景:
1.靜態(tài)方法:
方法不需要訪問對(duì)象的相關(guān)信息的時(shí)候败玉,為了節(jié)省內(nèi)存敌土,可以直接用static修飾,用類名調(diào)用运翼。如:
public class Person{
String name;
int age;
String hobby;
public static void thinking(){
System.out.println("thinking");
}
只需在主函數(shù)中使用Person.thinkin();
就可以調(diào)用thinking方法返干。
2.靜態(tài)變量:
類的所有對(duì)象共享數(shù)據(jù),靜態(tài)成員隨著類的加載而加載血淌,隨著類的消失而消失矩欠,靜態(tài)成員的生命周期很長(zhǎng)。
創(chuàng)建對(duì)象的流程
1.開辟內(nèi)存
2.靜態(tài)變量的顯式初始化(反編譯結(jié)果把顯式初始化添加到了靜態(tài)代碼塊之內(nèi))
3.靜態(tài)代碼塊(如果有多個(gè)的情況悠夯,按代碼書寫的順序執(zhí)行)
4.成員變量的顯式初始化(反編譯結(jié)果添加到了構(gòu)造器中)
5.代碼塊(反編譯結(jié)果添加到了構(gòu)造器中)
6.構(gòu)造器