2014-01-24 42 views
1

我一直困惑的話,「動態」和「靜態」一段時間。據我所知,在不同的情況下,它們可能有不同的含義。任何人都可以幫助我說清楚。我希望解釋將集中在Java中。提前致謝!有關動態和靜態在各種情況下的問題(爪哇)

場景1:當它們應用於數據結構(如數組)時,這意味着什麼?人們通常認爲鏈接列表是動態的,而數組則是靜態的。爲什麼?有時數組可能是靜態的(堆棧)或動態的(堆中)。爲什麼會發生?

情景2:當它們應用於記憶時,這意味着什麼?爲什麼堆棧是靜態的並且堆是動態的?

場景3:當它們應用於動態編程時,這意味着什麼?有沒有這種叫做靜態編程的東西?

回答

0

場景1: java中的數組無法增長:如果它們被創建,它們將保持它們的大小直到它們死亡。另一方面,LinkedList可以毫不費力地添加元素,但它的大小並不固定。如果向ArrayList添加一個元素,並且基礎數組已滿,那麼ArrayList實際上會以正確的大小複製新數組中的所有元素。

實施例:

int[] ints = new int[4]; //size is known 

int[] ints2 = new int[] {1, 2, 3}; //size is known 

這樣做的原因是,該運行時可以分配存儲器的一個塊陣列。

場景2: 假設:您的意思是調用堆棧。 程序的堆在運行時更改。你的java程序會立即創建對象並再次刪除它們 - 這事先不知道。 Java編譯器和VM在將來創建對象時都會有所瞭解。 另一方面,堆棧在某種程度上由編譯器決定:編譯器生成用於調用方法的代碼,並且知道將用多少內存調用特定的方法。值得一提的是遞歸方法:編譯器生成代碼來再次調用遞歸方法,但他不知道多少次。所以堆棧並不是嚴格靜態的,只是提前知道堆棧的變化(有多少物品會被推送並從中被取消),但實際大小和數據僅在運行時才知道。

場景3: 動態編程是一種用於解決某些算法問題的技術。請參閱wikipedia。不,沒有靜態編程這樣的東西。

0

看到你在使用java的時候,一切都是對象,所有對象在運行時都是動態分配的。

讓我們看一下您的情況:

方案1:這是什麼時候都適用於數據結構,像數組意思呢?人們通常認爲鏈接列表是動態的,而數組則是靜態的。爲什麼?有時數組可能是靜態的(堆棧)或動態的(堆中)。爲什麼會發生?

看到其他語言的同時創建數組,你會寫是這樣的:

int array[10];// allocates space for 10 integers in memory. 

見上面是靜態分配,因爲我們明確提到的大小,並在此尺寸是越來越分配陣列彙編

如果你想動態分配內存,我們可以使用像malloc,calloc等功能。而且每當我們創建鏈表時,我們使用這些函數爲他們分配內存。

但是在java中,數組是對象。我們使用新的關鍵字創建它們。所以這意味着它們是動態分配的。

現在場景2:當它們應用於內存時,這意味着什麼?爲什麼堆棧是靜態的並且堆是動態的?

我想我已經回答了這個情景的答案1.

現在場景3:什麼時候都適用於動態規劃意味着什麼?有沒有這種叫做靜態編程的東西?

沒有這樣的靜態編程。相反,有靜態變量(在C,C++等),靜態成員(在Java中)。要知道靜態成員是什麼,請參閱此鏈接static members最後動態編程是一種用於解決複雜問題和算法的技術。

HTH :)