【发布时间】:2019-02-19 11:47:04
【问题描述】:
我刚开始学习Java一个月左右,现在遇到“无法从静态上下文引用非静态变量studentList”的问题。我试图从 main 中使用一个单独的方法来填充学生列表,而不是从 addStudent 为每个学生复制粘贴内容;但我无法获得写入 ArrayList 的方法。 (错误:(14, 27) java: 不能从静态上下文引用非静态变量 studentList)。我了解数组不是静态的,因为它的大小未定义,但我怎样才能让它按原样工作?有没有更好的方法?我可以让数组成为主要方法的一部分,然后将它传递给 addStudent,如果可以的话怎么办?
import java.util.ArrayList;
public class Main {
ArrayList<Student> studentList = new ArrayList<>();
public static void main(String []args) {
addStudent("Adam", "Goldsmith", 70, 50);
addStudent("John", "Smith", 20, 40);
addStudent("Lewis", "Peterson", 90, 85);
for (Student obj: studentList){
System.out.println("Name: " + obj.studentForename + " "+ obj.studentSurname);
}
}
public static void addStudent(String forename, String surname, int coursework, int test) {
Student newStudent = new Student(forename, surname);
newStudent.setForename(forename);
newStudent.setSurname(surname);
newStudent.averageMark(70, 65);
studentList.add(newStudent);
}
}
和我的“学生”班:
public class Student {
String studentForename;
String studentSurname;
public Student(String studentForename, String studentSurname) {
setForename(studentForename);
setSurname(studentSurname);
}
// Set forename.
public void setForename(String newForename) {studentForename = newForename;}
// Set surname.
public void setSurname(String newSurname) {studentSurname = newSurname;}
//
public double averageMark(int courseworkMark, int testMark){
return (courseworkMark+testMark)/2;
}
// Grab the forename
public String grabForename(){
return studentForename;
}
// Grab the surname
public String grabSurname(){
return studentSurname;
}
// Grab the full name
public String grabFullName(){
return studentForename + "" + studentSurname;
}
}
【问题讨论】:
-
非静态变量属于你的实例(每次你使用
new Student()你创建一个)。静态变量属于您的类,这意味着它们在所有实例之间共享。您不能在静态上下文中使用实例变量,因为您没有实际的实例开始。如果您要通过其参数将一个传递给该方法,那么它将起作用 -
TLDR:让您的
studentList变量static使其工作