gpt4 book ai didi

java - 我的 ArrayList 无法识别我添加到列表中的内容

转载 作者:行者123 更新时间:2023-12-01 07:08:05 25 4
gpt4 key购买 nike

这是代码本身

import java.util.ArrayList;

public class Student {
private String name;
private int age;

public Student (String n, int a) {
name = n;
age = a;

}

public String toString() {
return name + " is " + age + " years old";
}

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));

public static void main(String[] args) {
System.out.println(rayList.get(0));
}

}

main 方法中缺少一些 println 命令。但是当我尝试将 5 个学生添加到我的 ArrayList 时,我收到错误“无法对非静态字段 rayList 进行静态引用”

最佳答案

您正在尝试在可执行上下文之外执行代码。代码只能从方法、静态初始化程序或实例初始化程序(感谢 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));
}

根据反馈进行更新

您的第一个错误无法对非静态字段rayList进行静态引用已生成,因为rayList未声明为静态,但是您试图从静态上下文中引用它。

// 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) 的实例才能有意义。

这可以通过...解决

main 中创建 Student 实例并通过该实例访问它,例如...

public static void main(String[] args) {
Student student = new Student(...);
//...
System.out.println(student.rayList.get(0));
}

就我个人而言,我不喜欢这个,rayList并不真正属于Student,它没有增加任何值(value)。您能想象在将任何内容添加到 List 之前必须创建 Student 的实例吗?

我也不喜欢直接访问实例字段,但这是个人偏好。

制作rayList 静态

static ArrayList<Student> rayList = new ArrayList<Student>();
// Is static
public static void main(String[] args) {
//...
System.out.println(rayList.get(0));
}

这是一个可行的选择,但需要更多背景信息才能被视为好或坏。我个人认为静态字段可能会导致比它们解决的问题更多的问题,但同样,这只是个人意见,您的上下文可能认为是一个合理的解决方案。

或者,您可以在 static 方法的上下文中创建 List 的本地实例,如第一个示例所示。

public static void main(String[] args) {
ArrayList<Student> rayList = new ArrayList<Student>();
//...
System.out.println(rayList.get(0));
}

正如我所说,你选择做哪一个将取决于你自己,我个人更喜欢后两个,但这就是我。

关于java - 我的 ArrayList 无法识别我添加到列表中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19044383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com