java static成員變數方法和非static成員變數方法的區別

來源:互聯網
上載者:User

標籤:int   記憶體配置   param   改變   允許   volatile   void   tran   class   

這裡的普通方法和成員變數是指,非靜態方法和非靜態成員變數
首先static是靜態意思,是修飾符,可以被用來修飾變數或者方法。

static成員變數有全域變數的作用       非static成員變數則沒有全域變數的作用        局部變數是類的方法裡面的變數
靜態static成員變數是指類的成員變數,他不屬於類的對象,只單獨屬於類,被所有對象共用。當在類中改變他的值時,他在每個對象裡面的值都會隨之改變。

這也就是說在對象中不能改變他的值,只能在他所在的類中改變,如果他帶有final的話(static final)就表明這是一個常量。
static變數是靜態變數,當載入類時即已載入,非static變數執行個體對象時載入。

static變數是靜態變數當改變其中的值,其它執行個體中的該static變數也會改變,非static變數只會在具體所在的那個對象中改變,不會影響其它執行個體。


例子: static int i=1; 這裡的i就是一個靜態變數。具體特性如下

靜態成員變數與普通成員變數
  • 記憶體配置
    靜態靜態,就是當類被載入時,這個記憶體就靜靜的待在這裡,就已經存在,而普通成員變數,只有類被執行個體化時才分配記憶體。
  • 調用方法
    成員變數需要對象才能被調用;而靜態成員變數可以直接通過類來調用,當然也可以直接調用
    PS:小小疑問為什麼可以直接調用,我看一些參考書上只說可以通過類來調用?
      public class demo {   static int i=10;  public static void main(String[] args){  int k=i;//直接調用  int j=demo.i;//通過類來調用  System.out.println("直接調用k:"+k);  System.out.println("通過類來調用j:"+j);          }  }
  • 生命週期
    靜態成員變數從類被載入開始到類被卸載,一直存在;普通成員變數只要在類被執行個體化也就是建立對象是才開始存在,一直到對象結束,生命也告終。
  • 共用方式
    靜態成員變數是全類共用的,即使不是對象,也可以調用,並且記憶體不變;普通成員變數是每個對象單獨享用的,就是說你這個對象有一個int i=1,我再給該類建立一個新的對象,他也有一個int i,但他可以不等於1,可以等於5,也可以等於10,但無論等於多少,都不會影響之前對象的i的值,而靜態成員變數不是這樣。靜態方法與普通方法我們一直用的main方法就是靜態方法
    在此我只討論一下調用的問題
  • 靜態方法中不可直接調用非靜態方法,但是非靜態方法中,可以直接調用靜態。
  • 靜態方法可以調用靜態成員變數,調用普通成員變數時需建立對象;非靜態方法可以隨意調用靜態成員變數或普通成員變數。
  • 靜態方法和普通方法調用特性同上,靜態調用普通方法時需建立對象,而普通方法隨意。

 

 

靜態方法的使用方式

是在類中執行該方法時,該方法並不對成員變數有任何操作,也就是說該靜態方法的操作不針對對象,只針對該類時,使用。那麼使用該類也就不需要建立對象,而可以直接通過類名.方法名實現。


工具類.png   java中的類修飾符、成員變數修飾符、方法修飾符 

類修飾符:

public(存取控制符),將一個類聲明為公用類,他可以被任何對象訪問,一個程式的主類必須是公用類。

abstract,將一個類聲明為抽象類別,沒有實現的方法,需要子類提供方法實現。

final,將一個類生命為最終(即非繼承類),表示他不能被其他類繼承。

friendly,預設的修飾符,只有在相同包中的對象才能使用這樣的類。

  

成員變數修飾符:

public(公用存取控制符),指定該變數為公用的,他可以被任何對象的方法訪問。

private(私人存取控制符)指定該變數只允許自己的類的方法訪問,其他任何類(包括子類)中的方法均不能訪問。

protected(保護存取控制符)指定該變數可以別被自己的類和子類訪問。在子類中可以覆蓋此變數。

friendly ,在同一個包中的類可以訪問,其他包中的類不能訪問。

final,最終修飾符,指定此變數的值不能變。

static(靜態修飾符)指定變數被所有對象共用,即所有執行個體都可以使用該變數。變數屬於這個類。

transient(過度修飾符)指定該變數是系統保留,暫無特別作用的臨時性變數。

volatile(易失修飾符)指定該變數可以同時被幾個線程式控制制和修改。

  

方法修飾符

public(公用控制符)

private(私人控制符)指定此方法只能有自己類等方法訪問,其他的類不能訪問(包括子類)

protected(保護存取控制符)指定該方法可以被它的類和子類進行訪問。

final,指定該方法不能被重載。

static,指定不需要執行個體化就可以啟用的一個方法。

synchronize,同步修飾符,在多個線程中,該修飾符用於在運行前,對他所屬的方法加鎖,以防止其他線程的訪問,運行結束後解鎖。

native,本地修飾符。指定此方法的方法體是用其他語言在程式外部編寫的。

 

java static成員變數方法和非static成員變數方法的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.