2013-01-10 34 views
2

我在我的業餘時間一個Java devloper,我只是想知道什麼是差異「level.tick()」和「Level.tick(水平)」

level.tick() 

之間的差異

Level.tick(level) 

(「級別」是類的名稱和「水平」是類中的一個對象)

我知道,由於Java作品引用對象,調用從類的靜態函數通過級別爲pa rameters肯定會爲「level.tick()」

(請注意,這不是一個項目,我的工作,我只是認爲我會問) )

+0

你能告訴我們'Level'類嗎?我們只能在不知道如何聲明'tick()'和'tick(Level l)'的情況下猜測答案。 – jlordo

回答

1

兩者都可以實現相同的功能。最常見的是你使用第一個實例方法聲明。但是,如果級別可以是null,那麼您需要在該調用之前添加檢查。第二個靜態方法聲明可以包含這個檢查並減少你要寫的樣板。

public class Level { 
    public void tick(); 
    public static void tick(Level level); 
} 

level.tick(); // Safe to call if level can't be null 
Level.tick(level); // Safe to call in any case 

設計的應用程序,以便變量的值是沒有或只有在特殊情況下是null可以節省你大量的頭痛。

1

第一個相同的效果方法將調用不接受參數的Level類的非靜態函數。 第二種方法將調用期望類型爲Level的參數的Level類的靜態函數。

+1

第一個語法也可以調用一個沒有參數的靜態函數。 – Henry

+0

你不能有一個具有相同簽名的靜態方法 – Renjith

+0

沒錯,但沒有相同的簽名,'tick()'與'tick(Level)' – Henry

0

如果我理解正確的話,

我知道,由於Java作品引用對象,調用由傳遞水平作爲參數類的靜態函數肯定會爲「level.tick相同的效果( )」

Level.tick(level) 

並不會自動轉化到

level.tick() 

這隻有當你有一個靜態函數,它具有第二種形式作爲主體時纔有效。