2012-09-07 48 views
0

我創建了一個Dimension和一個Point對象,但我不需要命名這兩個對象,並在方法調用的參數內調用它的構造函數。我可以解釋爲什麼這可能嗎?我太習慣於給我的對象名稱,我需要解釋我的問題。爲什麼在沒有命名對象的情況下在參數內部創建對象?

import java.awt.Dimension; 
    import java.awt.Point; 

    import javax.swing.JFrame; 


    public class GameFrame extends JFrame { 

     public GameFrame() 
     { 

      // call this method to the GameFrame object 
      // if you do not call this method the JFrame subclass will not actually close 
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

      // set size to an appropriate size 
      // create a dimension object 
      setSize(new Dimension(600,600)); 

      // upon creating the object set the location of the frame to the center of the screen 
      setLocation(new Point (500,300)); 

      // prevent the user from resizing the GameFrame object 
      setResizable(false); 
     } 

    } 
+1

對象沒有名稱。你在考慮變量:-p你不需要變量,因爲你需要保持對位置和大小的引用。 – oldrinb

回答

1

當你寫

setSize(new Dimension(600,600)); 

你實際上是節省了Dimension對象的引用作爲創建對象並把它傳遞給方法。

這個效果很好,並建議如果你不需要單獨使用對象進一步進行任何計算。

+0

所以我可以節省大量的內存。我不明白記憶部分。我幾次聽到記憶,但我不明白記憶是如何工作的。但是,內存來自何處,爲什麼在創建對象時會消耗內存? – Nicholas

3

variable,或identifier,僅指向該對象在內存中佔用的空間。在java中,對象通過引用傳遞給方法因此,如果您在調用某個方法時創建了一個新對象,則該方法將訪問存儲在內存中的對象,因爲您正在提供對該對象位置的引用。由於您沒有將參考存儲在命名變量中,因此方法完成後的後續操作將無法訪問該對象。

+0

哦,我看到它像一個本地參考? – Nicholas

+0

種類。這個想法是,無論何時使用'new'關鍵字,它都會創建一個對象並將其存儲在內存中。您可以通過使用一個引用(類似於指針)來訪問它的位置。您可以將此指針存儲在指定的變量中,以便稍後可以訪問該對象。另一種做法是將參考傳遞給方法,但不將其存儲在變量中供以後使用。 –

1

您沒有引用帶名稱的對象(只是將實例傳遞給方法)。如果引用該對象,則可以通過該引用進一步在指定的scop中對該對象執行操作。

如果您認爲您不需要對指定範圍內的該對象執行任何進一步的操作,那麼您可以簡單地創建一個沒有參考的對象。

+0

另一個很好的解釋! – Nicholas

0

這是一個稱爲匿名類的功能,您不關心對象的引用 - 但您真正關心的是對象的功能/行爲。你會在函數式編程中看到更多。

更多關於此功能here

+2

這不是關於匿名類。 – Tom

+0

如果是這樣,你能解釋一下這些setSize是什麼(新維(600,600)); ? – JVXR

+0

查看其他最新答案。一個匿名類將是setSize(new Dimension(600,600){});請注意尾部{},您可以在其中重寫方法等。 – Tom

1

你這樣做就等於基本上就是:

Dimension dimension = new Dimension(600,600); 
setSize(dimension); 

現在即使它是完全一樣的東西,dimension只是爲新對象的標識符。如果除了新物體以外不需要使用它,這只是浪費空間。

setSize方法將新對象傳遞給您的超類變量JFrame,該變量保持您的對象,您的類GameFrame將通過其超類訪問它。在Java中,每個對象都需要至少有一個引用,否則它被認爲是垃圾並被刪除。

另外,即使您給出了dimension的名稱,在執行了四行代碼之後,該變量將超出範圍並被刪除。

希望我幫助:)

+0

哦,所以如果會被刪除任何一種方式我創建維度對象。這非常有幫助。 – Nicholas

相關問題