我想多次上一堂课,可以说我有一堂课
public class setTextClass {
public void setTextClass (String text){
this.text = text;
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textview.setText(text);
}
public void run{
textview.setText(text);
}
}
所以,正如我所看到的,如果我初始化类,则要做:
setTextClass hi = new setTextClass("hello");
onCreate上的代码会正确运行吗? (这是我的第一个问题)
然后,如果我运行代码:
hi.run()
将执行run方法上的代码,并且还将传递初始化时分配的文本变量。这是我的第二个问题。我正在学习Java,很抱歉,如果这是一个非常基本的问题
答案 0 :(得分:2)
首先,在Stack Overflow答案中很难解决基本的Java和Android错误观念。 不是针对此类问题的,这就是为什么您会投票否决。因此,我会尽力为您提供帮助:
第一个答案:“ onCreate上的代码会正确运行吗?(这是我的第一个问题)”
不。您可能由于Android的Activity类中的onCreate
方法而感到困惑,对吧?但是构造器是Java中所有类的通用方法,而onCreate
是特定于某些Android复杂类(例如Activity或Fragment)的方法。这是与这些类的生命周期相关的方法,您应该详细了解here。
因此,在您显示的这个简单类中,不会在构造函数中调用onCreate(除非您在构造函数中显式调用它)。您应该将文本分配给构造函数中的textView。
第二个问题:“将通过run方法执行代码,并且还会传递在初始化时分配的文本变量吗?”
是的,它将运行并使用在构造函数上分配给this.text
的变量。但是,您缺少此全局变量的声明才能起作用:
public class setTextClass {
private TextView textView;
private String text; // You have to declare your global variables here
public void setTextClass (TextView textView, String text){ // You should pass your TextView in the constructor and assign it to your global variable, so it's not null when you assign text to it;
this.textView = textView;
this.text = text;
textview.setText(text); // Moved from your onCreate method to the constructor
}
public void run{
textview.setText(text);
}
}
我希望我能弄清楚自己,但是您应该学习更多的Java知识,并做一些基础教程以更好地理解该语言及其概念,因此您可以在此处提出更具体的问题。 Read here about classes, objects, constructors and more
答案 1 :(得分:1)
初始化时,您的onCreate函数将不会运行:
setTextClass hi = new setTextClass("hello");
相反,它将作为其构造函数运行(它不应具有返回类型,因为其返回类型是对象本身),即:
public setTextClass (String text){
this.text = text;
}
第二个问题是文本变量,该变量仅存在于构造函数或setTextClass方法的范围内。因此,如果您想执行类似的操作,则需要创建并设置一个类变量。
似乎您需要做更多的学习,并仔细研究一下OOP设计和范围的例子。如果我是我,我会检查这些资源: