java學習筆記之面向對象static,final關鍵字 一.static關鍵字 1.概述: static靜態的,被static修飾的成員屬於類,不屬於單個對象,被所有對象所共用,存在靜態區中,靜態的成員優先於對象載入到記憶體中。 2.statc修飾成員的使用方式:(被static修飾的成員變數有預設 ...
java學習筆記之面向對象static,final關鍵字
一.static關鍵字
1.概述:
static靜態的,被static修飾的成員屬於類,不屬於單個對象,被所有對象所共用,存在靜態區中,靜態的成員優先於對象載入到記憶體中。
2.statc修飾成員的使用方式:(被static修飾的成員變數有預設值)
/* 1.可以通過對象直接使用,不推薦使用 2.通過類名調用靜態成員 類名.靜態成員變數 類名.靜態成員方法 */
3.static的特點
/* 1.在同一個類中,靜態成員只能訪問靜態成員,非靜態成員可以訪問靜態成員跟非靜態成員。原因:靜態成員優先載入到記憶體中,而非靜態的成員只有在創建對象時才會載入到記憶體中。 2.main方法為靜態成員方法,僅僅作為程式的執行入口,不屬於某個類,可以定義到任意類中。 */
4.靜態代碼塊:
代碼塊:指被{}包裹起來的代碼區域
/* 1.局部代碼塊: 定義在局部位置的(方法內)的代碼塊,主要作用是改變變數的作用域; 2.構造代碼塊: 定義在成員位置(類中方法外)的代碼塊,構造代碼塊屬於每一個對象,每創建一次對象,就會執行一次。優先於構造方法執行; 作用:《1》給成員變數賦值《2》將構造方法中的共性代碼抽取出來,提高代碼的復用性 3.靜態代碼塊: 定義在成員位置的(類中方法外)的代碼塊,被static修飾。靜態代碼塊屬於類,不屬於對象,終身只執行一次,最先執行(靜態優先於非靜態,優先於對象);作用:《1》給靜態變數賦值《2》應用於項目的初始化 */
5.static多態調用中,編譯跟運行;
編譯:看父類,父類有編譯成功,父類沒有編譯失敗;
運行:
成員變數:都看父類
成員方法:非靜態運行子類重寫
靜態運行父類的靜態方法(和子類沒有關係,多態表現的是父類的形態);
原因:靜態方法屬於類,不屬於對象,靜態方法更沒有重寫這一說
對象的多態性,靜態和對象無關,父類的引用.靜態方法,調用的是父類的靜態方法
二.final關鍵字
1.理解:
final最終的,不能更改的;
2.final特點:
/* 1. final修飾類時:被final修飾的類不能被繼承,其他不變,可以繼承其他類,也叫太監類; 2. 修飾成員方法時:該成員方法是一個最終方法,不能被子類重寫,可以被繼承使用; 3. 修飾變數時:被修飾的變數是一個常量,其中值不能發生改變,一次賦值終生不變,局部變數只有final一個修飾符; 4. 修飾成員變數時:是一個常量,其值只能賦值一次,必須在創建對象之前賦值,被修飾的成員變數必須顯示賦值:《1》定義的時候顯示賦值《2》使用構造代碼塊《3》使用構造方法 */
三.四種許可權修飾符
1.private:私有的,僅同類訪問
2.預設:就是不寫修飾符,相同包下訪問
3.protected:受保護的;相同包或者不同包下的子類訪問
4.public:公共的;同一個項目下
四.內部類
1.內部類概念:
定義在類內部的類
2.內部類的分類:
(1)局部內部類:定義在其他類方法中的類;
(2)成員內部類:定義在成員位置的類;
3.成員內部類的使用:
(1).定義格式
修飾符 class 外部類名{
修飾符 class 內部類名{
成員變數;
成員方法
}
}
1 //定義外部類Person 2 public class Person { 3 //定義一個成員內部類Hert 4 public class Hert{ 5 6 } 7 8 }
(2)成員內部類的使用格式:
外部類名.內部類名 變數名 = new 外部類名().new 內部類名();
變數名.成員變數
變數名.成員方法
(3)成員內部類和外部類成員變數同名訪問問題:
4.局部內部類的使用
(1).格式:
修飾符 class 外部類名{
修飾符 返回值 方法名(){
(final) class 內部類名{
成員變數
成員方法;
}
//使用
內部類名 變數名 = new 內部類名();
變數名.成員變數;
變數名.成員方法;
}
}
(2)局部內部類的使用方式:
局部內部類和局部變數一樣,作用域在方法中,方法彈棧就失效了,所以定義完了局部內部類需要在方法中使用;
五.匿名內部類
1.概念:沒有名字的局部內部類
2.作用:簡化代碼,把創建子類/實現類,重寫方法,創建子類/實現類對象合成一步;
3.格式:
1 new 父類/介面(){ 2 重寫父類或者介面的方法 3 };