2015-06-08 106 views
3

在Java中,可以在調用構造函數之前初始化編程變量。java中的構造函數初始化變量的屬性

public class StockGraph extends JPanel { 

    public boolean runUpdates = true; 
    double TickMarks = 18; 
    double MiddleTick = TickMarks/2; 
    double PriceInterval = 5; 

    double StockMaximum; 
    double StockMinimum; 

    Random testStockValue; 

    DecimalFormat df = new DecimalFormat("#.000"); 

    LinearEquation StockPriceY; 

    public StockGraph(int AreaInterval, int Time, int StockID) { 

    } 
} 

這些變量的屬性是什麼?

TickMarks變化時MiddleTick是否動態變化?
什麼時候這些變量被初始化?

特別是,public boolean runUpdates = true;。由於不需要初始化,因爲可以調用StockGraph.runUpdates來訪問變量?

+0

http://stackoverflow.com/questions/1994218/should-i-instantiate-instance-variables-on-declaration-or-in-the-constructor可能相同的問題 – varren

+0

如果不首先創建StockGraph的實例,則不能直接調用'StockGraph.runUpdates',因爲此字段不是靜態的。 –

回答

6

這些變量的屬性是什麼?

這些是分配了默認值的實例變量。

TickMarks更改時,MiddleTick會動態更改嗎?這些變量何時被 初始化?

沒有MiddleTick將使用TickMarks其可在在創建實例時MiddleTick初始化時間即。

尤其是public boolean runUpdates = true;由於不需要初始化 ,因爲可以調用StockGraph.runUpdates來訪問 變量?

runUpdates無法直接訪問(StockGraph.runUpdates),因爲它不是實例字段,也不是靜態字段。

根據需要和代碼的可讀性,有不同的方式來初始化java中的字段。這篇文章拋出這個一些啓示:

Initializing Fields in Java

+0

隨着6年的編程,我從來不知道這大聲笑,似乎我總是陷在最微不足道的問題。 – Mozzie

5

這些變量在調用構造函數之前未被初始化,而是在調用super()後立即複製到構造函數中。 Java教程,Intializing Fields說(部分),

Java編譯器複製初始化塊到每個構造函數。因此,這種方法可以用來在多個構造函數之間共享一段代碼。

相關問題