java 成員變數、局部變數、靜態變數、類變數、非靜態變數、執行個體變數、向前引用、非法向前引用、靜態代碼塊、非靜態代碼塊

來源:互聯網
上載者:User

標籤:

  ①java類的成員變數有倆種:        一種是被static關鍵字修飾的變數,叫類變數或者靜態變數        另一種沒有static修飾,為成員變數     ②通俗點說:        類的靜態變數在記憶體中只有一個,java虛擬機器在載入類的過程中為靜態變數分配記憶體,靜態變數位於方法區,被類的所有執行個體共用。靜態變數可以直接通過類名進行訪問,其生命週期取決於類的生命週期。        而執行個體變數取決於類的執行個體。每建立一個執行個體,java虛擬機器就會為執行個體變數分配一次記憶體,執行個體變數位於堆區中,其生命週期取決於執行個體的生命週期。 注意點:    1.JAVA中初始化的順序:        載入類;        靜態變數初始化;        靜態塊;【其只能調度靜態,不能調度非靜態】        成員變數;        構造方法;      2.為顯示靜態塊的優先順序,我來顯示一個沒有Main方法的程式,javac後其是沒有任何錯誤的。public class Test {    static {        System.out.println("static ");        System.exit(0);    }} 

java 中的變數大致分為 成員變數 和 局部變數 兩大類。

成員變數:
    在類體裡面定義的變數稱為成員變數;
    如果該成員變數有 static 關鍵字修飾,則該成員變數稱為 靜態變數 或 類變數
    如果該成員變數沒有 static 關鍵字修飾,則該成員變數被稱為 非靜態變數 或 執行個體變數

局部變數:
    形參、方法內定義的變數、代碼塊中定義的變數,都屬於局部變數。

類變數 (靜態變數
    1. 可以向前引用
    2. 變數屬於類本身
    3. 類變數不依賴類的執行個體,類變數只在初始化時候在棧記憶體中被分配一次空間,無論類的執行個體被建立幾次,都不再為類變數分配空間
    4. 通過類的任意一個執行個體來訪問類變數,底層都將將其轉為通過類本身來訪問類變數,它們的效果是一樣的
    5. 一旦類變數的值被改變,通過類或類的任意一個執行個體來訪問類變數,得到的都將是被改變後的值
    6. 將在類的初始化之前初始化

執行個體變數(非靜態變數)
    1. 不能向前引用,如果向前引用,則稱為非法向前引用,這是不允許的
    2. 變數屬於類的執行個體對象
    3. 隨著類的執行個體被建立而分配記憶體空間

非靜態代碼塊
    直接由 { } 包起來的代碼,稱為非靜態代碼塊

靜態代碼塊
    直接由 static { } 包起來的代碼,稱為靜態代碼塊

類變數(靜態變數)、執行個體變數(非靜態變數)、靜態代碼塊、非靜態代碼塊 的初始化時機
    由 static 關鍵字修飾的(如:類變數[靜態變數]、靜態代碼塊)將在類被初始化建立執行個體對象之前被初始化,而且是按順序從上到下依次被執行;
    沒有 static 關鍵字修飾的(如:執行個體變數[非靜態變數]、非靜態代碼塊)初始化實際上是會被提取到類的構造器中被執行的,但是會比類構造器中的
    代碼塊優先執行到,其也是按順序從上到下依次被執行。

 

static final變數,必須在聲明的時候初始化或者在static靜態塊裡面初始話。
所以你要用程式輸入作為他的變數,就必須修改變數類型
你可以寫成
public class xx
{
public final String PackageName ;
public xx(String name)
{
PackageName = name;
}
}
在外面定義一個xx的靜態執行個體 public static xx xxInstance = new xx("輸入的值");
調用的時候,就寫xxInstance.PackageName


從來只有成員變數和局部變數的區別。
我們就好比一個類是一個公司,
成員變數就是這個公司的正式員工,一直存在,與公司同生同滅..
而局部變數就是臨時工,公司請臨時工來做一點事情,做完,臨時工就沒有了,被銷毀了!(好靈異)

確實有人把成員變數叫成全域變數.那是以這個類作為全部

其實還有一種比成員變數更大的...可能你不懂,不過以後你就知道了.
我建一個公用類,我在裡面聲明一個靜態變數,那麼,我在任何地方都可以用它了..它也被通俗的叫做<全域變數>

:具有同種屬性的對象稱為類,是個抽象的概念。比如說:汽車、人、狗、神;
對象:日常生活中的所有東西都是對象,是類的執行個體化。比如說:推土車是汽車的執行個體化;姚明是人的執行個體化;小白(狗的名字)是狗的執行個體化;二郎神是神的執行個體化;
屬性:用來描述具體某個對象的特徵的是屬性,是靜態。比如:姚明身高2.6米多;小白的毛髮是棕色的;二郎神額頭上有隻眼睛;
方法:每個對象有它們自己的行為或者是使用它們的方法,比如說一隻狗會跑會叫等,我們把這些行為稱之為方法,是動態,可以使用這些方法來操作一個對象;
類的成員:屬性和方法稱為這個對象的成員,因為它們是構成一個對象的主要部分,沒有了這兩樣東西,那麼對象也沒什麼存在意義了。



- 以上是本人在翻完 PDF 後的個人筆記和理解以及見解,不見得百分百對,以下附上本人測試範例程式碼,會更有說服性

範例程式碼

 1
 2/**
 3 * -----------------------------------------
 4 * @檔案: Statical.java
 5 * @作者: fancy
 6 * @郵箱: [email protected]
 7 * @時間: 2012-7-9
 8 * @描述: TEST
 9 * -----------------------------------------
10 */
11public class Statical {
12
13 /**
14     * 靜態代碼塊
15     * 類變數(靜態變數)可以向前引用(即:先引用,再定義)
16     */
17    static {
18        name = "fancydeepin"; // name 的定義在使用之後
19        System.out.println("--->  靜態代碼塊被執行   <---");
20    }
21 /**
22     * 類變數(靜態變數)在類的初始化之前初始化,無論類的執行個體將被建立多少個
23     * 類變數(靜態變數)都將只在初始化時候在棧記憶體上分配一次空間
24     * 凡 static 修飾的,都將按位置被順序執行,所以,
25     * name 的值最終輸出 fancy 而不是上面的 fancydeepin
26     */
27    public static String name = "fancy"; //類變數(靜態變數)
28    private String mail = "myEmail"; //執行個體變數(非靜態變數),定義時指定初始值,會比在構造器賦予值更早執行
29    
30    public Statical() {
31        mail = "[email protected]";
32        System.out.println("---> 構造器代碼塊被執行 <---");
33    }
34 /**
35     * 非靜態代碼塊
36     * 實際上,非靜態代碼塊在類初始化建立執行個體時,將會被提取到類的構造器中,
37     * 但是,非靜態代碼塊會比構造器中的代碼塊優先被執行
38     * 所以,mail 最終輸出的是類構造器中給定的值,也就是 [email protected]
39     * 而不是 [email protected],更不是 myEmail
40     */
41    {
42        mail = "[email protected]";
43        System.out.println("---> 非靜態代碼塊被執行 <---");
44    }
45    
46    // getting and setting 
47

java 成員變數、局部變數、靜態變數、類變數、非靜態變數、執行個體變數、向前引用、非法向前引用、靜態代碼塊、非靜態代碼塊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.