第三章甲葬、面向?qū)ο?/h1>

第三章:面向?qū)ο蟆緅ava語言的核心機(jī)制梁钾,最重要的內(nèi)容建瘫,java語言的特色】

1、面向過程與面向?qū)ο蟮膮^(qū)別

2、面向?qū)ο蟮娜筇卣?/p>

3但惶、類和對(duì)象的概念

4、類得定義【從這里開始編寫代碼】

1数冬、面向過程與面向?qū)ο蟮膮^(qū)別姓惑;

什么叫做面向過程;核心是因果關(guān)系關(guān)注的整個(gè)過程是如何走的配乱,在過程中沒有任何獨(dú)立體溉卓,沒有獨(dú)立體。各個(gè)子系統(tǒng)之間是通過因果關(guān)系連接起來的

如果一個(gè)因果關(guān)系出現(xiàn)問題搬泥,程序全體出問題桑寨。相當(dāng)于串聯(lián)。

優(yōu)點(diǎn)是:對(duì)于業(yè)務(wù)邏輯比較簡(jiǎn)單的程序忿檩,可以快速開發(fā)尉尾,前期投入投入成本很低

缺點(diǎn)是:軟件元素耦合度低,只要一個(gè)環(huán)出現(xiàn)問題燥透,整個(gè)一個(gè)系統(tǒng)收到影響沙咏。沒有獨(dú)立體概念辨图,所以組件無法進(jìn)行復(fù)用。

什么叫做面向?qū)ο笾辏粚讉€(gè)獨(dú)立功能的個(gè)體湊起來故河,實(shí)現(xiàn)一個(gè)場(chǎng)景下的功能。各個(gè)體之間的關(guān)聯(lián)程度極低吆豹。

相當(dāng)于搭積木忧勿,關(guān)注點(diǎn)是功能而不是因果關(guān)系。

優(yōu)點(diǎn):模塊間耦合度低瞻讽,擴(kuò)展力強(qiáng)鸳吸,可復(fù)用,更容易解決現(xiàn)實(shí)世界中更復(fù)雜的邏輯

缺點(diǎn):前期投入成本高速勇,需要進(jìn)行抽取獨(dú)立體抽取晌砾,大量的系統(tǒng)分析與設(shè)計(jì)。

c語言面向過程烦磁,c++半面向?qū)ο笱伲琷ava純面向?qū)ο?/p>

2、面向?qū)ο蟮娜筇卣鳎?/p>

封裝:

繼承:

多態(tài):

所有的面向?qū)ο蟮木幊陶Z言中都有這三大特征

面向?qū)ο蟮恼麄€(gè)生命周期中都伪;

面向?qū)ο蠓治觯篛OA

面向?qū)ο蟮脑O(shè)計(jì):OOD

面向?qū)ο蟮木幊蹋篛OP

3呕乎、類和對(duì)象的概念;

什么是類:現(xiàn)實(shí)中不存在陨晶,是人類大腦抽象思維總結(jié)的結(jié)果猬仁。是一個(gè)模板,是一個(gè)概念先誉。

類代表了一類事物

對(duì)象A和對(duì)像B中具有共同特征湿刽,進(jìn)行抽象總結(jié)出一個(gè)模板,這個(gè)模板被稱為類

什么是對(duì)象:對(duì)象是實(shí)際存在的個(gè)體『侄現(xiàn)實(shí)世界當(dāng)中實(shí)際存在诈闺。

先有對(duì)象之后人類思考對(duì)象后,發(fā)現(xiàn)對(duì)象與對(duì)象之間有相同的特征铃芦。在大腦中形成了模板就是類雅镊。

java程序員可以通過java代碼來表述一個(gè)類

java程序中有了類的定義

然后通過類可以創(chuàng)建對(duì)象

有了對(duì)象之后,可以讓對(duì)象直接協(xié)作起來形成一個(gè)系統(tǒng)刃滓。

類到對(duì)象的過程叫做實(shí)例化

對(duì)象又叫實(shí)例/instance

對(duì)象到類的過程叫做抽象

類描述的是對(duì)象的共同特征仁烹。

共同特征例如:身高特征

這個(gè)身高特征在訪問的時(shí)候,必須先創(chuàng)建對(duì)象注盈,通過對(duì)象去訪問這個(gè)特征晃危。

因?yàn)檫@個(gè)特征具體到某個(gè)對(duì)象上之后叙赚,志不同老客。有的對(duì)象身高1.80僚饭,有的對(duì)象身高2.80。

一個(gè)類主要描繪什么信息呢胧砰?

一個(gè)類主要描述的是狀態(tài)+動(dòng)作鳍鸵。

狀態(tài):名字,身高尉间,性別偿乖,年齡。

動(dòng)作:吃哲嘲,唱歌贪薪,跳舞,學(xué)習(xí)眠副。

{

屬性;//描述對(duì)象的狀態(tài)信息

方法;//描述對(duì)象的動(dòng)作信息

}

注意:狀態(tài)和動(dòng)作當(dāng)具體到某個(gè)具體的動(dòng)作之后画切,發(fā)現(xiàn)可能結(jié)果不太一樣。

對(duì)象和對(duì)象之間有共同特征囱怕,具體到對(duì)象之后由數(shù)據(jù)的差異霍弹。

類的定義://屬于引用數(shù)據(jù)類型。

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

[修飾符列表]class 類名

{

}

學(xué)生類娃弓,描述所有學(xué)生對(duì)象的共同特征典格;

public? class student

{

//學(xué)生對(duì)象有哪些狀態(tài)信息;

//屬性通常采用變量的方式來定義

//在類體當(dāng)中方法體外的變量屬于成員變量台丛,可以不賦初值耍缴,默認(rèn)賦值為0;

int 學(xué)號(hào)

string 姓名

boolean 性別

int 年齡

string 住址

}

//基本數(shù)據(jù)類型

/*

byte

short

int

long

float

double

boolean

char?

*/

//引用數(shù)據(jù)類型

/*

String

Student

User

Product

Customer

*/

寫一個(gè)類:

//學(xué)生類:

//學(xué)生類是一個(gè)模板挽霉,描述所有學(xué)生的共同特征【狀態(tài)+行為】

//當(dāng)前類只描述學(xué)生的狀態(tài)信息【屬性】

public class Student//類型名就是student

{

//類體=屬性+方法

//屬性【存儲(chǔ)數(shù)據(jù)采用變量的形式】

//每個(gè)學(xué)生的學(xué)號(hào)不同私恬,要訪問這個(gè)學(xué)號(hào)必須先創(chuàng)建對(duì)象,通過對(duì)象去訪問學(xué)號(hào)信息

//學(xué)號(hào)信息不能直接通過類去訪問炼吴,只有通過實(shí)例才能訪問具體的學(xué)號(hào)本鸣。

//對(duì)象又被稱為實(shí)例,實(shí)例變量又被稱為對(duì)象變量

//不創(chuàng)建對(duì)象硅蹦,這個(gè)no變量的內(nèi)存空間不存在的荣德,只有創(chuàng)建了對(duì)象,這個(gè)no變量?jī)?nèi)存空間才會(huì)創(chuàng)建童芹。

int no;

//姓名

string name;

? ? //姓名

int age;

//年齡

boolean sex

}

public class ootest01

{

public static void main (string[] args)

{

//通過一個(gè)類實(shí)例N個(gè)對(duì)象

//實(shí)例化對(duì)象的語法:new類名();

//new預(yù)算符的作用是創(chuàng)建對(duì)象涮瞻,在jvm堆內(nèi)存當(dāng)中開辟新的內(nèi)存空間。

//方法區(qū)內(nèi)存假褪;在類加載的時(shí)候署咽,進(jìn)行壓棧操作,class字節(jié)碼代碼片段被加載到該內(nèi)存空間當(dāng)中。(只有一個(gè)方法區(qū)內(nèi)存)

//棧內(nèi)存(存儲(chǔ)局部變量):方法代碼片段執(zhí)行的時(shí)候宁否,會(huì)給該方法分配內(nèi)存空間窒升,在棧內(nèi)存中壓棧。(每個(gè)線程就會(huì)有一個(gè)方法區(qū)內(nèi)存)

//堆內(nèi)存:new的對(duì)象在堆內(nèi)存中儲(chǔ)存慕匠。(堆內(nèi)存只有一個(gè))

//student就是一個(gè)數(shù)據(jù)類型

//s是一個(gè)變量名

//s是一個(gè)局部變量饱须,在棧內(nèi)存中存儲(chǔ)。存儲(chǔ)了一個(gè)地址台谊,指向堆內(nèi)存中的對(duì)象蓉媳,類似于指針。(這種將對(duì)象地址賦值給變量的方式稱為引用)

//new student()是一個(gè)學(xué)生對(duì)象锅铅,被保存在s中存儲(chǔ)的內(nèi)存里酪呻。在堆內(nèi)存中。

//在student對(duì)象中盐须,其所有實(shí)例變量根據(jù)數(shù)據(jù)的類型賦初始默認(rèn)值号杠。

//什么是對(duì)象?new運(yùn)算符在堆內(nèi)存中開辟出的內(nèi)存空間成為對(duì)象丰歌。

//什么是引用姨蟋?引用是一個(gè)變量,只不過這個(gè)變量保存了另一個(gè)java對(duì)象的內(nèi)存地址立帖。

//堆內(nèi)存中的數(shù)據(jù)必須通過引用進(jìn)行數(shù)據(jù)操作眼溶。不能直接操作堆內(nèi)存,因?yàn)閖ava中沒有指針晓勇。

//程序員只能通過引用去訪問崔內(nèi)存當(dāng)中對(duì)象內(nèi)部的實(shí)例變量

student s=new Student()

//訪問實(shí)例變量的語法格式堂飞;

//讀取數(shù)據(jù):引用.變量名

//修改數(shù)據(jù):引用.變量名=值

int stuNo=s.no;

string stuName=s.name;

boolean stusex=s.sex;

int stuAge=s.sex;

string stuAddr=s.addr;

//通過變量賦值

system.println("stuName"+s.name);

//直接讀取數(shù)據(jù)

s.no=1;

s.age=20;

s.name=jake;

//修改對(duì)象的數(shù)據(jù)

//總結(jié):s是一個(gè)引用绑咱,s同時(shí)是一個(gè)局部變量绰筛,student變量的數(shù)據(jù)類型。

//局部變量在棧內(nèi)存中存儲(chǔ)描融,成員變量中的實(shí)例變量在堆內(nèi)存的java對(duì)象內(nèi)存儲(chǔ)

//實(shí)例變量是一個(gè)對(duì)象一份铝噩,100個(gè)對(duì)象有100份

//類似于system.out.println(student.age);的寫法是錯(cuò)誤的因?yàn)橹荒芡ㄟ^對(duì)象才能訪問堆內(nèi)存中的實(shí)例變量數(shù)據(jù)值。

}

}

public class Address

{

//城市

string city;

//用戶名

string jiedao;

//家庭住址

}

public class user

{

//用戶編號(hào)

int no;

//用戶名

string name;

//家庭住址

Address addr;//引用另一個(gè)類作為數(shù)據(jù)類型定義對(duì)象變量窿克。

}

public class OOTest02

{

public class static void main(string[] args)

{

//創(chuàng)建uesr對(duì)象

//u是局部變量

//u是一個(gè)引用骏庸,引用是指保存指向堆內(nèi)存對(duì)象變量地址的一個(gè)變量

uesr u=new uesr();

addr=u.Address.city;//訪問一個(gè)類中另一個(gè)類屬性的,將主方法中的類中的屬性定義為另一個(gè)類的數(shù)據(jù)類型年叮。

}

}

public class OOTest02

{

public class static void main(string[] args)

{

//創(chuàng)建uesr對(duì)象

//u是局部變量

//u是一個(gè)引用具被,引用是指保存指向堆內(nèi)存對(duì)象變量地址的一個(gè)變量

uesr u=new uesr();//創(chuàng)建一個(gè)新的對(duì)象數(shù)據(jù)類型為uesr,使用類user()類只损;

Address a=new Address();//創(chuàng)建一個(gè)新的對(duì)象數(shù)據(jù)類型為Address一姿,使用類address()類;

u.addr=a;//將a對(duì)象作為u的一個(gè)屬性值賦值給addr

//也就是說a的地址可以作為給u.addr,讓其指向Address()

system.out.println(u.addr.city);

a.city="天津";

system.out.println(u.addr.city);

//輸出結(jié)果是null和天津叮叹;

//因?yàn)閡.addr.city是將city的地址存儲(chǔ)在addr中艾栋,u.addr的地址有存儲(chǔ)在a中,此時(shí)addr和a都指向city衬横,因此當(dāng)a.city的值變動(dòng)時(shí)

}

}

//結(jié)婚

public class husband

{

int name;

int w

}

public class husband

{

int name;

int h

}

public class OOTest

{

public static void main(string[]args)

{

//創(chuàng)建一個(gè)丈夫?qū)ο?/p>

Husband huangxiaoming=new husband();

huangxiaoming.name="黃曉明";

//創(chuàng)建一個(gè)妻子對(duì)象

Wife baby=new Wife();

baby.name="baby"

//結(jié)婚【能通過丈夫找到妻子裹粤,通過妻子也可以找到丈夫】

huangxiaoming.w=baby;//黃曉明的妻子是baby這個(gè)對(duì)象

baby.h=huangXiaoMing;

//的道義上“黃曉明”的妻子的名字

system.out.println(huangxiaoming.name+"的妻子名字叫"+baby.name);//沒有說明baby這個(gè)名字是黃曉明的妻子的名字

system.out.println(huangxiaoming.name+"的妻子名字叫"+huangxiaoming.w.name);//可以說明baby這個(gè)名字是黃曉明的妻子的名字

}

}

總結(jié):1终蒂、jvm主要包括三塊內(nèi)存空間蜂林;棧內(nèi)存,堆內(nèi)存拇泣,方法區(qū)內(nèi)存

2噪叙、堆內(nèi)存和方法區(qū)內(nèi)存各一個(gè),一個(gè)線程一個(gè)棧內(nèi)存

3霉翔、方法調(diào)用時(shí)睁蕾,該方法所需要的內(nèi)存空間中分配,成為壓棧债朵,方法執(zhí)行結(jié)束之后子眶,該方法所屬的內(nèi)存空間釋放,成為彈棧序芦。

4臭杰、棧中主要存儲(chǔ)的是方法體當(dāng)中的局部變量

5、方法的代碼片段以及整個(gè)類的代碼片段都被存儲(chǔ)到方法區(qū)內(nèi)存當(dāng)中谚中,在類加載的時(shí)候這些代碼片段會(huì)被載入

6渴杆、在程序執(zhí)行過程中使用new運(yùn)算符創(chuàng)建的java對(duì)象,存儲(chǔ)在堆內(nèi)存當(dāng)中宪塔,對(duì)象內(nèi)部有實(shí)例變量磁奖,所以實(shí)例變量存儲(chǔ)在堆內(nèi)存當(dāng)中。

7某筐、變量分類:

局部變量【方法體中聲明】

成員變量【方法體外聲明】

實(shí)例變量【前邊修飾符沒有static】

靜態(tài)變量【前邊修飾符中有static】

8比搭、靜態(tài)變量存儲(chǔ)在方法區(qū)內(nèi)存當(dāng)中【先背會(huì)】

9、三個(gè)內(nèi)存當(dāng)中變化最頻繁的是棧內(nèi)存南誊,最先有數(shù)據(jù)的是方法區(qū)內(nèi)存敢辩,垃圾回收器主要針對(duì)的是堆內(nèi)存

10、垃圾回收器【自動(dòng)垃圾回收機(jī)制弟疆,GC機(jī)制】戚长,什么時(shí)候會(huì)考慮將某個(gè)java對(duì)象的內(nèi)存回收呢?

當(dāng)堆內(nèi)存當(dāng)中的java對(duì)象成為垃圾數(shù)據(jù)的時(shí)候怠苔,會(huì)被垃圾回收器回收同廉。

什么時(shí)候堆內(nèi)存中的java對(duì)象會(huì)變成垃圾呢?

沒有更多的引用指向它的時(shí)候

這個(gè)對(duì)象無法被訪問,因?yàn)樵L問對(duì)象只能通過引用的方式訪問迫肖。

public class Customer

{

int id;

}

public class OOTest

{

public static void main(string[]args)

{

Customer c=new customer();

System.out.println(c.id)

c=null;

//以下程序編譯可以通過锅劝,因?yàn)榉险Z法

//運(yùn)行出現(xiàn)空指針異常。

//空引用訪問“實(shí)例”相關(guān)數(shù)據(jù)一定會(huì)出現(xiàn)空指針異常蟆湖,因?yàn)榇藭r(shí)引用中的實(shí)例的地址被清空故爵。

//控制異常的名字是java.lang.NullPointException

}

}

public class Student

{

int number;

String name;

Computer diannao;

}

public class Computer

{

String PinPai;

String xinghao;

String color;

}

public class OOTest//類名必須大寫的,所以使用類名關(guān)鍵字必須首字母大寫隅津,一個(gè)類就是一個(gè)可用數(shù)據(jù)類型诬垂。

{

public static void main(string[] args)

{

Student S1=new Student();

S1.name="小明";

Student S2=new Student();

Student S3=new Student();

Computer c1=new Computer();

Computer c2=new Computer();

c2.PinPai="聯(lián)想";

Computer c3=new Computer();

S1.diannao=c2

System.out.println(S1.name"的電腦"S1.diannao)

}

}

關(guān)聯(lián)關(guān)系:a含有b,a的類中含有b

public class OOTEST

{

Student b=new Student();

}

繼承關(guān)系:a是b,

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末伦仍,一起剝皮案震驚了整個(gè)濱河市结窘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌充蓝,老刑警劉巖隧枫,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谓苟,居然都是意外死亡官脓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門涝焙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卑笨,“玉大人,你說我怎么就攤上這事纱皆⊥逯海” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵派草,是天一觀的道長(zhǎng)搀缠。 經(jīng)常有香客問我,道長(zhǎng)近迁,這世上最難降的妖魔是什么艺普? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮鉴竭,結(jié)果婚禮上歧譬,老公的妹妹穿的比我還像新娘。我一直安慰自己搏存,他們只是感情好瑰步,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著璧眠,像睡著了一般缩焦。 火紅的嫁衣襯著肌膚如雪读虏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天袁滥,我揣著相機(jī)與錄音盖桥,去河邊找鬼。 笑死题翻,一個(gè)胖子當(dāng)著我的面吹牛揩徊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嵌赠,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼塑荒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了猾普?” 一聲冷哼從身側(cè)響起袜炕,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤本谜,失蹤者是張志新(化名)和其女友劉穎初家,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乌助,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溜在,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了他托。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掖肋。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赏参,靈堂內(nèi)的尸體忽然破棺而出志笼,到底是詐尸還是另有隱情,我是刑警寧澤把篓,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布纫溃,位于F島的核電站,受9級(jí)特大地震影響韧掩,放射性物質(zhì)發(fā)生泄漏紊浩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一疗锐、第九天 我趴在偏房一處隱蔽的房頂上張望坊谁。 院中可真熱鬧,春花似錦滑臊、人聲如沸口芍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鬓椭。三九已至虹钮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膘融,已是汗流浹背芙粱。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氧映,地道東北人春畔。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像岛都,于是被迫代替她去往敵國(guó)和親律姨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容