2017-07-19 69 views
0

我是新來的,我很抱歉,如果這是一個糟糕的問題要問。但我想知道這兩個版本的代碼之間的區別。Toast.makeText(...)和toastObj.makeText(...)爲什麼運行不同?

1)這一個將允許Toast瞬間改變。

public Toast toast; 
public void showToast(String text) 
{ 
    if (toast != null) 
    { 
     toast.cancel(); 
    } 
    toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG); 
    toast.show(); 
} 

2)這個不會瞬間改變。

public Toast toast; 
public void showToast(String text) 
{ 
    if (toast != null) 
    { 
     toast.cancel(); 
    } 
    toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show(); 
} 

爲什麼它必須是Toast class.makeText而不是toastObject.makeText? 還是因爲show()方法必須是分開的? 我還是Java和Android的新手,有人能解釋兩者之間的根本區別嗎?提前致謝。

+1

fyi,if將永遠不會被輸入,即'toast'將始終爲空。它已被聲明但未被實例化。 –

+1

'toast!= null'將會如何通過,它總是爲空。另外這怎麼不會崩潰你的應用程序,因爲它應該是 – tyczj

+0

'makeText()'被聲明爲'static',[見文檔](https://developer.android.com/reference/android/widget/Toast.html#makeText (android.content.Context,int,int),所以它沒有被類的實例引用 –

回答

1

這是因爲makeText()來自其導入爲

import android.widget.Toast; 

所以,它是一個靜態方法,因此,它需要通過類名被稱爲麪包類。

.show(); 

不一定是獨立的。

所以,

toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show(); 

會工作。

+1

打我吧。基本上,靜態/命名空間與實例 – oooyaya

+0

@oooyaya是: ) –

+0

對象仍然可以調用我知道的靜態方法,但爲什麼它不以相同的方式運行? –

0

實際上makeText()方法Toast類是一種靜態方法。

所以,如果我們必須訪問一個靜態方法,我們必須調用ClassName.method()

在這裏,我們也在做Toast類,因爲makeText()是一個靜態方法。