2017-07-19 67 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()是一个静态方法。