小豬學(xué)習(xí)

小小白慢慢學(xué)習(xí)中ing 第十天
努力努力
本日內(nèi)容(面向?qū)ο蟪踝R(shí))
1、生活中什么是面向?qū)ο?br>
洗衣服,吃飯
面向過程:關(guān)注點(diǎn)是過程 ————站在一個(gè)執(zhí)行者的角度去考慮事情,做事情
????//step1.找個(gè)盆
????//step2.收集要洗的衣服
????//step3.放水,放洗衣粉。。
????//step4:洗一洗
????//step5:曬一曬
?
面向?qū)ο螅宏P(guān)注點(diǎn)是對(duì)象 ————站在指揮者的角度
????//step1:找個(gè)對(duì)象
????//step2:讓他洗衣服
生活中的面向?qū)ο螅赫液线m的人,做合適的事兒。。
生活中的面向過程:親力親為,按照流程步驟來,一步一步,吭哧吭哧。。。
?
代碼中:
????Arrays類
????????sort();-->排序
????????binarySearch();-->搜索
????Scanner類
????????sc.nextInt();
????????sc.next();
????????sc.nextDouble();
2、面向?qū)ο蠛兔嫦蜻^程
面向?qū)ο螅?OOP)
????不是一種語言,而是一種編程思想。
面向?qū)ο蟪绦蛟O(shè)計(jì):(Object Oriented Programming)
????????Object:對(duì)象
????????Oriented:方向,定向
????????Programming:程序
面向過程:
????????關(guān)注點(diǎn)在過程上(步驟)
????????step1,step2,step3.。。。。
????????總和分析,按照步驟實(shí)現(xiàn)即可。
?
面向?qū)ο螅?/p>
????????關(guān)注點(diǎn)在對(duì)象上,
????????萬事萬物皆對(duì)象。
????????A:分析當(dāng)前的問題域中所涉及的對(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)系。。。
????????????????類的堆砌。
3、類和對(duì)象
類 ? ? ? ? ? ? ? | ? ? ? ?? 對(duì)象
人類:??????????????????? Person鐘南山院士,你,我,王二狗,李小花,袁隆平爺爺,馬云爸爸。。
狗類:??????????????????? 幻影,忠犬八公,二哈,嘯天
貓類:??????????????????? 嘟嘟,卡卡,你家的貓,姥姥家的白貓
汽車類: ? ? ? ? ? ? ? ? 我的黑色的長城車,58臺(tái)紅旗車,撞我的那臺(tái)車。。
筆記本電腦類: ? ?? 我現(xiàn)在用的這個(gè)電腦15寸的pro,王二狗的華碩,你媳婦的聯(lián)想
手機(jī)類: ? ? ? ? ? ? ? ? 我的華為Mate30,你的小米mix2s,你媳婦用諾基亞n95
類:其實(shí)指的就是類別。對(duì)同一類事物的統(tǒng)稱。對(duì)這類事物進(jìn)行描述,--->創(chuàng)建class
????????就是一個(gè)抽象的概念。
對(duì)象:
? ? ? ? 類中的一個(gè)具體的實(shí)例,客觀存在的,能用。個(gè)體。
如何定義一個(gè)類?
????????要有能夠描述這一類別的外部特征——我們叫做屬性(靜態(tài)屬性)
變量就可以。(名詞)
? ? ? ? 要有能夠描述這一類別的行為功能——我們叫做方法(動(dòng)態(tài)屬性)
方法就可以。(動(dòng)詞)
4、Java中定義類的格式
/*
class ClassName{//類名首字母大寫
//屬性描述:外部特征
//行為描述:能夠干啥
}
*/
要求:
? ?1、CLassName要求符合駝峰命名法,首字母大寫,見名知意。
? ?2、屬性描述:外部特征,用于描述這個(gè)類別的一些特征,而這些特征通過一個(gè)"詞"來描述清楚,比如姓名,年齡。使用變量來表示?!境蓡T變量】Field,詞義"字段"
? ?3、行為描述:能夠干啥,用于描述這個(gè)類別的一些行為功能,而這些行為功能,是一個(gè)動(dòng)作行為,比如吃飯,睡覺。使用方法來表示?!境蓡T方法】Method,詞義"方法"
? 不要加static。
方法:就是一段具有獨(dú)立功能的代碼。
4.1 step1聲明類
public class Person{//類的名字
}
4.2 step2聲明類中的【成員變量】
public class Person {
????????//step2:成員變量
????????String name;//使用String類型的變量name,表示人類中的姓名
????????int age;//使用int類型的變量age,表示人類中的年齡
????????char sex;//使用char類型的變量sex,表示人類中的性別
}
4.3 step3聲明類中的【成員方法】
public class Person {
????????//step2:成員變量
????????String name;//使用String類型的變量name,表示人類中的姓名
????????int age;//使用int類型的變量age,表示人類中的年齡
????????char sex;//使用char類型的變量sex,表示人類中的性別
????????//step3:成員方法
????????public void eat(){
????????????????System.out.println("吃飯啦。。");
????????}
????????public void sleep(){
????????????????System.out.println("睡覺啦。。");
????????}
????????public void daDouDou(){
????????????????System.out.println("打豆豆。。。");
????????}
}

?5、類的對(duì)象
5.1 創(chuàng)建類的對(duì)象
創(chuàng)建對(duì)象,也叫做類的實(shí)例化。對(duì)象,也叫類的實(shí)例。
/*
new關(guān)鍵字
new,詞義:新的,新建
new 關(guān)鍵字,專門用于新建對(duì)象。
*/
Scanner sc = new Scanner();//Scanner也是個(gè)類,Person也是個(gè)類。
int[] arr = new int[5];
語法結(jié)構(gòu):
????????/*
????????類名 對(duì)象名 = new 類名();
????????*/
step1:創(chuàng)建類
step2:根據(jù)類,實(shí)例化對(duì)象
5.2通過對(duì)象訪問屬性
/*
int[] arr = new int[5];
獲取數(shù)組的長度:
arr.length
arr的長度
*/
對(duì)象訪問屬性的語法:就是一個(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通過對(duì)象訪問方法
/*
Scanner sc = new Scanner();
sc.nextInt();
*/
Scanner,就是一個(gè)class,一個(gè)類
sc,是根據(jù)Scanner創(chuàng)建出來的一個(gè)對(duì)象
對(duì)象調(diào)用類中的方法,語法,也是.
對(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類的對(duì)象
????????????????//語法:類名 對(duì)象名 = new 類名();
????????????????Person p1 = new Person();
????????????????System.out.println(p1);//打印p1的值,p1是引用類型,打印都是p1指向的對(duì)象的地址。
????????????????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:通過對(duì)象訪問屬性,語法是.
????????????????//給對(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:通過對(duì)象,訪問成員方法--->理解為就是對(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類的對(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類的對(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類型的對(duì)象p3,但是實(shí)際上,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? //并沒有在堆內(nèi)存中,創(chuàng)建出 ? 真正的對(duì)象。
????????????????/*
????????????????* NullPointerException,空指針異常
????????????????*
????????????????* 對(duì)象不存在,就是個(gè)null,
?????????????????* 強(qiáng)行的訪問對(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)存地址了,就不再指向原來的內(nèi)存對(duì)象。
????????????????System.out.println(p1.name);
????????????????System.out.println(p3.name);
????????????????System.out.println(p4.name);
????????}
}
?
內(nèi)存分析圖:
