【问题标题】:How to run a class multiple times?如何多次运行课程?
【发布时间】:2018-08-08 20:03:54
【问题描述】:

我想多次运行一个课程,假设我有一个课程

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,如果这是一个非常基本的问题,对不起

【问题讨论】:

  • 等等,这个类扩展了什么?如果不在构造函数中调用onCreate(...),将如何在创建对象时神奇地调用?
  • 尝试先阅读一些java教程,你甚至混淆了java和android。 onCreate 是 Android 框架调用的生命周期方法。在普通的 java 对象中没有 onCreate 这样的东西。

标签: java android class


【解决方案1】:

首先,在 Stack Overflow 答案中很难解决基本的 java 和 Android 误解问题。 SO 不适用于此类问题,这就是您投反对票的原因。所以,话虽如此,我会尽力帮助你:

第一个答案:“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

【讨论】:

  • 您的回答肯定清楚了我所有的问题,是的,我正在混合使用 Android 和 Java,因为 onCreate 是 Android Activity 的一部分,而不是明确来自 Java。当然我会更多地学习,谢谢你的回答
【解决方案2】:

当您进行初始化时,您的 onCreate 函数将不会运行:

setTextClass hi = new setTextClass("hello");

而不是作为它的构造函数运行(它不应该有返回类型,因为它的返回类型是对象本身)即:

 public setTextClass (String text){
     this.text = text;
 }

而至于第二个问题的text变量,那个变量只存在于构造函数或者setTextClass方法的范围内。因此,如果您想做类似的事情,您需要创建并设置一个类变量。

您似乎需要做更多的学习并阅读 OOP 设计和范围的示例。如果我是你,我会查看这些资源:

http://www.learnjavaonline.org/en/Objects

http://www.learnjavaonline.org/en/Functions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    相关资源
    最近更新 更多