Java 为什么简单的for循环在onCreate方法中有效,而在MainActivity类中无效?

Java 为什么简单的for循环在onCreate方法中有效,而在MainActivity类中无效?,java,android,syntax-error,Java,Android,Syntax Error,我正在学习Android,在Android的主活动类中遇到了一个异常的循环行为。考虑下面的代码: public class MainActivity extends AppCompatActivity { int game_board[][] = new int[3][3]; int limit = 3; for(int row = 0; row < limit; row++){ for(int column = 0; column < lim

我正在学习Android,在Android的主活动类中遇到了一个异常的循环行为。考虑下面的代码:

public class MainActivity extends AppCompatActivity {
int game_board[][] = new int[3][3];    
    int limit = 3;
    for(int row = 0; row < limit; row++){
        for(int column = 0; column < limit; column++){
            game_board[row][column] = -1;
        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        for(int row = 0; row < limit; row++){
            for(int column = 0; column < limit; column++){
                game_board[row][column] = -1;
            }
        }
    }
}
MainActivity类中的for循环给了我一个编译时错误列表,所有这些错误都是语法性的,例如:error:expected,error:“;”应为循环的外部行。但是相同的嵌套for循环在onCreate方法中没有引起任何错误


发生这种情况的原因是什么?它是与UI线程有关还是只是一个基本概念?也重新启动了Android Studio,但仍然遇到同样的问题。提前感谢。

这与UI线程无关-您不能直接将代码块放入类中。它必须驻留在方法、构造函数或初始值设定项块中。

不能在类中编写代码;代码必须放在方法中

  public class MainActivity extends AppCompatActivity {

     int game_board[][] = new int[3][3];   

     void name_void(){ 
            int limit = 3;
            for(int row = 0; row < limit; row++){
                for(int column = 0; column < limit; column++){
                    game_board[row][column] = -1;
                }
               }
              }

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

有些答案解释得很好。基本上你可以把方法放在一个类里面,它本身,它应该放在一个方法里面,就像你提到的,在onCreate里面

我认为在某些特殊情况下,您确实希望您的方法不依赖于其他方法,比如onCreate。这一次你可以考虑让你的方法为静态。p> 静态意味着一旦创建了这个类,这个方法就是注册的,并且它不会依赖于其他子方法来响应这个类的真实实例

以您的代码为例,首先将循环包装在一个静态带注释的方法中:

公共静态void doForLoop{ int game_board[][]=新int[3][3]; 整数极限=3; forint行=0;行<限制;行++{ forint列=0;列<限制;列++{ 游戏板[行][列]=-1; } } } 然后可以在类本身内部调用这个doForLoop方法


如果您愿意,您可以了解更多关于静态方法和静态变量的信息。

@RishabParmar是的-这些被称为Darn it!我错误地删除了我自己的评论。无论如何,对于任何引用此线程的人,我在这篇评论中提出的问题是,我们是否可以在类中的方法之外初始化/声明变量,您可以引用上面的评论作为答案。您不能在类中编写代码这没有意义,您可以在类中编写代码,只是不能在此类代码中编写: