没有引用变量的调用方法

时间:2019-07-12 00:58:08

标签: java android-studio

有人可以向我解释一下有关调用方法的一件事。当我在Neatbeans上学习时,调用方法总是使用引用变量完成的,例如,我必须在该变量之前创建一个真实的对象。

public class Question {


    public static void main(String[] args) {

        Test test = new Test();
        test.method();

    }

}

class Test {

    void method() {

        System.out.println("Test");
    }
}

在这种情况下,我必须创建一个对象,将其引用分配给测试变量,然后调用该方法。

但是,在Android Studio中,要调用方法,我不必创建引用变量或对象,我只需直接调用该方法...例如:

public class SecondActivity extends AppCompatActivity {

    EditText editText;
    Button button2;
    String name;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        editText = findViewById(R.id.editText);
        button2 = findViewById(R.id.button);

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                prepareResult();
            }
        });

    }

    public void prepareResult() {

        Intent i = new Intent();
        name = editText.getText().toString();
        i.putExtra("name", name);
        setResult(RESULT_OK, i);
        finish();
    }
}

在这种情况下,我没有创建对象,也没有将其引用分配给'X'变量,所以我立即调用prepareResult方法。为什么会这样?

3 个答案:

答案 0 :(得分:0)

在Java中,当您在同一类中调用另一个方法时,不需要通过其类对象进行引用。

在同一类中调用方法时,可以直接访问方法。

答案 1 :(得分:0)

这都是范围的问题。在第一个示例中,您试图从另一个类method()中使用类Test中的方法Question

在第二个示例中,您可以直接调用prepareResult(),因为发出该调用的方法onCreate()属于同一类SecondActivity

之所以可行,是因为它们本质上在同一个作用域中。特定类中的所有方法和变量之间都是可见的。该类的可见性外部取决于访问修饰符publicprivateprotected或默认package-private

您可以在此Oracle Java教程中找到更多详细信息:

https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

答案 2 :(得分:0)

在Java中,只要您调用活动之外的函数,就在调用。您必须使用引用变量来调用其他类构造函数来构建对象。可以根据您的情况进行。  测试测试= new Test();  测试方法();       要么  新的Test()。method();

无论何时调用位于同一类内的函数(在定义函数的位置内),都可以直接使用其名称直接调用,因为您不必调用已创建的类的构造函数。就像您在其他代码中所做的一样。

您可以在这里看到班级没有变化。

public class SecondActivity extends AppCompatActivity {

    EditText editText;
    Button button2;
    String name;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        editText = findViewById(R.id.editText);
        button2 = findViewById(R.id.button);

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                prepareResult();
            }
        });

    }

    public void prepareResult() {

        Intent i = new Intent();
        name = editText.getText().toString();
        i.putExtra("name", name);
        setResult(RESULT_OK, i);
        finish();
    }
}