今天講解目錄來了: 面向?qū)ο笏枷耄?/strong> 面向過程(PO):一種較早的編程思想,顧名思義該思想是站在過程的角度思考問題,強(qiáng)調(diào)的就是功能行為,功能的執(zhí)行過程,即先干啥,后干啥。而每一個(gè)功能我們都使用函數(shù)(類似于方法)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候依次調(diào)用函數(shù)就可以了。 說人話:提倡和注重的:每一個(gè)功能都使用函數(shù)來完成,在使用某一個(gè)功能的時(shí)候,就挨著挨著調(diào)用函數(shù)即可. 案例:設(shè)計(jì)購(gòu)物、做飯、吃飯,洗碗、以及寫代碼的程序。 面向過程最大的問題在于隨著系統(tǒng)的膨脹,面向過程將無法應(yīng)付,最終導(dǎo)致系統(tǒng)的崩潰。為了解決這一種軟件危機(jī),我們提出面向?qū)ο笏枷搿?/p> 面向?qū)ο?OO):一種基于面向過程的新的編程思想,顧名思義該思想是站在對(duì)象的角度思考問題,我們把多個(gè)功能合理的放到不同對(duì)象里,強(qiáng)調(diào)的是具備某些功能的對(duì)象。 具備某種功能的實(shí)體,稱為對(duì)象. 面向?qū)ο蟮膬?yōu)勢(shì)和特點(diǎn): --------------------------------------------------------- 面向?qū)ο蟾臃衔覀兂R?guī)的思維方式,穩(wěn)定性好,可重用性強(qiáng),易于開發(fā)大型軟件產(chǎn)品,有良好的可維護(hù)性。 當(dāng)然上述例子僅僅只是說明了面向?qū)ο蟮囊粋€(gè)特征——封裝。除此之外面向?qū)ο筮€有兩大特征,我們?cè)诰唧w講解到的時(shí)候再做分析。 三大特征:
封裝是指將對(duì)象的實(shí)現(xiàn)細(xì)節(jié)隱藏起來,然后通過公共的方法來向外暴露該對(duì)象的功能。 繼承是面向?qū)ο髮?shí)現(xiàn)軟件復(fù)用的重要手段,當(dāng)子類繼承父類后,子類是一種特殊的父類,能直接或間接獲得父類里的成員。 多態(tài)是可以直接把子類對(duì)象賦給父類變量,但是運(yùn)行時(shí)依然表現(xiàn)出子類的行為特征,這意味著同一類型的對(duì)象在運(yùn)行時(shí)可能表現(xiàn)出不同的行為特征。 注意: 千萬不要誤解為面向?qū)ο笠欢ň蛢?yōu)于面向過程的設(shè)計(jì). 面向?qū)ο笫腔诿嫦蜻^程的,永遠(yuǎn)不可能取代面向過程. 對(duì)象和類的關(guān)系: 你在街上看到一個(gè)美女,就可以把這個(gè)美女看成一個(gè)對(duì)象,那么該對(duì)象有兩方面的定義:狀態(tài)和行為。 美女有狀態(tài),如身高,年齡,皮膚顏色等等;美女還有行為,如走路,說話,拋媚眼等等。 作為基本定義,對(duì)象(object)可以定義成包含數(shù)據(jù)(狀態(tài))和行為的一個(gè)實(shí)體,對(duì)象也稱為實(shí)例(instance)。 ----------------------------------------------------------------------------------------------------- 對(duì)象: 對(duì)象是人們要進(jìn)行研究任何事物,一切事物都可以認(rèn)為是對(duì)象。 對(duì)象具有狀態(tài)和行為: 對(duì)象具有狀態(tài),比如姓名,年齡,性別等。 對(duì)象還有行為,比如吃飯,睡覺,寫代碼等。 ----------------------------------------------------------------------------------------------------- 類(類型): 具有相同特性(數(shù)據(jù)元素)和行為(功能)的多個(gè)對(duì)象的抽象就是類。因此,對(duì)象的抽象是類,類的具體化就是對(duì)象,也可以說類的實(shí)例是對(duì)象,類實(shí)際上就是一種數(shù)據(jù)類型。 類具有特性,對(duì)象的狀態(tài),用成員變量來描述。 類具有功能,對(duì)象的行為,用方法來描述。 ----------------------------------------------------------------------------------------------------- 什么是類:類是對(duì)象的類型/模板。創(chuàng)建一個(gè)對(duì)象,就是使用一個(gè)類作為構(gòu)建該對(duì)象的基礎(chǔ)。 ----------------------------------------------------------------------------------------------------- 在編程的世界:是先有類,再有對(duì)象,對(duì)象是根據(jù)類創(chuàng)建出來的. 類的定義 案例:分析出對(duì)象和類,以及對(duì)象具備的狀態(tài)和行為。 --------------------------------------------------------------- 春哥,現(xiàn)年31歲,身高175cm,體重55kg,會(huì)跳舞,會(huì)唱歌; 鳳姐,現(xiàn)年30歲,身高145cm,體重48kg,會(huì)跳舞,會(huì)唱歌; --------------------------------------------------------------- 名詞解析法: 名詞:對(duì)象/對(duì)象的狀態(tài) 動(dòng)詞:對(duì)象的功能/行為 --------------------------------------------------------------- 人類: 狀態(tài): 名字 年齡 身高 體重 行為: 唱歌 跳舞 --------------------------------------------------------------- 在程序中,對(duì)象的狀態(tài)使用成員變量表示,對(duì)象的行為使用方法表示.. 類的定義: class 類名 { 0 ~ N個(gè)成員變量(字段(Field)); 0 ~ N個(gè)方法 } 注意: 1:若類使用public修飾,則當(dāng)前所在的文件名必須和類名相同. 在以后的開發(fā)中,都是一個(gè)文件一個(gè)類,都建議使用public修飾. 2:類型必須符合標(biāo)識(shí)符的命名規(guī)范(使用名詞,首字母大寫.). 對(duì)象基本操作: 對(duì)象的創(chuàng)建和使用: 在程序中,必須先有類,再有對(duì)象(先得有模板,再有根據(jù)模板制造出來的個(gè)體). 1):創(chuàng)建對(duì)象 :類 對(duì)象名 = new 類名(); 2):對(duì)象調(diào)用方法:對(duì)象名.方法名([實(shí)參]); 3):對(duì)象操作字段 賦值: 對(duì)象名.變量 = 值; 取值: 變量 = 對(duì)象名.變量; 4):打印對(duì)象: 默認(rèn)輸出:Servant@659e0bfd,對(duì)象的類型@十六進(jìn)制的hashCode, 和數(shù)組一樣,看不到對(duì)象中的數(shù)據(jù),期待我們講解Object類. 5):比較對(duì)象: 每次new,都會(huì)在堆內(nèi)存開辟新的內(nèi)存空間. 而"==",在比較引用類型的時(shí)候,比較的是引用的內(nèi)存地址值. 6):對(duì)象的生命周期. 從使用new在堆中開辟內(nèi)存開始,到垃圾回收期回收之間. 垃圾:內(nèi)存中的某一塊空間沒有被某一個(gè)變量所引用. 垃圾產(chǎn)生時(shí),不一定運(yùn)行GC,GC是自行調(diào)度,程序員控制不了. 7):匿名對(duì)象. 沒有名字的對(duì)象,就是創(chuàng)建對(duì)象時(shí),沒有賦給一個(gè)變量. new Servant();創(chuàng)建一個(gè)匿名對(duì)象 只在堆中開辟內(nèi)存空間,不會(huì)被棧中的變量所引用. 特點(diǎn):匿名對(duì)象只能使用一次,就是剛剛創(chuàng)建的這一次. 對(duì)象的實(shí)例化過程: 構(gòu)造器: 我們?cè)趧?chuàng)建Student對(duì)象,代碼如下: Student s1 = new Student(); 其實(shí)我們?cè)趧?chuàng)建對(duì)象的時(shí)候,都是調(diào)用構(gòu)造方法,構(gòu)造函數(shù)/構(gòu)造器/構(gòu)造子. -------------------------- 構(gòu)造器:主要用于創(chuàng)建對(duì)象并返回對(duì)象和初始化對(duì)象數(shù)據(jù). -------------------------- 構(gòu)造器的特點(diǎn): 類都有一個(gè)默認(rèn)構(gòu)造器,當(dāng)不顯示的定義構(gòu)造器的時(shí)候,編譯器會(huì)在編譯的時(shí)候,提供一個(gè)默認(rèn)構(gòu)造器. 1):構(gòu)造器的名字必須和當(dāng)前所在類的類名相同. 2):不需要定義返回值類型,更加不能使用void作為返回.構(gòu)造器的目的在于創(chuàng)建和返回當(dāng)前類的對(duì)象,即使要編寫返回類型,也應(yīng)該是當(dāng)前類名,如:Student Student(){},既然和當(dāng)前類名相同,就規(guī)定統(tǒng)統(tǒng)省略. 3):構(gòu)造器中不需要使用return來返回當(dāng)前構(gòu)造的對(duì)象. ----------------------------- 1):無參數(shù),無方法體. 2):構(gòu)造器的訪問修飾符和當(dāng)前類的修飾符相同(是否有public). 3):一旦在類中顯示地提供了構(gòu)造器,則默認(rèn)的構(gòu)造器就不再提供了. 推論: 一個(gè)類至少有一個(gè)構(gòu)造器(即使沒有自定義,編譯器也會(huì)創(chuàng)建一個(gè)默認(rèn)的). ----------------------------------------- public class Student{ 默認(rèn)的構(gòu)造器 public Student(){} } --------------- class Student{ 默認(rèn)的構(gòu)造器 Student(){} } ------------------------------------------------------- 方法的重載:在同一個(gè)類中,方法同名,但是參數(shù)列表不同. 解決了相同的功能方法,因?yàn)閰?shù)列表不同,而帶來參數(shù)名不同的問題. 構(gòu)造器重載: 不同類的構(gòu)造器是不相同的. 對(duì)于構(gòu)造器重載來說,肯定是在同一個(gè)類中,并且構(gòu)造器都是和類名相同. 所以在同一個(gè)類中的多個(gè)構(gòu)造器就必須參數(shù)列表不同(參數(shù)類型,參數(shù)個(gè)數(shù),參數(shù)順序). ------------------------------------------------------- Student(){} Student(String name){} Student(String name,int age){} 上述的構(gòu)造器就是重載關(guān)系. ------------------------------------------------------- static修飾符: 類是用來描述多個(gè)對(duì)象共同的狀態(tài)和行為的,就拿人的姓名. 看右圖,春哥和鳳姐這個(gè)兩個(gè)對(duì)象,都有擁有姓名,年齡身高和體重等狀態(tài),但是不同對(duì)象的狀態(tài)值卻不一樣.此時(shí)發(fā)現(xiàn),我們所描述的信息是針對(duì)于某一個(gè)具體對(duì)象的,對(duì)象不同,那么名字是可能不一樣的. --------------------------------------------------------------- 現(xiàn)在,我想描述一類事物的狀態(tài)和行為,比如:人類,有總?cè)藬?shù)的狀態(tài),有毀滅的行為. 可能有人認(rèn)為,毀滅是一個(gè)行為,那么可以在Person類中,定義一個(gè)方法(destory),若想毀滅人類,則調(diào)用該方法即可.但是新的問題又來了?到底誰來調(diào)用destory方法? 春哥.destory(); 鳳姐.destory(); 都不對(duì)的,因?yàn)樗麄冎荒鼙硎咀约?不能表示人類. ---------------------------------------------------------------- 我們平時(shí)在類中定義的成員變量和方法,都是對(duì)象的狀態(tài)和行為. 那如何表示,一類事物的狀態(tài)和行為呢?不是某一個(gè)個(gè)體(對(duì)象)的. 此時(shí),為了解決該問題,咱們得學(xué)習(xí)一個(gè)修飾符:static. ----------------------------------------------------------------- static可以修飾成員變量(字段),可以修飾方法等,就表明該字段或該方法屬于類,而不屬于某一個(gè)對(duì)象. ----------------------------------------------------------------- 類成員(static修飾成員)的特點(diǎn): 1):隨著類被加載進(jìn)JVM而同時(shí)也最初始化和在內(nèi)存中分配空間. 2):優(yōu)先于對(duì)象存在.(對(duì)象是通過new出來的.) 3):被該類的所有對(duì)象所共享. 該狀態(tài)/行為是整個(gè)人類的,那么每一個(gè)人都是擁有該狀態(tài)/行為的. 4):直接使用類名調(diào)用即可. 人類毀滅: Person.destory(); 類成員和實(shí)例成員的訪問: ------------------------------------------------ 類 成員:使用static修飾的成員變量/方法,屬于類,所以可以直接使用類名訪問. 實(shí)例成員:沒有使用static修飾的成員變量/方法,屬于對(duì)象.必須使用對(duì)象來訪問. ---------------------------------------------------------------------------------- 訪問規(guī)則: 1):靜態(tài)方法只能訪問靜態(tài)的成員變量/方法,不能訪問非靜態(tài)的成員變量/方法(屬于對(duì)象). 靜態(tài)成員優(yōu)先于對(duì)象存在. 2):非靜態(tài)方法可以訪問非靜態(tài)成員變量/方法,也可以訪問靜態(tài)的成員變量/方法. 因?yàn)榈讓邮褂脤?duì)象訪問的. 3):對(duì)象可以訪問靜態(tài)成員,但是不推薦,因?yàn)榈讓右廊皇褂妙惷谡{(diào)用. 4):類可以訪問靜態(tài)成員,類不能訪問非靜態(tài)成員(成員變量/方法). ----------------------------------------------------------------------------------- 一般的,在開發(fā)中類成員如何使用: 一般的,在開發(fā)中工具類的工具方法都使用static修飾,如此的好處,直接使用工具類名.方法就可以調(diào)用,使用更加簡(jiǎn)單. 數(shù)組的工具類:java.util.Arrays中的工具方法. 一般的,若靜態(tài)方法需要訪問一個(gè)成員變量,此時(shí)才把成員變量使用static修飾. 學(xué)習(xí)大綱: 學(xué)習(xí)Java的同學(xué)注意了?。?! 學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話,歡迎加入Java學(xué)習(xí)交流群,群號(hào)碼:559743457【長(zhǎng)按復(fù)制】 我們一起學(xué)Java! |
|