生活中什么是面向?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)存地址。