1. 程式人生 > >Java基礎總結--面向對象1

Java基礎總結--面向對象1

維護 [] 棧內存 多個 事物 生成 單純 其他 基礎總結

---面向對象的概念---
1.面向過程與面向對象的區別
面向過程:是一種思維習慣,解決一個問題的時候靠的是一個個方法調用--核心是動作
面向對象:是一種更接近生活中解決問題的思維習慣,解決特定的問題靠對象完成--核心是對象
eg:對於把大象裝進冰箱分析
面向過程思維習慣
打開冰箱--裝入冰箱--關閉冰箱(由3個動作實現)
面向對象的思維習慣
分析問題涉及的對象:大象 冰箱(打開 存儲 關閉)
冰箱打開--冰箱存儲大象--冰箱關閉
2.面向對象的特點
封裝數據和方法在對象中
使得復雜問題簡單化(面向多個函數--面向一個對象)
角色的轉換:自己實現功能--調用對象的功能
註意:以後再給別人解釋的時候先說特點,然後進行舉例說明
3.面向對象解決問題的一般思路
--分析問題域涉及到哪些對象---名詞一般就是可以是對象
註意:實體-現實存在的任何東西,具有屬性和行為兩方面內容
--分析需要的功能涉及到兩方面
* 該功能已經被封裝在對象中,直接調用對象功能
* 該功能沒有被對象封裝過,就自己創建對象封裝該功能
註意:功能應該封裝在合適的對象中(原則:放在最熟悉該功能的對象)
--不斷維護對象之間的關系

----類與對象之間的關系----
eg;現實生活中生產汽車
某型號汽車圖紙--生成具體的該型號的汽車
圖紙--相當於是對汽車這類事物的描述
具體汽車--是事物描述的一個具體的產物
--Java中的類:用Java語言描述對某類事物的描述--通過類來體現
(屬性-數值--成員變量,行為-功能--成員方法) 成員定義在類中
定義類本質就是--定義類
成員變量與局部變量區別
1.成員變量定義在類中,類中有效。局部變量定義在所屬方法中,在方法中有效。
2.成員存在堆中對象中,局部變量存在棧中的方法中
3.成員變量隨著對象存在,局部隨著所屬區域的存在而存在
4.成員變量默認初始化,局部變量沒默認初始化值
註意:初始化是給對象的屬性進行初始化
成員變量與局部變量重名:先在棧中找--再到堆中找
--Java中的對象:是某類的具體實例,通過new來創建對象
Car c = new Car();//創建一個對象
創建對象的過程:1.產出對象的引用 2.堆中創建對象(初始化-構造方法進棧) 3.對象的地址賦值給對象的引用
c.run(); c.color = "blue";//通過對象名調用對象的內容-- 對象.成員
對象.成員方法();方法就會進棧-執行完成--出棧
類一般分為:單純的描述類 和 測試類(含有主函數,一般在該類中創建和調用對象的內容)--類的創建與類的使用分開

----面向對象的內存分配----
1.堆裏面--存new出來對象(每個對象包含數據在堆中成員變量-默認初始化)
2.成員方法是該類所有對象共用,只有在調用的時候才會加載進棧內存
3.實體的出現--封裝自己特有數據,
4.對象:封裝某類事物的數據,數組:封裝同一類型的數據
5.匿名對象:沒有名字的對象 new Car(); 其實就是對象的簡寫方式 new Car().run();
使用地方:1.只對對象進行一次使用,比如僅僅調用一次方法,匿名對象沒有被指向,調用完成員變量後就變成垃圾,所以調用一次方法就可以簡寫 2.傳遞類類型參數就可以,因為有接收匿名對象的引用。
6.簡化必須有好處也會有壞處

---對象的初始化---
1.默認初始化--自動初始化
2.直接顯示初始化--類創建是直接給成員變量賦值
3.靜態代碼塊初始化--用於初始化類(不含對象)
4.構造代碼塊--給所有對象進行通用的初始化
5.構造方法初始化---針對性的初始化
特點:函數名和類名相同,無返回值類型,也無返回值
作用及使用時機:在創建對象的時候被調用一次,用來初始化對象的成員變量
默認初始化:一般定義類時候,沒有定義構造函數,JVM會自動添加一個無參數的構造函數,若本身存構造函數就不會添加,構造函數以重載的方式定義在類中,根據參數調相應的構造函數。和一般函數一樣,調用完就釋放內存。
---java的參數傳遞---按值傳遞
1.參數為基本數據類型--傳遞的是變量的值
2.參數為引用型--傳遞的是指向對象的地址
3.方法調用結束後會釋放其所占的棧內存
----封裝-----
1.定義隱藏對象的屬性和實現細節對外提供公共的訪問方式
2.優點:變化隔離、便於使用、代碼重用、安全
3.原則:屬性一般是私有private對外提供公共的set/get方法
4.訪問修飾符:private只能修飾類的成員,只能在本類中直接訪問
5.類中代碼的書寫順序:成員變量 構造方法 成員方法

---this關鍵字----
1.定義:代表所在函數所屬的對象的引用---代表本類對象
簡單的說就是那個對象調用了this所在的函數,this就代表那個對象
構造方法是被對象調用,加載進內存時就持有其要初始化化對象的引用this = 該對象的地址
2.何時使用:當在函數中需要用到該函數對象時就可以用this
3.使用情況:
** 局部變量和成員變量重名,this用來區分成員變量和參數 this.name = name;當對象調用成員方法時候(假如要訪問的對象數據)--此時也會持有this引用
** 可以在一個構造函數中調用另一個構造函數(必須放第一行)

---static關鍵字---靜態的
1.用來修飾成員,修飾後的成員不在屬於某個對象
2.被修飾後的成員具備以下的特點:
隨著類的加載而加載,先於對象的存在
被所有對象共享,可以被對象使用也可直接用類名調用

3.什麽時候應該定義靜態成員
靜態成員變量:該類的所有對象該屬性值相同 共享該屬性值-static只存儲一份
靜態成員方法:方法有沒有訪問對象的特有數據--是否依賴於對象的數據
如果不依賴對象,就將功能定義為靜態
共享的數據--定義為靜態--靜態變量--一般由類名調用
特有的數據--定義為對象特有--成員變量(實例變量)

4.成員變量與靜態變量的區別
兩個變量的生命周期不同。成員變量和對象是一體,靜態變量和類是一體的(生命周期長)
(類在內存中也是以對象的形式存儲的)
調用方式不同:成員變量只能被對象調用;靜態變量一般就用類名調用
存儲地方不同:成員變量堆中對象;靜態變量存儲在方法區
5.註意事項
靜態方法只能直接訪問靜態成員
非靜態既可以訪問靜態也可以訪問非靜態
靜態方法裏面不可以使用this,super等代表某個對象引用的關鍵字 靜態是共用的
主函數是靜態的-作用就是創建對象,調用對象的內容
6.main函數的解釋
格式是固定
被JVM所識別
main是函數名,被JVM識別的固定名字
主函數被調用才會執行
String[]args 主函數的參數列表--字符串數組//JVM傳參數new String[0]
7.static成員加載的過程
測試類加載(靜態非靜態分開在方法區-代碼存放區)-主函數棧中--其他函數棧中(運行區存儲方法的局部變量)

8.靜態代碼塊
static{} static此時是修飾符 滿足靜態一切特點,隨類的加載而執行
同一個類一般只會被加載一次,只執行一次,用於給類初始化
有的類可能不需要創建對象

Java基礎總結--面向對象1