這里的普通方法和成員變量是指,非靜態方法和非靜態成員變量
首先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方法就是靜態方法
在此我只討論一下調用的問題 - 靜態方法中不可直接調用非靜態方法,但是非靜態方法中,可以直接調用靜態的。
- 靜態方法可以調用靜態成員變量,調用普通成員變量時需創建對象;非靜態方法可以隨意調用靜態成員變量或普通成員變量。
- 靜態方法和普通方法調用特性同上,靜態調用普通方法時需創建對象,而普通方法隨意。

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


類修飾符:
public(訪問控制符),將一個類聲明為公共類,他可以被任何對象訪問,一個程序的主類必須是公共類。
abstract,將一個類聲明為抽象類,沒有實現的方法,需要子類提供方法實現。
final,將一個類生命為最終(即非繼承類),表示他不能被其他類繼承。
friendly,默認的修飾符,只有在相同包中的對象才能使用這樣的類。
成員變量修飾符:
public(公共訪問控制符),指定該變量為公共的,他可以被任何對象的方法訪問。
private(私有訪問控制符)指定該變量只允許自己的類的方法訪問,其他任何類(包括子類)中的方法均不能訪問。
protected(保護訪問控制符)指定該變量可以別被自己的類和子類訪問。在子類中可以覆蓋此變量。
friendly ,在同一個包中的類可以訪問,其他包中的類不能訪問。
final,最終修飾符,指定此變量的值不能變。
static(靜態修飾符)指定變量被所有對象共享,即所有實例都可以使用該變量。變量屬於這個類。
transient(過度修飾符)指定該變量是系統保留,暫無特別作用的臨時性變量。
volatile(易失修飾符)指定該變量可以同時被幾個線程控制和修改。
方法修飾符:
public(公共控制符)
private(私有控制符)指定此方法只能有自己類等方法訪問,其他的類不能訪問(包括子類)
protected(保護訪問控制符)指定該方法可以被它的類和子類進行訪問。
final,指定該方法不能被重載。
static,指定不需要實例化就可以激活的一個方法。
synchronize,同步修飾符,在多個線程中,該修飾符用於在運行前,對他所屬的方法加鎖,以防止其他線程的訪問,運行結束后解鎖。
native,本地修飾符。指定此方法的方法體是用其他語言在程序外部編寫的。