2014-01-16 62 views
7

我想問一下在什麼時候使用靜態變量/方法或者在Java的其他情況下實例變量/方法是有利的問題?何時使用靜態變量/方法以及何時使用Java中的實例變量/方法?

我知道,這取決於某些情況下(如編程UTIL類的靜態方法),但我們可以聲明像一般的策略是什麼?

+3

[點擊我](http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html)。 – Maroun

+0

選中此項:[Static中的關鍵字](http://programmergate.com/static-keyword-java/) –

回答

12

在新手水平:每一個變量都有針對不同的對象不同的值:當

使用實例變量。例如:學生,輥數等的名稱..

使用靜態變量時:所述變量的值是獨立的對象(不是唯一的每個對象)的。例如:沒有學生。

3

static變量通常用於常量,這是常見的,如果在類的所有實例。例如,許多人不喜歡在代碼中「硬編碼」常量;他們喜歡用一個有意義的名稱制作一個public staticprivate static變量,並在代碼中使用它,這會使代碼更具可讀性。

在短

的任何方法或變量,它是獨立的類的實例的狀態的應該是靜態

4

靜態變量:當你需要的東西,將通過使用了應用程序,每個實例都需要知道的變量。

實例變量:這將是從對象到對象和對象的屬性不同而靜態變量是類的屬性。

靜態功能:用於執行一些實用工作。無需任何對象聲明即可調用。

實例函數:對象需要調用此函數。

靜態或實例取決於您的使用。

1

將靜態變量看作是全局全局變量,或者如果使用「final」關鍵字,則將其視爲全局全局常量。明智地使用靜態非最終變量 - 它們在所有類實例中共享,並可能導致一些非顯而易見的錯誤。我會建議避免使用可變靜態變量 - 從小到無,如果這種需求無法使用依賴注入來實現。

另外使用全局變量總是讓單元測試變得更困難 - 還有一個缺點需要考慮。

0

至於方法:每個方法Foo.method(BAR1 B1,BAR2,B2)通過定義總是可以有替換的等同的設計:

Bar.altmethod(美孚女,酒吧B2)

靜態靜態方法(富樓酒吧B1,酒吧B2)

而且你還可以換的是後一種方法在服務類本身就是一個單例(這樣的intsance方法,該方法的靜態性有點被cla隱藏起來了它在)。

唯一令人信服理由讓你的方法作爲類的方法參數之一(靜態版)的實例方法,就是當你認爲會有那個類的子類,並且它可能對這些子類有專門的方法實現有用。

想象

類GeographicalFigure {對象正交(){...}}

它可能留下打開後加入

類圈的可能性是有用的擴展GeographicalFigure {對象正交(){throw new ThisIsNoGoodException(); }}

除此之外,您的所有選項基本上相同。

相關問題