一:什麼是類 什麼是對象
1.1現實世界是有不少對象組成的,基於對象抽出了類
1.2對象是真實存在的單個的個體,類是一類個體,類型/類別
1.3類中能夠包括:java
全部對象所共有的特徵屬性----變量 全部對象所共有的行爲--------方法
1.4一個類能夠建立多個對象,同一個類的多個對象,機構相同,數據不一樣
1.5類 是對象的模板,對象是類的具體的實例數組
二:內存管理
由jvm來管理jvm
1.1用於存儲全部new出來的對象(包括成員變量) 1.2成員變量的生命週期;建立new對象時存在在堆中,對象被GC回收時一併消失 1.3垃圾:沒有任何引用所指向的對象 垃圾回收器GC不定時到內存中掃描,看到垃圾不必定立刻回收 回收過程是透明的,並非一看到垃圾就立刻回收,想快一點能夠調用System.gc() 1.4局部變量:調用方法時存在在棧中,方法結束時與之一併消失 1.5方法區: 用於存儲.class字節碼文件(包括方法) 方法只有一份,經過this來區分具體是哪一個
繼承
2.1目的:避免代碼重複,有利於代碼的複用
2.2經過extends實現繼承
2.3父類/基類:全部子類所共有的屬性和行爲 子類:子類所特有的屬性和行爲
2.4子類/派生類繼承父類後,子類具備:子類+父類
2.5一個父類能夠有多個子類,一個子類只能有一個父類-----單一繼承
2.6繼承具備傳遞性
2.7java規定:ide
構造子類方法以前必須先構造父類方法 子類構造以前沒有調用父類的構造,系統默認super()來調用父類的無參構造 若本身調用了,則再也不默認提供 super()調用父類構造,必須位於子類構造的第一行
super:指代當前對象的父類對象函數
1:super.方法名()-----調用父類的方法 2:super.成員變量名-----調用父類的成員變量 3:super()------------調用父類的構造方法 向上造型: 1:父類型的引用指向子類的對象 2:能點什麼得看引用類型
三:方法
方法:方法的簽名:方法名+參數列表this
1.方法的重載overload:同一個類中,方法名稱相同,參數列表不一樣 編譯器在編譯時自動根據方法的簽名來綁定調用方法 2.構造方法(構造器,構造函數,構建器) 經常用於給成員變量賦初值 與類同名,沒有返回類型 在建立(new)對象時被自動調用 若本身不寫構造方法,則編譯器默認提供無參結構的構造方法 構造方法能夠重載 3.this:指代當前對象,那個對象調用指的就是哪一個對象 方法中訪問成員變量以前默認都有個this this的用法 this.成員變量名-------訪問成員變量 this.(方法名)-------調用方法; this()--------------調用構造方法 4.引用類型數組: 4.1 cell[] cells = new cell[4]; cells[0] = new cell(2,1); cells[1] = new cell(2,8); cells[2] = new cell(5,5); cells[3] = new cell(3,5); 4.2 cell[] cells = new cell[]{ new cell(2,1); new cell(2,8); new cell(5,5); new cell(3,5); } 4.3 int [][] arr = new int [3] []; arr[0] =new int [2]; arr[1] =new int [3]; arr[2] =new int [2]; arr[1][0] = 100; 4.4 int [][]arr = new int [3][4]; for(int i = 0;i<arr.length;i++){ for(int j = 0;j<arr[i].length;j++){ arr[i][j] = 100; } } 1.方法的重寫override 1.1發生在父子類中,方法名相同, 2.重寫與重載的區別 2.1 2.2重載:一個類中,方法名相同,參數列表不一樣 遵循「編譯期」綁定,根據引用的類型綁定 3.package 3.1做用、;避免類的命名衝突; 3.2包名能夠有層次結構 3.3建議包名全小寫 3.4類的徹底限定名:包名.類名 import: 3.11做用:聲明類/引入類 3.22同包中的類能夠直接訪問 3.33:不一樣包中的類要訪問得先import聲明類在訪問 4.訪問修飾符: 4.1public:公開的,任何類 4.2private:私有的,本類 4.3protected:受保護的,本類,子類,同包類 4.4默認的什麼也不寫:本類,同包類 類發訪問修飾:public和默認的 類成員的訪問修飾:如上四種皆可 建議數據私有化private , 行爲公開化public
static:靜態的code
1靜態變量 由static修飾 屬於類的,存在方法區中,只有一份 經常經過類名. 來訪問 什麼時候用:若全部對象的數據都同樣時使用 2靜態方法 由static修飾 屬於類的,存在方法區中,只有一份 經常經過類名. 來訪問 沒有隱式的this來傳遞;靜態方法中不能直接訪問實例成員 什麼時候用:方法的操做僅與參數相關而與對象無關 3靜態塊 由static修飾 屬於類的,類被加載時自動執行,類只被加載一次,因此靜態塊也只執行一次 什麼時候用:經常用於加載靜態資源圖片音視頻等 *成員變量: 1.實例變量:屬於對象的,存在堆中; 有幾個對象就有幾個實例變量; 必須經過對象名.來訪問 2.靜態變量: 由static修飾,屬於類的,存在方法區中 只有一份 經常經過類名. 來訪問 6.final:不能變 6.1修飾變量:變量不能被改變 6.2修飾方法:方法不能被重寫 6.3修飾類:類不能被繼承 7.static final常量 7.1必須聲明的同時初始化 7.2經過類名.來訪問,不能改變 7.3建議常量名都大寫 7.4在編譯的同時會自動轉換爲具體的值,效率高 1.抽象方法:由abstract修飾,只有方法的定義沒有方法的實現 2.抽象類: 2.1由abstract修飾 2.2包含抽象方法的類必須是抽象類 2.3抽象類不能被實例化 2.4抽象類是須要被繼承的,不然無心義,經常使用-----重寫全部抽象類的方法 2.5意義: 2.5.1包含公共的屬性和行爲,被子類所共享 2.5.2爲全部子類所提供一種公共的類型----向上造型 2.5.3包含抽象方法,爲全部子類提供一個統一的方法,子類有不一樣的實現
接口:視頻
//接口是徹底抽象的抽象類 1是一個標準、規範 2由interface定義 3只能包含常量和抽象方法,略的是public 4接口是不能被實例化的 5接口是須要被實現/繼承的,實現類/子類: 必須重寫接口中全部的抽象方法 3.6一個類能夠實現多個接口,用逗號隔開,若又繼承又實現,要先extends後implements 3.7接口能夠繼承接口
多態:意義:對象
1.1同一類型的引用指向不一樣的對象時,有不一樣的實現 1.2強制類型轉換,成功的條件有兩個: 引用所指向的對象,就是該類型 引用所指向的對象,實現了該接口 1.3instanceof關鍵字返回的是boolean類型結果,強轉成功的條件就是它爲true的條件
內部類,有本身獨立的.class繼承
1成員內部類 只服務於外部類,他的對象通常是在外部類建立的 內部類中能夠直接訪問外部類的成員包括private 內部類中有個隱式的引用指向建立他的外部類 2匿名內部類 經常使用 想建立一個只用一次的類的對象,該類可沒必要命名 匿名內部類中訪問外部的數據,該數據必須final類型
面向對象總結
面向對象的三大特徵:
1.封裝
1.1 類:封裝的是對象的屬性和行爲 1.2 方法:封裝的是具體的邏輯功能實現 1.3訪問控制修飾符:封裝的是訪問的權限
2.繼承:
2.1做用:避免代碼的重複,有利於代碼的重用 2.2父類:全部子類所共有的 子類:特有的 子類extends繼承後:子類+父類 2.3單一繼承,多接口實現,具備傳遞性
3.多態
3.1意義:行爲的多態、對象的多態 3.2向上造型、強制類型轉換、instanceof 3.3多態的表現形式: 重寫+重載