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


這里的普通方法和成員變量是指,非靜態方法和非靜態成員變量
首先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
 
 
 

類修飾符:

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

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

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

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

  

成員變量修飾符:

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

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

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

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

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

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

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

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

  

方法修飾符

public(公共控制符)

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

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

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

static,指定不需要實例化就可以激活的一個方法。

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM