Android Studio Java - 我应该使用哪种修饰符?

时间:2016-02-07 20:48:23

标签: java android android-studio static access-modifiers

我是Android Studio和Java的新手,请耐心等待。

我正在创建一个应用程序,你可以用dart游戏保持分数。我有一个switch语句,单击该按钮。当按下回车按钮时,我希望它在使用一个参数(即输入)时转到另一个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;
}

}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

这意味着你需要一个得分实例:

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

答案 1 :(得分:0)

如果你想"转到你的第二个java文件"你的意思是:你想根据你的课程分数来实例化一个新的对象。

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

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

类的成员变量只能在具体对象的上下文中访问,所有对象都可以使用静态字段。因此,使用静态和非静态方法都没有错,但您应该在正确的上下文中使用它们。

以简短的例子说明,它将变得更加清晰。

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);
   }

}

如果执行该类,则会生成以下输出:

0
value1
value2
value3
3

正如您所看到的,这三个对象确实有三个具有相同名称的不同成员字段,并且每个对象可以具有相同字段的不同值。但静态字段instanceCounter只存在一次,可以在类上下文中访问,而根本不存在任何对象。