靜態與非靜態

2022-04-02 12:00:32 字數 1431 閱讀 8075

一、靜態變數和例項變數的區別

1、靜態變數

由static修飾,在jvm中,靜態變數載入順序在物件之前,所以靜態變數不依賴物件的存在,可以不例項化物件的情況下使用類的靜態變數。

通過上面的**可以看出,靜態變數可以在未例項化物件的時候使用,但是非靜態變數只能在例項化物件時候才能使用。

執行結果為:

30李四男40

李四女把user中的name改為非靜態變數後

執行結果為:

30李四男40

張三女根據上面兩次執行結果可以看出,靜態變數屬於類,不屬於類中任何乙個物件,因此靜態變數又叫做類變數,乙個類不管建立多少個物件(物件是類的乙個例項),靜態變數在記憶體中有且僅有乙個,所以name為靜態變數時,即使是例項化物件,獲得的name值是在記憶體中的,例項化物件並不會初始化該物件靜態變數的值。

2、例項變數

必須依附於物件存在,只有例項化類後才可以使用此類中的例項變數,例項變數即非靜態變數。

上面例子user中的age即是例項變數。

二、靜態方法與例項方法的區別

1、靜態方法

方法用static關鍵字修飾,靜態方法與靜態成員變數一樣,屬於類本身,在類裝載的時候被裝載到記憶體,不自動進行銷毀,會一直存在於記憶體中,直到jvm關閉。使用時也是不需要例項化類,能夠直接使用。

通過上面的**可以看出,在靜態方法中只能訪問類中的靜態成員跟靜態方法,不能直接訪問類中的例項變數跟例項方法。

因為靜態方法和靜態變數一樣,在jvm中,載入順序在物件之前,可能在呼叫非靜態方法或非靜態變數時,被呼叫的非景田方法或非靜態變數還未被例項化,所以在靜態方法中要使用非靜態變數或方法,只能通過例項化物件來呼叫。

2、例項化方法

屬於例項物件,例項化後才會分配記憶體,必須通過類的例項來引用。不會常駐記憶體,當例項物件被jvm **之後,也跟著消失。

上面例子user中showage就是例項化方法,例項化方法即非靜態方法。

注:2.如果靜態方法在系統中定義太多,會占用大量的資源,最後造成記憶體溢位,所以靜態方法不能濫用。

靜態與非靜態

什麼是靜態?被static修飾的為靜態,static可用來修飾變數 方法 內部類 塊。注意 1 static不能用來修飾外部類 介面 抽象類 抽象方法。2 介面中的變數可以不用明確的宣告為靜態的,但必須賦值,因為變數預設為public static final。3 介面中的方法不能被宣告為靜態的,介...

C 靜態與非靜態

public static class math 靜態類 靜態屬性 public static void add 靜態方法 注意 靜態類不能被例項化,沒有構造方法,成員全部為static 定義非靜態類 public class math 非靜態類 靜態屬性 public int myproperty...

013 靜態與非靜態

一 靜態 static 呼叫 類名.成員名 適用場景 a.你的資源需要全域性享用 共享的時候。b.如果你寫的類需要被當做工具類來使用,典型的工具類 console 靜態類中的成員必須是靜態的。靜態類不能被例項化 因為它只有乙份,例項化就會有很多份 靜態類成員先物件一步進入記憶體中。靜態成員只有在整個...