Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么按钮在OnClick中初始化,即使它没有';你不能访问OnCreate,它实际上是在哪里初始化的?_Java_Android_Initialization_Declaration - Fatal编程技术网

Java 为什么按钮在OnClick中初始化,即使它没有';你不能访问OnCreate,它实际上是在哪里初始化的?

Java 为什么按钮在OnClick中初始化,即使它没有';你不能访问OnCreate,它实际上是在哪里初始化的?,java,android,initialization,declaration,Java,Android,Initialization,Declaration,我试图更好地理解声明和初始化,但我并不真正理解为什么您可以在OnClick中更改按钮的文本,即使它没有访问OnCreate的权限,因为它是另一个函数 在onCreate中声明变量时,它不起作用,但只有初始化起作用。请解释原因。谢谢 package com.example.myapplication; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Vi

我试图更好地理解声明和初始化,但我并不真正理解为什么您可以在OnClick中更改按钮的文本,即使它没有访问OnCreate的权限,因为它是另一个函数

在onCreate中声明变量时,它不起作用,但只有初始化起作用。请解释原因。谢谢


package com.example.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button)findViewById(R.id.Button);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        btn.setText("Sample Text");
    }
}

因此,我试图弄明白为什么您可以更改按钮的文本,即使它尚未在OnClick中初始化。非常感谢它已初始化。看到变量btn了吗?它位于类级别,而不是函数内部。这意味着变量存储在类的实例中,而不是堆栈上,并且将在对同一类实例的函数调用之间保持不变。由于onClick将在与onCreate相同的实例上调用,因此当您在onCreate中初始化它时,它将保持初始化状态。因此,当调用onClick时,该值已经设置。

您有一个
按钮
(按钮btn;)
,当前该按钮为空,因此您无法对其执行任何操作

onCreate
中,您的按钮已初始化(
btn=(按钮)findviewbyd(R.id.button);
),现在您可以分配它,单击 监听器和您一样-
btn.setOnClickListener(这个)

setOnClickListener
的意思是-单击此按钮时称为
onClick
方法

onClick
中,您可以更改文本


因此,我试图弄明白为什么您可以更改按钮的文本,即使它尚未在OnClick中初始化

您的
btn
在类级别上是全局变量,这意味着您可以从类中的方法访问它,
onCreate
是第一个将被调用的对象(这就是为什么您在那里单击按钮的原因)
在初始化按钮之后,您可以更改按钮文本。

因此,如果我在类中定义了一个变量,并且一个函数初始化了它,那么其他函数可以使用它,因为它们在同一个类中。对,对。如果在函数中定义它,那么它只能在该函数中使用(下次调用该函数时,您会得到一个新版本-变量不会保留)。一个有趣的例子是,如果您在函数中定义了一个与类变量同名的变量,那么使用该名称表示函数中定义的该变量的版本,并且您必须使用this.name来表示类变量的版本(这会让人困惑,因此认为这样做是不好的做法).Nitpick-它不是一个全局变量,Java没有这些变量。它是MainActivity类上的一个实例变量。如果您稍后创建另一个MainActivity,它将在再次调用onCreate之前不会初始化,并且它将具有与第一个实例不同的值。@Gabe,我只能同意您的意见,谢谢您指出这一点-我不想泄露任何误导性信息。