从类内部调用对象的方法与在方法内调用方法

sot*_*i84 6 java

这可能是一个非常基本的问题,但在Java学习的这个阶段让我感到困惑.我有以下代码:

    package com.soti84;

    import java.util.ArrayList;

    public class InvokeMethod {

    public static void main(String[] args) {

    ArrayList<String> exams= new ArrayList<String>();
    exams.add("Java"); 
    exams.add("C#");    

    }           

    }
Run Code Online (Sandbox Code Playgroud)

如果我移动实例化ArrayList对象的行以及该方法外部对该对象的调用,则创建该对象的行很好,但不允许对该对象执行add()方法调用.这是为什么?

    package com.soti84;

    import java.util.ArrayList;

    public class InvokeMethod {
    ArrayList<String> exams= new ArrayList<String>();
    exams.add("Java"); 
    exams.add("C#");    

    public static void main(String[] args) {

    }   

    }
Run Code Online (Sandbox Code Playgroud)

谢谢.

Sha*_*dov 3

您根本无法在方法之外执行该代码。如果你想这样做,你将需要初始化块或静态块。

public class InvokeMethod {
    ArrayList<String> exams= new ArrayList<String>();
    {
      exams.add("Java"); 
      exams.add("C#"); 
    }
Run Code Online (Sandbox Code Playgroud)

现在,当您创建实例时,该块将被执行。如果您的变量是静态的,您可以将该块设为静态(只需static在该块之前添加)。静态块将在您的类初始化时执行。当您需要填充的静态列表/地图时,这些块可能非常方便。当然,在编程中方便的一切都可能是一种不好的做法,同样在这里,这些块被一些人皱眉,它们可能非常危险并导致难以发现的错误(主要是关于执行顺序)。