public class first {
ArrayList<String> al= new ArrayList<String>();
al.add("Batman"); //it doesn't work
public static void main(String[] args) {
}
}
为什么不允许在main之外使用add方法?
答案 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体系结构,您无法在方法之外编写任何逻辑语句