为什么我们不能在main()方法之外向ArrayList添加元素?

时间:2016-04-21 03:37:25

标签: java arraylist

public class first {

    ArrayList<String> al= new ArrayList<String>();
    al.add("Batman");          //it doesn't work
    public static void main(String[] args) {

    }
}

为什么不允许在main之外使用add方法?

7 个答案:

答案 0 :(得分:2)

我不知道为什么Java语言的创建者得出他们所做的结论,所以不幸的是我能给出的最佳答案是:由于Java语言(编译器)不允许你这样做,所以无法完成做到这一点。

这是一个类似的问题:initializer block

答案 1 :(得分:1)

class具有以下结构:attributes(您的arraylist)后跟functions(如main())。

要对attribute进行任何操作,必须在function内完成。这样做是因为它是以这种方式设计的。

答案 2 :(得分:1)

你缺少括号。

试试这段代码:

public class first {

    ArrayList<String> al= new ArrayList<String>();
    {
          al.add("Batman");  
    }        

    public static void main(String[] args) {

    }
}

答案 3 :(得分:1)

“al”是类“first”的实例变量,并且没有声明类“first”的对象,即使是main函数也无法添加任何内容。

如果你必须在main函数之外添加任何东西而不创建类的对象,那么该实例必须是静态的,然后你可以通过将它放在花括号中来添加字符串。

ArrayList<String> al = new ArrayList<>();

{
    al.add("names");
}

答案 4 :(得分:1)

这是Java的基本概念或Java的体系结构,您只能在类中声明变量和方法。所有与功能相关的工作应仅在功能中完成。

您可以在此类链接中引用类别定义http://www.tutorialspoint.com/java/java_object_classes.htm

答案 5 :(得分:1)

工厂方法流利构建器等模式在java中非常有用,如果不存在构造函数,因为它们允许您在同一个表达式中声明,实例化和初始化对象

以下是您案例的示例:

List<String> l = java.util.Arrays.asList("Batman");

ArrayList<String> al = new ArrayList<String>(java.util.Arrays.asList("Batman"));

ArrayList<String> al = com.google.common.collect.Lists.newArrayList("Batman");

最后一个示例使用Guava库。它具有适用于所有类型的Java集合的工厂方法和/或构建器。

答案 6 :(得分:1)

根据Java体系结构,您无法在方法之外编写任何逻辑语句