小豬學(xué)習(xí)
小小白慢慢學(xué)習(xí)中ing 第十天
努力努力
本日內(nèi)容(面向?qū)ο蟪踝R(shí))
1、生活中什么是面向?qū)ο?br>
洗衣服离陶,吃飯
面向過(guò)程:關(guān)注點(diǎn)是過(guò)程 ————站在一個(gè)執(zhí)行者的角度去考慮事情稼虎,做事情
????//step1.找個(gè)盆
????//step2.收集要洗的衣服
????//step3.放水,放洗衣粉招刨。渡蜻。
????//step4:洗一洗
????//step5:曬一曬
?
面向?qū)ο螅宏P(guān)注點(diǎn)是對(duì)象 ————站在指揮者的角度
????//step1:找個(gè)對(duì)象
????//step2:讓他洗衣服
生活中的面向?qū)ο螅赫液线m的人,做合適的事兒计济。。
生活中的面向過(guò)程:親力親為排苍,按照流程步驟來(lái)沦寂,一步一步,吭哧吭哧淘衙。传藏。。
?
代碼中:
????Arrays類(lèi)
????????sort();-->排序
????????binarySearch();-->搜索
????Scanner類(lèi)
????????sc.nextInt();
????????sc.next();
????????sc.nextDouble();
2彤守、面向?qū)ο蠛兔嫦蜻^(guò)程
面向?qū)ο螅?OOP)
????不是一種語(yǔ)言毯侦,而是一種編程思想。
面向?qū)ο蟪绦蛟O(shè)計(jì):(Object Oriented Programming)
????????Object:對(duì)象
????????Oriented:方向具垫,定向
????????Programming:程序
面向過(guò)程:
????????關(guān)注點(diǎn)在過(guò)程上(步驟)
????????step1侈离,step2,step3.筝蚕。卦碾。。起宽。
????????總和分析洲胖,按照步驟實(shí)現(xiàn)即可。
?
面向?qū)ο螅?/p>
????????關(guān)注點(diǎn)在對(duì)象上坯沪,
????????萬(wàn)事萬(wàn)物皆對(duì)象绿映。
????????A:分析當(dāng)前的問(wèn)題域中所涉及的對(duì)象。
????????B:這些對(duì)象有什么樣的特征和功能腐晾。
????????????????外部特征:靜態(tài)屬性
????????????????動(dòng)作行為:動(dòng)態(tài)屬性
????????C:對(duì)象和對(duì)象之間的關(guān)系叉弦。
????????????????繼承關(guān)系,聚合關(guān)系藻糖,關(guān)聯(lián)關(guān)系卸奉。。颖御。
????????????????類(lèi)的堆砌榄棵。
3速址、類(lèi)和對(duì)象
類(lèi) ? ? ? ? ? ? ? | ? ? ? ?? 對(duì)象
人類(lèi):??????????????????? Person鐘南山院士,你拱撵,我篓冲,王二狗,李小花瘪弓,袁隆平爺爺垫蛆,馬云爸爸。腺怯。
狗類(lèi):??????????????????? 幻影袱饭,忠犬八公,二哈呛占,嘯天
貓類(lèi):??????????????????? 嘟嘟虑乖,卡卡,你家的貓晾虑,姥姥家的白貓
汽車(chē)類(lèi): ? ? ? ? ? ? ? ? 我的黑色的長(zhǎng)城車(chē)疹味,58臺(tái)紅旗車(chē),撞我的那臺(tái)車(chē)帜篇。糙捺。
筆記本電腦類(lèi): ? ?? 我現(xiàn)在用的這個(gè)電腦15寸的pro,王二狗的華碩笙隙,你媳婦的聯(lián)想
手機(jī)類(lèi): ? ? ? ? ? ? ? ? 我的華為Mate30洪灯,你的小米mix2s,你媳婦用諾基亞n95
類(lèi):其實(shí)指的就是類(lèi)別竟痰。對(duì)同一類(lèi)事物的統(tǒng)稱(chēng)婴渡。對(duì)這類(lèi)事物進(jìn)行描述,--->創(chuàng)建class
????????就是一個(gè)抽象的概念凯亮。
對(duì)象:
? ? ? ? 類(lèi)中的一個(gè)具體的實(shí)例边臼,客觀存在的,能用假消。個(gè)體柠并。
如何定義一個(gè)類(lèi)?
????????要有能夠描述這一類(lèi)別的外部特征——我們叫做屬性(靜態(tài)屬性)
變量就可以富拗。(名詞)
? ? ? ? 要有能夠描述這一類(lèi)別的行為功能——我們叫做方法(動(dòng)態(tài)屬性)
方法就可以。(動(dòng)詞)
4啃沪、Java中定義類(lèi)的格式
/*
class ClassName{//類(lèi)名首字母大寫(xiě)
//屬性描述:外部特征
//行為描述:能夠干啥
}
*/
要求:
? ?1粘拾、CLassName要求符合駝峰命名法,首字母大寫(xiě)创千,見(jiàn)名知意缰雇。
? ?2入偷、屬性描述:外部特征,用于描述這個(gè)類(lèi)別的一些特征械哟,而這些特征通過(guò)一個(gè)"詞"來(lái)描述清楚疏之,比如姓名,年齡暇咆。使用變量來(lái)表示锋爪。——【成員變量】Field爸业,詞義"字段"
? ?3其骄、行為描述:能夠干啥,用于描述這個(gè)類(lèi)別的一些行為功能扯旷,而這些行為功能拯爽,是一個(gè)動(dòng)作行為,比如吃飯薄霜,睡覺(jué)。使用方法來(lái)表示纸兔《韫希——【成員方法】Method,詞義"方法"
? 不要加static汉矿。
方法:就是一段具有獨(dú)立功能的代碼崎坊。
4.1 step1聲明類(lèi)
public class Person{//類(lèi)的名字
}
4.2 step2聲明類(lèi)中的【成員變量】
public class Person {
????????//step2:成員變量
????????String name;//使用String類(lèi)型的變量name,表示人類(lèi)中的姓名
????????int age;//使用int類(lèi)型的變量age洲拇,表示人類(lèi)中的年齡
????????char sex;//使用char類(lèi)型的變量sex奈揍,表示人類(lèi)中的性別
}
4.3 step3聲明類(lèi)中的【成員方法】
public class Person {
????????//step2:成員變量
????????String name;//使用String類(lèi)型的變量name,表示人類(lèi)中的姓名
????????int age;//使用int類(lèi)型的變量age赋续,表示人類(lèi)中的年齡
????????char sex;//使用char類(lèi)型的變量sex男翰,表示人類(lèi)中的性別
????????//step3:成員方法
????????public void eat(){
????????????????System.out.println("吃飯啦。纽乱。");
????????}
????????public void sleep(){
????????????????System.out.println("睡覺(jué)啦蛾绎。。");
????????}
????????public void daDouDou(){
????????????????System.out.println("打豆豆鸦列。租冠。。");
????????}
}
?5薯嗤、類(lèi)的對(duì)象
5.1 創(chuàng)建類(lèi)的對(duì)象
創(chuàng)建對(duì)象顽爹,也叫做類(lèi)的實(shí)例化。對(duì)象骆姐,也叫類(lèi)的實(shí)例镜粤。
/*
new關(guān)鍵字
new捏题,詞義:新的,新建
new 關(guān)鍵字繁仁,專(zhuān)門(mén)用于新建對(duì)象涉馅。
*/
Scanner sc = new Scanner();//Scanner也是個(gè)類(lèi),Person也是個(gè)類(lèi)黄虱。
int[] arr = new int[5];
語(yǔ)法結(jié)構(gòu):
????????/*
????????類(lèi)名 對(duì)象名 = new 類(lèi)名();
????????*/
step1:創(chuàng)建類(lèi)
step2:根據(jù)類(lèi)稚矿,實(shí)例化對(duì)象
5.2通過(guò)對(duì)象訪問(wèn)屬性
/*
int[] arr = new int[5];
獲取數(shù)組的長(zhǎng)度:
arr.length
arr的長(zhǎng)度
*/
對(duì)象訪問(wèn)屬性的語(yǔ)法:就是一個(gè).
//給對(duì)象的屬性,進(jìn)行賦值
p1.name = "王二狗";//給p1這個(gè)對(duì)象的name屬性進(jìn)行賦值
p1.age = 18;
p1.sex = '男';
//獲取對(duì)象的屬性值
System.out.println("姓名:"+p1.name);
System.out.println("年齡:"+p1.age);
System.out.println("性別:"+p1.sex);
5.3通過(guò)對(duì)象訪問(wèn)方法
/*
Scanner sc = new Scanner();
sc.nextInt();
*/
Scanner捻浦,就是一個(gè)class晤揣,一個(gè)類(lèi)
sc,是根據(jù)Scanner創(chuàng)建出來(lái)的一個(gè)對(duì)象
對(duì)象調(diào)用類(lèi)中的方法朱灿,語(yǔ)法昧识,也是.
對(duì)象.方法名();
????????p1.eat();
????????p1.sleep();
????????p1.daDouDou();
方法:public void test1();
對(duì)象.test1();
6、 內(nèi)存分析
實(shí)例代碼:
package com.qf.demo01;
?
public class Test1Person {
????????public static void main(String[] args) {
????????????????//step1:創(chuàng)建Person類(lèi)的對(duì)象
????????????????//語(yǔ)法:類(lèi)名 對(duì)象名 = new 類(lèi)名();
????????????????Person p1 = new Person();
????????????????System.out.println(p1);//打印p1的值盗扒,p1是引用類(lèi)型跪楞,打印都是p1指向的對(duì)象的地址。
????????????????System.out.println(p1.name);
????????????????System.out.println(p1.age);
????????????????System.out.println(p1.sex);
????????????????/*
????????????????* com.qf.demo01.Person@15db9742
????????????????* 包名.類(lèi)名@編碼值 ---->理解為p1的內(nèi)存地址侣灶。
????????????????* java中的數(shù)據(jù)類(lèi)型:
????????????????* 基本類(lèi)型:byte甸祭,short,char褥影,int池户,long,bolean凡怎,float校焦,double
????????????????* 引用類(lèi)型:
????????????????* 數(shù)組,類(lèi)類(lèi)類(lèi)型
????????????????*/
????????????????//step2:通過(guò)對(duì)象訪問(wèn)屬性统倒,語(yǔ)法是.
????????????????//給對(duì)象的屬性寨典,進(jìn)行賦值
????????????????p1.name = "王二狗";//給p1這個(gè)對(duì)象的name屬性進(jìn)行賦值
????????????????p1.age = 18;
????????????????p1.sex = '男';
????????????????//獲取對(duì)象的屬性值
????????????????System.out.println("姓名:"+p1.name);
????????????????System.out.println("年齡:"+p1.age);
????????????????System.out.println("性別:"+p1.sex);
????????????????//step3:通過(guò)對(duì)象,訪問(wèn)成員方法--->理解為就是對(duì)象調(diào)用成員方法
????????????????p1.eat();
????????????????p1.sleep();
????????????????p1.daDouDou();
????????}
}
內(nèi)存分析圖:
示例代碼:
package com.qf.demo01;
?
public class Test2Person {
?????????public static void main(String[] args) {
????????????????//1.創(chuàng)建一個(gè)Person類(lèi)的對(duì)象
? ? ? ? ? ? ? ? Person p1 = new Person();
????????????????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類(lèi)的對(duì)象
????????????????Person p2 = new Person();
????????????????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.
????????????????Person p3 = null;//僅僅聲明了Person類(lèi)型的對(duì)象p3凝赛,但是實(shí)際上,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? //并沒(méi)有在堆內(nèi)存中坛缕,創(chuàng)建出 ? 真正的對(duì)象墓猎。
????????????????/*
????????????????* NullPointerException,空指針異常
????????????????*
????????????????* 對(duì)象不存在赚楚,就是個(gè)null毙沾,
?????????????????* 強(qiáng)行的訪問(wèn)對(duì)象的屬性或調(diào)用方法,就會(huì)空指針異常宠页。
????????????????*/
????????????????//System.out.println("---->"+p3.name);//報(bào)錯(cuò)啦:NullPointerException
????????????????p3 = p1;//將p1的值(p1對(duì)象的內(nèi)存地址)左胞,賦值給p3寇仓,
????????????????????????????//結(jié)果-->p1和p3存儲(chǔ)的是同一個(gè)對(duì)象的內(nèi)存地址。
????????????????p3.name = "李鐵柱";
????????????????System.out.println(p1.name);//李鐵柱
????????????????System.out.println(p2.name);//李小花
????????????????System.out.println(p3.name);//李鐵柱
????????????????Person p4 = new Person();
????????????????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;//改變對(duì)象的內(nèi)存地址了烤宙,就不再指向原來(lái)的內(nèi)存對(duì)象遍烦。
????????????????System.out.println(p1.name);
????????????????System.out.println(p3.name);
????????????????System.out.println(p4.name);
????????}
}
?
內(nèi)存分析圖: