Java 如何在方法之外使用变量

Java 如何在方法之外使用变量,java,android,Java,Android,如何将char1从onCreate方法传递到另一个方法中——在本例中,将其传递到selectChar2中?我能把char1和char2做成全球的还是什么?我不知道该怎么做。请帮忙 private String char1,char2; // does this even do anything? I thought this would let me use char1 and char2 anywhere. @Override protected void onCreate(Bundle s

如何将char1从onCreate方法传递到另一个方法中——在本例中,将其传递到selectChar2中?我能把char1和char2做成全球的还是什么?我不知道该怎么做。请帮忙

private String char1,char2; // does this even do anything? I thought this would let me use char1 and char2 anywhere.

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

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String char1 = (String) extras.getString("char1"); //is the (String) necessary?

        TextView textView = (TextView) findViewById(R.id.header);

        textView.setText(char1+" vs "+"char2");

    }


}

public void selectChar2(View v) {
    Button btn = (Button)v;
    String char2 = btn.getText().toString();
    Intent intent = new Intent(PickChar2.this, DisplayMatchUp.class);
    Bundle extras = new Bundle();

    extras.putString("Character1",char1); //char1 here is null...how do I get the value from the method above?
    extras.putString("Character2", char2);

    intent.putExtras(extras);
    startActivity(intent);

实际上,您已经声明并使用了两个独立的变量:

  • 一个实例变量:char1
  • 局部变量:char1
  • 1的作用域是类实例(它可以在类中的任何非静态作用域中访问)。2在定义它的块中的范围。在这种情况下,只需不创建局部变量,而使用实例变量

        char1 = (String) extras.getString("char1");
    

    实际上,您已经声明并使用了两个独立的变量:

  • 一个实例变量:char1
  • 局部变量:char1
  • 1的作用域是类实例(它可以在类中的任何非静态作用域中访问)。2在定义它的块中的范围。在这种情况下,只需不创建局部变量,而使用实例变量

        char1 = (String) extras.getString("char1");
    

    您可能应该将其公开,或将其作为两种方法中的参数。

    您可能应该将其公开,或将其作为两种方法中的参数。

    在程序顶部,您正在创建一个全局变量
    char1

    private String char1,char2;
    
    但是在
    onCreate()
    方法中,您有以下行

    String char1 = (String) extras.getString("char1");
    
    行首的单词字符串正在创建一个名为
    char1
    的局部变量,该变量与在程序顶部创建的全局变量
    char1
    相分离

    您需要删除
    字符串
    ,这样就简单了

    char1 = (String) extras.getString("char1");
    

    通过这样做,您现在将把值分配给程序顶部的全局变量,从而可以在该类中任意位置使用它。

    在程序顶部,您正在创建一个全局变量
    char1

    private String char1,char2;
    
    但是在
    onCreate()
    方法中,您有以下行

    String char1 = (String) extras.getString("char1");
    
    行首的单词字符串正在创建一个名为
    char1
    的局部变量,该变量与在程序顶部创建的全局变量
    char1
    相分离

    您需要删除
    字符串
    ,这样就简单了

    char1 = (String) extras.getString("char1");
    

    通过执行此操作,您现在将把值分配给程序顶部的全局变量,从而可以在该类中任意位置使用它。

    您已经将变量声明为全局变量,但后来声明了具有相同名称的局部变量。将改用局部变量。要确保使用全局变量,请使用“this”关键字

    指全局变量char2

    char2
    

    引用局部变量char2

    您已经将变量声明为全局变量,但后来您使用相同的名称声明了局部变量。将改用局部变量。要确保使用全局变量,请使用“this”关键字

    char2
    
    指全局变量char2

    char2
    

    引用局部变量char2

    char1&char2已经是全局变量,这意味着它们在类的任何部分中都可用于引用目的,静态方法除外将它们公开以供使用simplicity@MocialovBoris从技术上讲,
    char1
    char2
    是成员变量。Java没有真正的全局变量。但是,您的要点仍然正确:它们在
    onCreate()
    selectChar2()
    方法中都可用。不需要
    (String)
    ,因为
    getString()
    返回一个
    字符串。我强烈建议您熟悉提供此类信息的API文档。@MonadNewb我应该更加小心地使用诸如:实例、全局、成员、字段变量等术语。始终交替使用它们。我相信更多的是语言特定的术语,而不是理论上的术语,cschar1和char2已经是全局的,这意味着它们在类的任何部分都可以用于引用目的,静态方法除外,将它们公开以供参考simplicity@MocialovBoris从技术上讲,
    char1
    char2
    是成员变量。Java没有真正的全局变量。但是,您的要点仍然正确:它们在
    onCreate()
    selectChar2()
    方法中都可用。不需要
    (String)
    ,因为
    getString()
    返回一个
    字符串。我强烈建议您熟悉提供此类信息的API文档。@MonadNewb我应该更加小心地使用诸如:实例、全局、成员、字段变量等术语。始终交替使用它们。我相信这是更具体的语言术语,而不是理论上的csso,只是为了确保我理解正确。我实际上做的是用局部变量覆盖实例变量?顺便说一句,什么是实例变量?@user2498691您可能想尝试一些Java教程。实例变量是拥有的,或者与类实例关联。我不会说你写得太多了。这意味着只有一个值,而你改变了它。实际上有两个完全不同的变量。他们外表看起来有相同的名字,但是你必须考虑范围。所以,只是为了确保我理解正确。我实际上做的是用局部变量覆盖实例变量?顺便说一句,什么是实例变量?@user2498691您可能想尝试一些Java教程。实例变量是拥有的,或者与类实例关联。我不会说你写得太多了。这意味着只有一个值,而你改变了它。实际上有两个完全不同的变量。它们向外看起来有相同的名称,但是你也必须考虑范围。(字符串)部分做什么?在这种情况下,什么也没有。这并不完全正确,但出于学习目的,
    (字符串)char2