Java 表达的开始是非法的?

Java 表达的开始是非法的?,java,android,Java,Android,我正在尝试构建一个简单的Android应用程序,每次按下按钮时都会显示一个递增的数字,但我无法解决如何修复我一直遇到的“非法开始表达”错误 我的代码: package com.clicker; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public

我正在尝试构建一个简单的Android应用程序,每次按下按钮时都会显示一个递增的数字,但我无法解决如何修复我一直遇到的“非法开始表达”错误

我的代码:

package com.clicker;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class Clicker extends Activity
{
    private int clickerNumber = 0;
    private TextView clickerText;
    private Button clickerButton;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        clickerText = (TextView)findViewById(R.id.clickerText);
        final Button clickerButton = (Button)findViewById(R.id.clickerButton);
             clickerButton.setOnClickListener(new View.OnClickListener());
                {
                 public void onClick();
                    {
                    clickerNumber = clickerNumber++;
                    clickerText.setText(Integer.toString(clickerNumber));
                    }
                }
    }
}
和编译器输出:

compile:
[javac] Compiling 2 source files to /home/fraser/Applications/Android/Code/Clicker/bin/classes
[javac] /home/fraser/Applications/Android/Code/Clicker/src/com/clicker/Clicker.java:24: ')' expected
[javac]              clickerButton.setOnClickListener(new View.OnClickListener();
[javac]                                                                         ^
[javac] /home/fraser/Applications/Android/Code/Clicker/src/com/clicker/Clicker.java:26: illegal start of expression
[javac]                  public void onClick();
[javac]                  ^
[javac] /home/fraser/Applications/Android/Code/Clicker/src/com/clicker/Clicker.java:26: illegal start of expression
[javac]                  public void onClick();
[javac]                         ^
[javac] /home/fraser/Applications/Android/Code/Clicker/src/com/clicker/Clicker.java:26: ';' expected
[javac]                  public void onClick();
[javac]                                     ^
[javac] /home/fraser/Applications/Android/Code/Clicker/src/com/clicker/Clicker.java:29: ';' expected
[javac]                     clickerText.setText(Integer.toString(clickerNumber)));
[javac]                                                                         ^
[javac] 5 errors

您有一些不需要的分号:

clickerButton.setOnClickListener(new View.OnClickListener());

public void onClick();
要修复语法错误,请执行以下操作:

clickerButton.setOnClickListener(new View.OnClickListener() {
    public void onClick() {
        clickerNumber = clickerNumber + 1;
        clickerText.setText(Integer.toString(clickerNumber));
    }
});
您的缩进似乎是错误的,这可能是造成混淆的部分原因。使用编辑器的自动缩进来捕获这些类型的错误

但是请注意,上面的代码仍然不起作用,因为在匿名类中,您无法访问非final的局部变量。因此,您无法访问
clickerNumber
。如果你让它成为最终版本,那也帮不了你多少忙,因为那样你就无法改变它的价值。您可以将计数器提升为成员变量


我还建议,在尝试编写Android应用程序之前,首先要遵循标准Java教程,并确保理解Java的基本语法。您会发现,大多数Android教程都假设您已经很好地理解了编写标准Java应用程序。

我注意到一件事,您不需要:

clickerNumber = clickerNumber++;
因为++运算符处理赋值。试着简单地说:

clickerNumber++;

虽然我应该提到这不是你问题的原因,但我想这只是一个提示。

这不仅是不必要的,也是“错误的”(请参阅)<代码>单击编号将具有与分配后(post)增量之前相同的值。更好的是,将大括号移动到行尾的正确位置。这样一来,错误将是显而易见的。您将拥有标准化和更好的代码布局。“您实际上不能这样做,因为clickerNumber必须是最终的。”对不起,我不明白您的意思。有人能解释一下吗?