Java 隨心筆記6
一、成員變量和局部變量(思考)
類中位置不同:成員變量在類中,方法外; 局部變量在方法內或方法聲明上
內存中位置不同:成員變量堆內存,局部變量棧內存;
生命周期不同:成員變量隨著對象存在而存在,局部變量變量隨方法調用而存在,方法調用完畢結束而消失
初始化值不同:成員變量有默認的初始化值,局部變量沒有,先定義賦值才能使用。
參數傳遞時傳遞的值
二、類的初始化
加載class進內存
==》在棧內存中為s開空間
==》在堆內存中為學生對象開辟空間(new 類)
==》對學生對象的成員變量進行默認初始化;
==》對學生對象的成員進行默認、顯示初始化;
==》通過構造方法對 對象的成員變量進行賦值;
==》學生對象初始化完畢,把杜希昂地址賦值給s變量。
三、static關鍵字
修飾成員變量和成員方法
特點
隨著類的加載而加載
優先於對象存在(加載在class的靜態區)
被類的所有對象共享(判斷是否使用靜態關鍵字的條件)
可以通過類名調用(Student.say();)
作用
在靜態方法中沒有this關鍵字
靜態方法只能訪問靜態的成員變量和靜態的成員方法
1.靜態方法不能訪問非靜態成員變量
2.非靜態方法可以訪問靜態成員變量
四、靜態變量和成員變量的區別
所屬不同
靜態變量屬於類,所以也稱為為類變量
成員變量屬於對象,所以也稱為實例變量(對象變量)
內存中位置不同
靜態變量存儲於方法區的靜態區
成員變量存儲於堆內存
內存出現時間不同
靜態變量隨著類的加載而加載,隨著類的消失而消失
成員變量隨著對象的創建而存在,隨著對象的消失而消失
調用不同
靜態變量可以通過類名調用,也可以通過對象調用
成員變量只能通過對象名調用
五、static代碼塊 構造代碼塊 局部代碼塊
局部代碼塊
在方法中出現;限定變量生命周期,及早釋放,提高內存利用率
構造代碼塊 格式:{執行語句}
在類中方法外出現;多個構造方法方法中相同的代碼存放到一起,每次調用構造都執行,並且在構造方法前執行
靜態代碼塊 (在類中方法外出現,加了static修飾)
在類中方法外出現,並加上static修飾;用於給類進行初始化,在加載的時候就執行,並且值執行一次。
靜態代碼塊優先於構造代碼塊,而創建對象就會執行構造代碼塊,
1 /*動態成員方法 2 非靜態成員方法訪問靜態成員變量 3 */ 4 class Demo_3 5 { 6 public static void main(String[] args) 7 { 8 Students s = new Students(); 9 s.b = 13; 10 s.say(); 11 } 12 } 13 class Students 14 { 15 int a; 16 static int b; 17 //非靜態成員方法訪問靜態成員變量; 18 public非靜態成員方法訪問靜態成員變量void say(){ 19 System.out.println(b); 20 } 21 }
/*靜態成員方法 靜態成員方法訪問非靜態成員變量 結果:無法訪問從靜態上下文應用非靜態變量 */ class Demo_5 { public static void main(String[] args) { Students s = new Students(); s.a = 13; s.say(); } } class Students {靜態成員方法訪問非靜態成員變量int a; static int b; //靜態成員方法訪問非靜態成員變量; public static void say(){ System.out.println(a); } }
五、繼承的概念
1.繼承
特點:只支持單繼承,不支持多繼承(只能有一個父類)
支持多層繼承,class a{} class b extends a{} class c extends b{}
作用:提高代碼的復用性
提高代碼的維護性
讓類與類之間產生關系,是多態的前提(繼承的弊端,耦合性特別強)
2.super的用法和this
定義:this代表本類對應的引用,
super代表父類存儲空間的標識(父類引用)
用法:訪問成員變量 this.成員變量 super.成員變量
訪問構造方法 this(...) super(...)
訪問成員方法 this.成員方法() super成員方法()
註意:在子類繼承父類中的數據,會使用父類的數據,子類初始化之前要完成父類數據的初始化
每一個構造方法的第一條語句默認是super()
Java 隨心筆記6