我目前正在从事Java任务,由于某种原因,它可以工作 - 但在我看来,它不应该!我所拥有的是一个主要方法,通过调用创建三个新按钮
panel.add(new ButtonApp());
Run Code Online (Sandbox Code Playgroud)
ButtonApp是我的ButtonApp类中定义的构造函数.
在我的课程开始时,我有一个声明如下的变量:
public int clicks = 0;
Run Code Online (Sandbox Code Playgroud)
此变量的目的是跟踪用户单击其特定ButtonApp的次数.每次点击后都会调用点击++.
现在,在我看来,每次单击按钮时,点击变量shoudl都会增加,因此,如果单击左键,它也会增加中间和右侧按钮.
基本上我所拥有的快速短伪代码是:
public class ButtonApp() {
public int clicks =0;
public static void main(String[] args) {
//create JPanel/Frame etc etc
panel.add(new ButtonApp());
panel.add(new ButtonApp());
panel.add(new ButtonApp());
}
public ButtonApp(){
//creates a new button
this.actionListener(this);
}
public void update(){
clicks++;
}
public void actionPerformed (ActionEvent event){
update();
}
}
Run Code Online (Sandbox Code Playgroud)
我不总是clicks在这里增加一个变量吗?
我不总是在这里增加一个点击变量吗?
不,您正在处理实例变量.每个对象创建一个此变量的副本new
如果您将代码更改为:
public static int clicks =0;
Run Code Online (Sandbox Code Playgroud)
您确实只有一个可以多次更改的变量(静态字段属于该类,实例字段属于该实例)
参考:
(全部来自Java教程>学习Java语言>类和对象部分)
new()创建类'DATA的实例 - 即任何成员变量.代码不重复.在您的情况下,每个类都有自己的"点击"成员变量.
如果你声明clicks了static,那么它将是一个"类变量",属于类本身而不是它的实例,然后只有一个副本.但是,您没有将其声明为静态,因此每个实例(即由new()创建的每个"事物")都会获得自己的副本.