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

這裏的普通方法和成員變量是指,非靜態方法和非靜態成員變量
首先static是靜態的意思,是修飾符,能夠被用來修飾變量或者方法。html

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

這也就是說在對象中不能改變他的值,只能在他所在的類中改變,若是他帶有final的話(static final)就代表這是一個常量。
static變量是靜態變量,當加載類時即已加載,非static變量實例對象時加載。工具

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


例子: static int i=1; 這裏的i就是一個靜態變量。具體特性以下url

靜態成員變量與普通成員變量

  • 內存分配
    靜態靜態,就是當類被加載時,這個內存就靜靜的待在這裏,就已經存在,而普通成員變量,只有類被實例化時才分配內存。
  • 調用方法
    成員變量須要對象才能被調用;而靜態成員變量能夠直接經過類來調用,固然也能夠直接調用
    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方法就是靜態方法
    在此我只討論一下調用的問題
  • 靜態方法中不可直接調用非靜態方法,可是非靜態方法中,能夠直接調用靜態的。
  • 靜態方法能夠調用靜態成員變量,調用普通成員變量時需建立對象;非靜態方法能夠隨意調用靜態成員變量或普通成員變量。
  • 靜態方法和普通方法調用特性同上,靜態調用普通方法時需建立對象,而普通方法隨意。

 

 

靜態方法的使用狀況

是在類中執行該方法時,該方法並不對成員變量有任何操做,也就是說該靜態方法的操做不針對對象,只針對該類時,使用。那麼使用該類也就不須要建立對象,而能夠直接經過類名.方法名實現。spa


工具類.png
 
 
 

類修飾符:線程

public(訪問控制符),將一個類聲明爲公共類,他能夠被任何對象訪問,一個程序的主類必須是公共類。3d

abstract,將一個類聲明爲抽象類,沒有實現的方法,須要子類提供方法實現。code

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

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

  

成員變量修飾符:

public(公共訪問控制符),指定該變量爲公共的,他能夠被任何對象的方法訪問。

private(私有訪問控制符)指定該變量只容許本身的類的方法訪問,其餘任何類(包括子類)中的方法均不能訪問。

protected(保護訪問控制符)指定該變量能夠別被本身的類和子類訪問。在子類中能夠覆蓋此變量。

friendly ,在同一個包中的類能夠訪問,其餘包中的類不能訪問。

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

static(靜態修飾符)指定變量被全部對象共享,即全部實例均可以使用該變量。變量屬於這個類。

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

volatile(易失修飾符)指定該變量能夠同時被幾個線程控制和修改。

  

方法修飾符

public(公共控制符)

private(私有控制符)指定此方法只能有本身類等方法訪問,其餘的類不能訪問(包括子類)

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

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

static,指定不須要實例化就能夠激活的一個方法。

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

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

相關文章
相關標籤/搜索