有人可以向我解释一下有关调用方法的一件事。当我在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方法。为什么会这样?
答案 0 :(得分:0)
在Java中,当您在同一类中调用另一个方法时,不需要通过其类对象进行引用。
在同一类中调用方法时,可以直接访问方法。
答案 1 :(得分:0)
这都是范围的问题。在第一个示例中,您试图从另一个类method()
中使用类Test
中的方法Question
。
在第二个示例中,您可以直接调用prepareResult()
,因为发出该调用的方法onCreate()
属于同一类SecondActivity
。
之所以可行,是因为它们本质上在同一个作用域中。特定类中的所有方法和变量之间都是可见的。该类的可见性外部取决于访问修饰符public
,private
,protected
或默认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();
}
}