面向?qū)ο螅▽ο蟮慕榻B,聲明,創(chuàng)建)

生活中什么是面向?qū)ο?br>

洗衣服,吃飯

面向過程:關(guān)注點(diǎn)是過程 ————站在一個(gè)執(zhí)行者的角度去考慮事情,做事情

? ? //step1.找個(gè)盆

? ? //step2.收集要洗的衣服

? ? //step3.放水,放洗衣粉。。

? ? //step4:洗一洗

? ? //step5:曬一曬

?

面向?qū)ο螅宏P(guān)注點(diǎn)是對象 ————站在指揮者的角度

? ? //step1:找個(gè)對象

? ? //step2:讓他洗衣服



生活中的面向?qū)ο螅赫液线m的人,做合適的事兒。。

生活中的面向過程:親力親為,按照流程步驟來,一步一步,吭哧吭哧。。。

?

代碼中:

? ? Arrays類

? ? ? ? sort();-->排序

? ? ? ? binarySearch();-->搜索

? ? Scanner類

? ? ? ? sc.nextInt();

? ? ? ? sc.next();

? ? ? ? sc.nextDouble();

面向?qū)ο蠛兔嫦蜻^程

面向?qū)ο螅?OOP)

? ? 不是一種語言,而是一種編程思想。

? ? 面向?qū)ο蟪绦蛟O(shè)計(jì):(Object Oriented Programming)

? ? ? ? Object:對象

? ? ? ? Oriented:方向,定向

? ? ? ? Programming:程序


面向過程:

? ? 關(guān)注點(diǎn)在過程上(步驟)

? ? step1,step2,step3.。。。。

? ? 總和分析,按照步驟實(shí)現(xiàn)即可。

?

面向?qū)ο螅?/p>

? ? 關(guān)注點(diǎn)在對象上

? ? ? ? 萬事萬物皆對象。

? ? A:分析當(dāng)前的問題域中所涉及的對象。

? ? B:這些對象有什么樣的特征和功能。

? ? ? ? 外部特征:靜態(tài)屬性

? ? ? ? 動作行為:動態(tài)屬性

? ? C:對象和對象之間的關(guān)系。

? ? ? ? 繼承關(guān)系,聚合關(guān)系,關(guān)聯(lián)關(guān)系。。。


? ? ? ? 類的堆砌。

類和對象

類對象

人類Person鐘南山院士,你,我,王二狗,李小花,袁隆平爺爺,馬云爸爸。。

狗類幻影,忠犬八公,二哈,嘯天

貓類嘟嘟,卡卡,你家的貓,姥姥家的白貓

汽車類我的黑色的長城車,58臺紅旗車,撞我的那臺車。。

筆記本電腦類我現(xiàn)在用的這個(gè)電腦15寸的pro,王二狗的華碩,你媳婦的聯(lián)想

手機(jī)類我的華為Mate30,你的小米mix2s,你媳婦用諾基亞n95

類:其實(shí)指的就是類別。對同一類事物的統(tǒng)稱。對這類事物進(jìn)行描述,--->創(chuàng)建class

? ? 就是一個(gè)抽象的概念。

對象:

? ? 類中的一個(gè)具體的實(shí)例,客觀存在的,能用。個(gè)體。

如何定義一個(gè)類?

要有能夠描述這一類別的外部特征——我們叫做屬性(靜態(tài)屬性)

變量就可以。(名詞)

要有能夠描述這一類別的行為功能——我們叫做方法(動態(tài)屬性)

方法就可以。(動詞)

Java中定義類的格式

/*

class ClassName{//類名首字母大寫

? ? //屬性描述:外部特征

? ? //行為描述:能夠干啥

}

*/

要求:

1、CLassName要求符合駝峰命名法,首字母大寫,見名知意。

2、屬性描述:外部特征,用于描述這個(gè)類別的一些特征,而這些特征通過一個(gè)"詞"來描述清楚,比如姓名,年齡。使用變量來表示?!境蓡T變量】Field,詞義"字段"

3、行為描述:能夠干啥,用于描述這個(gè)類別的一些行為功能,而這些行為功能,是一個(gè)動作行為,比如吃飯,睡覺。使用方法來表示。——【成員方法】Method,詞義"方法"

? ? 不要加static。

方法:就是一段具有獨(dú)立功能的代碼。

2.4.1 step1聲明類

publicclassPerson{//類的名字

?

}

2.4.2 step2聲明類中的【成員變量】

publicclassPerson{

? ? //step2:成員變量

? ? Stringname;//使用String類型的變量name,表示人類中的姓名


? ? intage;//使用int類型的變量age,表示人類中的年齡


? ? charsex;//使用char類型的變量sex,表示人類中的性別



}

2.4.3 step3聲明類中的【成員方法】

publicclassPerson{

? ? //step2:成員變量

? ? Stringname;//使用String類型的變量name,表示人類中的姓名


? ? intage;//使用int類型的變量age,表示人類中的年齡


? ? charsex;//使用char類型的變量sex,表示人類中的性別


? ? //step3:成員方法

? ? publicvoideat(){

? ? ? ? System.out.println("吃飯啦。。");

? ? }


? ? publicvoidsleep(){

? ? ? ? System.out.println("睡覺啦。。");

? ? }


? ? publicvoiddaDouDou(){

? ? ? ? System.out.println("打豆豆。。。");

? ? }

}

?

類的對象

?創(chuàng)建類的對象

創(chuàng)建對象,也叫做類的實(shí)例化。對象,也叫類的實(shí)例。

/*

new關(guān)鍵字

new,詞義:新的,新建

new 關(guān)鍵字,專門用于新建對象。

*/

Scannersc=newScanner();//Scanner也是個(gè)類,Person也是個(gè)類。

int[]arr=newint[5];

?

語法結(jié)構(gòu):

/*

類名 對象名 = new 類名();

*/

step1:創(chuàng)建類

step2:根據(jù)類,實(shí)例化對象

2.5.2通過對象訪問屬性

/*

int[] arr = new int[5];

獲取數(shù)組的長度:

arr.length

arr的長度

*/

對象訪問屬性的語法:就是一個(gè).

//給對象的屬性,進(jìn)行賦值

p1.name="王二狗";//給p1這個(gè)對象的name屬性進(jìn)行賦值

p1.age=18;

p1.sex='男';

?

?

//獲取對象的屬性值

System.out.println("姓名:"+p1.name);

System.out.println("年齡:"+p1.age);

System.out.println("性別:"+p1.sex);

2.5.3通過對象訪問方法

/*

Scanner sc = new Scanner();

sc.nextInt();

*/

Scanner,就是一個(gè)class,一個(gè)類

sc,是根據(jù)Scanner創(chuàng)建出來的一個(gè)對象

?

對象調(diào)用類中的方法,語法,也是.

對象.方法名();

p1.eat();

p1.sleep();

p1.daDouDou();

方法:public void test1();

對象.test1();

三天前的方法:public static void test1();

test1();

內(nèi)存分析

實(shí)例代碼:

packagecom.qf.demo01;

?

publicclassTest1Person{

?

? ? publicstaticvoidmain(String[]args) {

? ? ? ? //step1:創(chuàng)建Person類的對象

? ? ? ? //語法:類名 對象名 = new 類名();


? ? ? ? Personp1=newPerson();

? ? ? ? System.out.println(p1);//打印p1的值,p1是引用類型,打印都是p1指向的對象的地址。


? ? ? ? System.out.println(p1.name);

? ? ? ? System.out.println(p1.age);

? ? ? ? System.out.println(p1.sex);





? ? ? ? /*

? ? ? ? * com.qf.demo01.Person@15db9742

? ? ? ? * 包名.類名@編碼值? ? ---->理解為p1的內(nèi)存地址。

? ? ? ? *

? ? ? ? * java中的數(shù)據(jù)類型:

? ? ? ? * 基本類型:byte,short,char,int,long,bolean,float,double

? ? ? ? * 引用類型:

? ? ? ? *? ? ? ? 數(shù)組,類類類型

? ? ? ? *

? ? ? ? */

? ? ? ? //step2:通過對象訪問屬性,語法是.

? ? ? ? //給對象的屬性,進(jìn)行賦值

? ? ? ? p1.name="王二狗";//給p1這個(gè)對象的name屬性進(jìn)行賦值

? ? ? ? p1.age=18;

? ? ? ? p1.sex='男';



? ? ? ? //獲取對象的屬性值

? ? ? ? System.out.println("姓名:"+p1.name);

? ? ? ? System.out.println("年齡:"+p1.age);

? ? ? ? System.out.println("性別:"+p1.sex);



? ? ? ? //step3:通過對象,訪問成員方法--->理解為就是對象調(diào)用成員方法

? ? ? ? p1.eat();

? ? ? ? p1.sleep();

? ? ? ? p1.daDouDou();



? ? }

?

}

?

內(nèi)存分析圖

示例代碼:

packagecom.qf.demo01;

?

publicclassTest2Person{

?

? ? publicstaticvoidmain(String[]args) {

? ? ? ? //1.創(chuàng)建一個(gè)Person類的對象

? ? ? ? Personp1=newPerson();

? ? ? ? System.out.println(p1);//p1的內(nèi)存地址:com.qf.demo01.Person@15db9742


? ? ? ? p1.name="張三狗";

? ? ? ? p1.age=19;

? ? ? ? p1.sex='男';


? ? ? ? System.out.println(p1.name);//張三狗

? ? ? ? System.out.println(p1.age);//19

? ? ? ? System.out.println(p1.sex);//男


? ? ? ? //2.再創(chuàng)建一個(gè)Person類的對象


? ? ? ? Personp2=newPerson();

? ? ? ? System.out.println(p2);//p2的內(nèi)存地址,com.qf.demo01.Person@6d06d69c


? ? ? ? p2.name="李小花";

? ? ? ? p2.age=17;

? ? ? ? p2.sex='女';


? ? ? ? System.out.println(p2.name);//李小花

? ? ? ? System.out.println(p2.age);//17

? ? ? ? System.out.println(p2.sex);//女


? ? ? ? //3.

? ? ? ? Personp3=null;//僅僅聲明了Person類型的對象p3,但是實(shí)際上,并沒有在堆內(nèi)存中,創(chuàng)建出真正的對象。


? ? ? ? /*

? ? ? ? * NullPointerException,空指針異常

? ? ? ? *

? ? ? ? * 對象不存在,就是個(gè)null,

? ? ? ? * 強(qiáng)行的訪問對象的屬性或調(diào)用方法,就會空指針異常。

? ? ? ? */

? ? ? ? //System.out.println("---->"+p3.name);//報(bào)錯(cuò)啦:NullPointerException


? ? ? ? p3=p1;//將p1的值(p1對象的內(nèi)存地址),賦值給p3,結(jié)果-->p1和p3存儲的是同一個(gè)對象的內(nèi)存地址。


? ? ? ? p3.name="李鐵柱";

? ? ? ? System.out.println(p1.name);//李鐵柱

? ? ? ? System.out.println(p2.name);//李小花

? ? ? ? System.out.println(p3.name);//李鐵柱


? ? ? ? Personp4=newPerson();

? ? ? ? System.out.println(p4);//?


? ? ? ? p4.name="王二丫";

? ? ? ? p4.age=18;

? ? ? ? p4.sex='女';

? ? ? ? System.out.println(p4.name);

? ? ? ? System.out.println(p4.age);

? ? ? ? System.out.println(p4.sex);


? ? ? ? p4=p1;//改變對象的內(nèi)存地址了,就不再指向原來的內(nèi)存對象。

? ? ? ? System.out.println(p1.name);

? ? ? ? System.out.println(p3.name);

? ? ? ? System.out.println(p4.name);

? ? }

?

}

?

內(nèi)存分析圖:

三、總結(jié)

1、面向?qū)ο螅阂环N編程思想。

2、面向?qū)ο蟮膬纱蠛诵母拍睿侯惡蛯ο?/p>

3、類?

概念:同一類事物的統(tǒng)稱。類別,下個(gè)定義。

描述一個(gè)類:

靜態(tài)屬性:成員變量:這個(gè)類別有哪些外部特征。(名詞)

動態(tài)屬性:成員方法:這個(gè)類別有哪些行為功能。(動詞)

4、對象?

就是類中的一個(gè)具體的實(shí)例。

將類進(jìn)行實(shí)例化--->得到了對象

將對象的共同特征進(jìn)行抽取,加以描述--->對應(yīng)的就是類。

5、語法:

step1:定義一個(gè)類

/*

public class 類名{

? ? //成員變量


? ? //成員方法:不加static

}

*/

publicclassPerson{

//成員變量

Stringname;

intage;

charsex;


//成員方法

publicvoideat(){}


publicvoidsleep(){}

}

step2:根據(jù)類,創(chuàng)建對象。(將類進(jìn)行實(shí)例化,得到對象)

/*

類名 對象名 = new 類名();

*/

publicstaticvoidmain(){

? ? Personp1=newPerson();


}

step3:對象訪問類中的屬性和方法

/*

.用來表示訪問

對象.屬性

對象.方法();

*/

publicstaticvoidmain(){

? ? Personp1=newPerson();

? ? p1.name="王二狗";//賦值

System.out.println(p1.name);//取值


p1.eat();//對象訪問方法,將這個(gè)方法調(diào)用執(zhí)行。

}

6、內(nèi)存分析:

對象創(chuàng)建:

Personp1=newPerson();

//=左邊,對象的聲明,開辟棧內(nèi)存

//=右邊,有new,開辟堆內(nèi)存,創(chuàng)建對象,將對象的內(nèi)存地址,給p1

//結(jié)論:p1是Person類型的對象,屬于引用類型,存儲的都是對象的內(nèi)存地址。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容