这将是一个令人尴尬的问题,但我是Java的新手。
我有一个使用此代码实现ActionListener
的类:
public class Shop1 implements ActionListener{
public void actionPerformed(ActionEvent event){
int alis = 0;
alis++;
System.out.println(alis);
}
}
每次按下按钮,都会显示1
。我知道每次按下按钮都会将整数设置为0
,并添加1
,但我尝试将整数放在类之外,但这次它不会识别int
1}}。
答案 0 :(得分:3)
您在此处看到的内容(变量始终为0)是由变量 scope 引起的。
在Java中,变量具有块范围,这意味着它们仅在创建它们的块(以及该块中的任何块)中有效。一个简单示例:
public void scope1(){
if (something){
int myint = 1;
// possibly some other code here...
}
System.out.println(myint); // This will not compile, myint is not known in this scope!
int myint = 1; // Declare myint in this scope
System.out.println(myint); // now it works.
}
正如您在此处所看到的,第一个myint
在if-blocks 范围中声明,导致它在if-block之外无效。 myint
的第二个定义对整个方法块(在创建它的行之后)有效。
回到您的问题:您正在创建的变量具有actionPerformed()
- 方法的块范围。因此,当该方法返回时,该变量将不再有效,并且它的值将消失。再次输入方法时,将在该范围内创建一个新变量。
要按照您想要的方式处理它,请移动变量" up"到比方法更高的范围。我建议在Shop1
:
public class Shop1 implements ActionListener{
private int alis;
public void actionPerformed(ActionEvent event){
alis++; // the variable is defined in the classes scope, so the values is "kept"
System.out.println(alis);
}
}
如果有任何不清楚的地方,请发表评论!