Android Studio Java - 我应该使用哪个修改器?

Android Studio Java - Which modifier should I use?

我是 Android Studio 和 Java 的新手,所以请多多包涵。

我正在制作一个应用程序,您可以在其中通过飞镖游戏记分。我有一个点击按钮的 s 语句。当按下回车按钮时,我希望它在使用一个参数(即输入)的同时转到另一个 Java 文件。显然我同时使用静态和非静态方法,这是错误的。我该如何解决这个问题?

这是我的第一个 java 文件, 来自屏幕文件:

package com.example.jeroe.darts;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity; 
import android.view.View;
import android.widget.TextView;
import com.example.jeroe.darts.Score;


public class MatchScreen extends AppCompatActivity implements View.OnClickListener{

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

    DefineEventHandlers();
}

public void onClick(View v) {
    TextView InputTrue = (TextView) findViewById(R.id.TextviewInput);
    TextView editTextScore = (TextView) findViewById(R.id.editTextScore);
    switch (v.getId()) {
        case R.id.TextViewInnerbull:
            editTextScore.append("50");
            break;
        case R.id.TextViewOuterBull:
            editTextScore.append("25");
            break;
        case R.id.TextViewClear:
            editTextScore.setText("");
            break;
        case R.id.TextViewEnter:

            Score.enter(editTextScore.getText());
            // here i get an error:
            //non-static method 'enter(charsequence)' cannot be referenced from a static context

    }
}

public void DefineEventHandlers()
{
    // declare textviews Player 1
    TextView TextViewPL1Score = (TextView) findViewById(R.id.TextViewPL1Score);
    TextView PL1Dart1 = (TextView) findViewById(R.id.PL1Dart1);
    TextView PL1Dart2 = (TextView) findViewById(R.id.PL1Dart2);
    TextView PL1Dart3 = (TextView) findViewById(R.id.PL1Dart3);

    // declare textviews Player 2
    TextView TextViewPL2Score = (TextView) findViewById(R.id.TextViewPL2Score);
    TextView PL2Dart1 = (TextView) findViewById(R.id.PL2Dart1);
    TextView PL2Dart2 = (TextView) findViewById(R.id.PL2Dart2);
    TextView PL2Dart3 = (TextView) findViewById(R.id.PL2Dart3);

    //T20, bulls
    TextView TextViewOuterBull = (TextView) findViewById(R.id.TextViewOuterBull);
    TextViewOuterBull.setOnClickListener(this);
    TextView TextViewInnerBull = (TextView) findViewById(R.id.TextViewInnerbull);
    TextViewInnerBull.setOnClickListener(this);

    //Enter, backspace
    TextView TextViewClear = (TextView) findViewById(R.id.TextViewClear);
    TextViewClear.setOnClickListener(this);
    TextView TextViewEnter = (TextView) findViewById(R.id.TextViewEnter);
    TextViewEnter.setOnClickListener(this);
}

} //end of the file

然后我需要它转到另一个名为 score.java 的文件。在这里,我希望它保留分数和其他一些东西:

package com.example.jeroe.darts;

public class Score {
int PL1Score = 501;
boolean player1 = true;

public void enter(CharSequence input) {

    int IntInput = InputConverter(input);

    if (player1 == true) //de input is = player 1
    {
        // do something
    }
}



public int InputConverter(CharSequence input) {
    int Input = Integer.parseInt(input.toString());
    return Input;
}

}

我该如何解决这个问题?

//non-static method 'enter(charsequence)' cannot be referenced from a static context

这意味着您需要一个 Score 的实例:

Score score = new Score();
score.enter(editTextScore.getText());

如果你想 "go to your second java file" 你的意思是:你想根据你的 class 分数实例化一个新对象。

如果你有这个对象,如Gavriel所述,你可以调用声明的方法。

静态变量或方法存在于 class 的上下文中,而不存在于对象实例的上下文中:例如,您可以定义一个静态字段来计算所有创建的对象实例以及您创建的每个对象创建可以访问此静态字段并访问其内容。

一个class的成员变量只能在具体对象的上下文中访问,静态字段可以被所有对象使用。所以同时使用静态和非静态方法并没有错,但是你应该在正确的上下文中使用它们。

用一个简短的例子说明,会更清楚。

public class Example {

   public static int instanceCounter = 0;

   private String memberVariable = null;

   public Example(String memberValue) {
      Example.instanceCounter++;
      this.memberVariable = memberValue;
   }

   public String getMemberVariable() {
      return this.memberVariable;
   }

   public static void main(String[] args) {
      System.out.println(Example.instanceCounter);

      Example ex1 = new Example("value1");
      Example ex2 = new Example("value2");
      Example ex3 = new Example("value3");

      System.out.println(ex1.getMemberVariable());
      System.out.println(ex2.getMemberVariable());
      System.out.println(ex3.getMemberVariable());

      System.out.println(Example.instanceCounter);
   }

}

如果执行 class 会产生以下输出:

0
value1
value2
value3
3

如您所见,这三个对象确实具有三个同名的不同成员字段,并且每个对象的同一字段可以具有不同的值。但是静态字段 instanceCounter 只存在一次,并且可以在 class 上下文中访问,而根本没有对象存在。