1. 程式人生 > >Java 隨心筆記6

Java 隨心筆記6

pub 父類 技術 -a 靜態區 加載 不能訪問 動態 col

一、成員變量和局部變量(思考)
類中位置不同:成員變量在類中,方法外; 局部變量在方法內或方法聲明上
內存中位置不同:成員變量堆內存,局部變量棧內存;
生命周期不同:成員變量隨著對象存在而存在,局部變量變量隨方法調用而存在,方法調用完畢結束而消失
初始化值不同:成員變量有默認的初始化值,局部變量沒有,先定義賦值才能使用。

參數傳遞時傳遞的值

二、類的初始化
加載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