【云駐共創】Java面向對象編程初識與初知

      網友投稿 739 2025-03-31

      1. Java面向對象

      1.1 面向過程

      面向過程編程是分析出解決問題的步驟,然后使用函數把這些步驟一步步實現,重心放在完成的每個步驟上。

      是按照一定順序進行執行,其程序結構也是按照功能劃分為若干個基本模塊(步驟),在每個功能上都是相對獨立的,而每個模塊實現的具體方法則是使用子程序來進行實現的,如下圖示例:

      廚師炒菜==》檢查食材(檢查有沒有十八個頭的鮑魚、檢查有沒有極品刺身。。。)==》沒有就再去市場買(買鮑魚、買澳龍。。。)==》洗菜(洗青菜、洗蘿卜。。。)==》開火(打開燃氣閥、扭動點火按鈕。。。)==》炒菜(大火爆炒、小火煸炒。。。)==》出鍋裝盤(小炒裝小盤、燉菜裝盆。。。);

      1.2 面向對象

      構成問題事物分解成各個對象,描述某個事物在整個解決問題的步驟中的行為。

      是把數據以及對數據的操作放在一起,作為一個相互依存的整體,程序流程實現由使用者在使用的過程中進行具體定義,如下圖示例:

      廚師炒菜==》將這件事分為三個方面去做(廚師、采購員、廚具)

      廚師包含檢查食材和炒菜的責任;

      采購員包含選菜和買菜的責任;

      使用廚具來完成洗菜、切菜和備菜的任務;

      這樣各司其責,互相通過信息來進行溝通交互,每個方面可以在完成的時候自行定義各自的具體實現;

      1.3 面向過程和面向對象的區別

      面向過程是步驟,是按部就班的解決問題;面向對象關注的是解決問題所關注的對象;面向過程是自己辦事,面向對象是托人辦事。

      1.4 類和對象

      1.4.1 類的定義

      類是對象抽象產生出來的模板,如果對同一類對象抽象出其中的共性就形成了類,用于描述一類對象的行為和狀態。

      1.4.2 對象的定義

      對象是具體的,是通過這一系列抽象出來的類模板,進行自定義的填充而形成的實例。

      例1:人具有身高,體重,年齡,血型,性別等一些特征,人會勞動,會行走,會吃飯等這些方法,人僅僅是一個抽象的概念,它是不存在的實體,但是所有具備人這個群體的屬性與方法的對象都叫做人,其中人就是抽象出來的類模板,而具體的某人(張三、李四、小助手。。。)就是實際存在的實體即為對象,因此我們可以總結出來每個人(具體的人,張三、李四、小助手。。。)都是人這個群體(類)的一個對象。

      1.4.3 Java的類和對象的創建

      對象的創建過程,必須先有類,然后通過類創建對象,格式是:類名 對象 = new 類名();,例如:Person person = new Person();。

      如下圖是先創建了一個Person類,再在main函數中(主函數)進行new操作,即創建對象(對象都有了,那還不想干啥干啥嘛~),給她起了名字、給她設置個身高、設置個年齡,這些都是對象的屬性而設定具體值的過程是給對象的屬性進行賦值。

      1.4.4 new關鍵字

      從上面的例子我們可以知道new關鍵字,可以通過類來創建對象,表示具體的實例化對象以及申請內存空間,下圖為創建對象的過程與內存空間之間的表現:

      首先是person在棧內存中被聲明,然后通過new關鍵字,在堆內存申請開辟內存空間,并且實例化賦初始值(age=0,name=null),最后給對象的屬性賦值(person.name=“小張”;person.age = 20;)

      如果我們創建了多個對象,在內存中是如何表現的呢?只要通過new關鍵字創建對象了,就會在堆內存開辟一個新的內存空間,因此他們之間的值是相互隔離的,互相不影響的,如下圖所示:

      1.5 實例變量和靜態變量

      1.5.1 實例變量

      (1) 聲明在一個類中,但在方法、構造方法和語句塊之外。

      (2) 無static關鍵詞修飾;

      (3) 數值類型的默認值為0;

      (4) 布爾類型的默認值false;

      (5) 引用類型的默認值為null;

      (6) 實例變量屬于該類的對象,必須產生該類對象,才能進行調用;

      其中age、name、flag就是實例變量。

      1.5.2 靜態變量

      獨立于方法之外的變量,用static關鍵字修飾,也叫類變量。

      注:方法中的變量叫做局部變量不能用static修飾;

      1.5.3 靜態變量和靜態變量何時設置

      屬于所有對象所共享的公共屬性的就設置為靜態變量,屬于具體對象的個性化的屬性就設置為實例變量。

      1.6 匿名構造塊和構造函數

      1.6.1 構造函數

      Java構造函數也叫構造方法是Java中特殊的函數,沒有返回值并且函數名和類名保持一致。new對象產生后,就調用了對象的屬性和方法,一般來初始化成員屬性和成員方法。

      1.6.1.1構造函數的格式

      (1)修飾符 類名(參數列表){}

      (2)類名 (參數列表){}

      其中參數列表可有可無,無參數列表的構造函數為默認構造函數,無論有參還是無參的構造函數都不能有返回值,但是可以有return;關鍵字(后面不能跟具體的值);

      1.6.1.2構造函數注意事項

      (1)構造函數不能手動調用,是對象被創建的時候JVM調用的;

      (2)如果一個類沒有構造函數,JVM在編譯的時候回默認的添加一個無參的構造函數;

      (3)如果定義了構造函數,JVM不會再創建無參構造方法;

      (4)創建對象的時候,所需要的參數需要與構造函數中的參數一一對應,構造函數里有幾個參數就要提供幾個參數;

      (5)構造函數可以調用構造函數;(金糊涂銀糊涂我家有個老老糊涂。。。O(∩_∩)O哈哈~)

      1.6.2 匿名構造塊

      構造代碼塊的格式:{具體代碼}

      代碼塊的作用是用于對象統一初始化;

      對象創造(調用構造函數)之前都會執行這個代碼塊;

      1.6.3 構造函數重載

      構造函數重載是多態的一個典型的特例,其中類中有多個構造函數并且參數列表不同,重載的構造函數用來表達對象的多種初始化行為,格式如下圖:

      1.7 方法的定義和調用

      1.7.1 方法的定義

      方法是類或對象的行為特征的抽象;

      Java中方法不能單獨存在,必須存在在類中(有了人,才能有人吃飯、睡覺、發博客這些動作);

      語法格式:

      權限修飾符 返回值類型 方法名 (參數列表){

      //方法體

      【云駐共創】Java面向對象編程初識與初知

      //返回值

      }

      1.7.2 方法定義的注意事項

      (1)方法定義的先后順序是不影響調用的;

      (2)方法定義不能產生嵌套包含關系,即在方法的內部不能再定義別的方法;

      (3)方法定義中的返回值與傳遞的參數類型均為Java中定義的數據類型;

      (4)在方法中可以進行返回數據的處理,格式:

      return:返回數據類型(必須和方法聲明的類型保持一致);

      void:不返回數據類型;

      1.7.3 方法調用

      (1)方法定義后,不會自動執行,如果需要執行,必須進行調用(大魚大肉就在那里,不做不叫外賣,咋能進肚子嘛~);

      (2)本類的方法調用格式是:方法名(參數列表);

      (3)外部類的方法調用格式是:調用類的對象.方法名(參數列表);

      1.7.4 構造函數和普通方法(函數)的區別

      構造函數是初始化對象的,普通函數是描述事物的公共行為的。

      1.8 方法的重載和編譯時多態

      1.8.1 方法的重載

      一個類中如果有多個方法名稱相同(與修飾符無關),并且參數列表不同,返回值類型不同,這類形式稱為方法的重載,即同一個方法不同的使用形式得到不同的實現結果(一蝦多吃的既視感),如下圖示例:

      1.8.2 編譯時多態

      方法重載也叫編譯時多態。

      為什么這樣叫呢?因為方法重載是早期綁定完成的,如果去調用一個重載的方法,那么在編譯時就會根據參數列表來確定具體使用的方法。

      而早期綁定就是指被調用的目標方法如果在編譯期(編譯成.class文件)可以確定,且運行期(運行編譯后的.class文件)保持不變時,即可將這個方法與所屬的類型進行綁定,即早期綁定。

      1.9 面向對象的封裝

      1.9.1 封裝

      封裝是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。

      1.9.1.1封裝的原則

      將不需要對外提供的內容都隱藏起來,把屬性都隱藏,提供公共方法對其訪問。

      1.9.1.2封裝的好處

      提高數據訪問的安全性,隱藏了實現細節;

      從數據安全角度考慮沒有封裝,在外部類中就可以直接訪問,并且修改數據,造成數據的不安全性;

      1.9.1.3封裝的實現

      可以對需要隱藏的屬性增加private修飾詞(變成私有的),外部不能直接修改,然后提供公共的修改方法(當然在里面會設置自定義的條件),外部類通過這個公共方法,在滿足條件的情況下才會修改私有的屬性,如下圖示例:

      1.9.1.4封裝的機制

      即該露的露,該藏的藏。

      程序設定追求的是“高內聚,低耦合”(各干各的,如果你想參合,我給你提供工具啊~);

      高內聚就是類的內部數據操作細節自己完成,不允許外部干涉(能夠完美形成一個整體);

      低耦合就是僅暴露方法給外部使用(互不干擾);

      注:應禁止直接訪問一個對象中數據的實際表示,而是通過操作方法來訪問(數據的隱藏)。

      1.10 this關鍵字

      this關鍵字代表當前對象的一個引用,而所謂當前對象,指的是調用類中的方法或屬性的對象。

      1.10.1 this訪問本類屬性

      this只能在方法內使用,表示對“調用方法的對象”的引用;

      this.屬性名,表示本對象自己的屬性。

      下面示例,即表示為p1.name = “小張”;p1.age=20;p2.name = “小李”;p2.age=22;可以看出this指代的是調用各自有參構造方法的對象的引用。

      1.10.2 this調用方法

      this(參數列表)表示調用本類的構造函數,參數列表為空時表示調用無參構造函數,并且this關鍵字必須位于構造函數的第一行;

      this.方法名(參數列表)表示調用當前對象自己的方法。

      1.10.3 this使用注意事項

      this不能用于靜態方法和靜態快,由于main方法也是靜態的,所以this也不能用于main方法,只能在實例方法中使用。

      1.11 static關鍵字

      1.11.1 靜態變量

      由static關鍵詞修飾的變量也稱為靜態變量或者類變量(從名字可以看出靜態變量是屬于類的),被所有的對象所共享,在內存中只有一個副本,當且僅當類初次加載時會被初始化(意味著最先被初始化),通過類名就可以直接調用(建議使用),也可以通過對象名.靜態變量名進行調用。

      1.11.2 靜態方法

      由static關鍵詞修飾的方法叫做靜態方法也叫做類方法。需要注意如下幾點:

      (1)在靜態方法中不能直接訪問類的非靜態成員變量和非靜態成員方法,即不能直接去訪問實例方法和實例變量,只能通過創建類的對象來進行訪問;

      (2)靜態方法中不能使用this關鍵字;

      (3)通過類名可以直接調用靜態方法(建議使用),也可以通過對象名.靜態方法名進行調用。

      1.11.3 靜態塊

      靜態代碼塊在類加載時執行并且只執行一次,在類中可以有多個靜態代碼塊(按照順序執行),并且靜態代碼塊中不能有this關鍵字。

      1.11.4 靜態塊、匿名構造塊、構造函數的執行順序

      他們的執行順序為:靜態代碼塊最先執行并且無論創建多少次該類對象都只調用一次,接著調用匿名構造塊,最后調用構造方法,并且每次創建對象的時候都會調用一次匿名構造塊和構造方法。

      1.12 類的生命周期和設計

      1.12.1 java的一個類的生命周期

      (1)加載:是將源文件編譯成.class文件,JVM將.class文件中的二進制數據讀入內存,放于方法區,并且在堆中創建class對象;(2)驗證:驗證字節碼格式是否正確、變量和方法是否有重復、繼承和實現是否符合標準;

      (3)準備:為類的靜態變量分配內存并設置初始值;

      (4)解析:接口名、字段名、方法名解析成內存地址方便調用;

      (5)初始化:執行靜態變量初始化和靜態代碼塊并初始化自定義的變量值;

      (6)使用:分為直接引用(會觸發類的初始化,比如new一個實例對象、訪問和設置靜態變量、訪問類的靜態方法、反射、啟動類的入口main方法)和間接引用(引用常量、定義數組);

      (7)卸載:java中不存在該類的任何實例,已經被GC回收,無法在任何地方通過反射來訪問任何方法;

      1.12.2 類的設計和分析

      下面是幾個類設計的實踐案例:

      學生類設計和實現:

      教師類設計和實現:

      課程類設計和實現:

      成績類設計和實現:

      1.13 java的方法參數和值傳遞

      1.13.1 java的方法的參數類型

      方法參數的類型分為基本類型和引用類型。

      基本數據類型,傳過來的是這個參數的一個副本,對原來的值是沒有影響的;

      引用類型傳過來的是這個引用參數的副本,這個副本存放的是參數的地址。

      下圖中為可變參數列表,其中int...a為可以傳0個參數,也可以傳多個參數。

      注:可變參數列表只能有一個,如果有多個參數時只能放在末尾。

      1.13.2 Java參數傳遞基本數據類型和引用數據類型的區別

      Java 面向對象編程

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:wps表格怎樣將數值轉為文本格式(wps表格如何轉化為文本)
      下一篇:WPS使用技巧四則(wps的操作方法
      相關文章
      亚洲人成7777影视在线观看| 国产AV旡码专区亚洲AV苍井空| 亚洲精品午夜视频| 国产精品亚洲综合| 亚洲av无码专区首页| 中文字幕 亚洲 有码 在线| 亚洲精品亚洲人成在线麻豆| 91亚洲一区二区在线观看不卡| 亚洲视频在线免费观看| 在线观看亚洲人成网站| 亚洲AV无码乱码在线观看裸奔 | 日本亚洲色大成网站www久久| 亚洲人成高清在线播放| 亚洲国产成人精品无码区在线秒播| 亚洲精品国产成人| 亚洲一欧洲中文字幕在线| 亚洲av极品无码专区在线观看| 亚洲人成电影在线观看青青| 成人亚洲国产va天堂| 亚洲成av人无码亚洲成av人| jzzijzzij在线观看亚洲熟妇| 亚洲A丁香五香天堂网| 久久久久国产成人精品亚洲午夜| 亚洲日韩乱码中文无码蜜桃臀网站| 亚洲男人的天堂www| 亚洲男人第一av网站| 亚洲日韩乱码中文无码蜜桃| 亚洲人配人种jizz| 亚洲国产一区二区三区在线观看| 国产成人精品亚洲| 亚洲精品乱码久久久久久不卡| 91麻豆精品国产自产在线观看亚洲 | 亚洲欧洲精品在线| 一本色道久久88—综合亚洲精品| 亚洲熟妇成人精品一区| 亚洲高清免费视频| 国产精品亚洲片在线| 中文字幕亚洲精品资源网| 亚洲一区在线观看视频| 亚洲国产精品无码中文lv| 九九精品国产亚洲AV日韩|