您正在尝试在可执行上下文之外执行代码。代码只能从方法、静态初始化程序或实例初始化程序(感谢 NickC)上下文中执行。
尝试将其移入main
开始的方法中...
public static void main(String[] args) {
ArrayList<Student> rayList = new ArrayList<Student>();
rayList.add(new Student("Sam", 17));
rayList.add(new Student("Sandra", 18));
rayList.add(new Student("Billy", 16));
rayList.add(new Student("Greg", 17));
rayList.add(new Student("Jill", 18));
System.out.println(rayList.get(0));
}
根据反馈更新
您的第一个错误Cannot make a static reference to the non-static field rayList
是因为rayList
未声明而生成的static
,但您试图从static
上下文中引用它。
// Not static
ArrayList<Student> rayList = new ArrayList<Student>();
// Is static
public static void main(String[] args) {
// Can not be resolved.
System.out.println(rayList.get(0));
}
rayList
被声明为“实例”字段/变量,这意味着它需要声明类 ( Student
) 的实例才能有意义。
这可以通过...解决
创建Student
in的实例main
并通过该实例访问它,例如...
public static void main(String[] args) {
Student student = new Student(...);
//...
System.out.println(student.rayList.get(0));
}
就个人而言,我不喜欢这个,rayList
并不真正属于Student
,它没有任何价值。Student
您能想象在将任何添加到 之前必须创建一个实例List
吗?
我也不喜欢直接访问实例字段,但这是个人喜好。
制造rayList
static
static ArrayList<Student> rayList = new ArrayList<Student>();
// Is static
public static void main(String[] args) {
//...
System.out.println(rayList.get(0));
}
这是一个可行的选择,但需要更多的上下文才能被视为好或坏。我个人认为,static
字段可能会导致比它们解决的问题更多的问题,但同样,这是个人观点,您的上下文可能认为是一个合理的解决方案。
List
或者,您可以在方法的上下文中创建一个本地实例,static
如第一个示例所示。
public static void main(String[] args) {
ArrayList<Student> rayList = new ArrayList<Student>();
//...
System.out.println(rayList.get(0));
}
正如我所说,你选择做哪一个将取决于你,我个人更喜欢最后两个,但那就是我。