我遇到了一个问题,我使用了一个方法来接收用户数据,而该方法是返回一个对象。问题是,每当我把输入的值分配给类构造函数时,我都会遇到一条错误消息,上面写着";非静态变量this不能从静态上下文中引用"我知道我的方法是使用public static[返回值]声明的,这最终导致了这个问题。不过,作为这个项目的一部分,我必须将这些方法保持为静态。这让我以某种方式操纵类或类构造函数,但我不确定如何做到这一点。
这是类和类构造函数:
public class Project1 {
public class Student {
String name;
String ID;
float GPA;
int creditHours;
double tuitionCost;
public static Student (String name, String ID, float GPA, int creditHours, double tuitionCost) {
this.name = name;
this.ID = ID;
this.GPA = GPA;
this.creditHours = creditHours;
this.tuitionCost = tuitionCost;
}
}
这就是我试图将用户输入的数据分配给类构造函数的方式。
Student ret = new Student();
ret.name = name;
ret.ID = ID;
ret.GPA = GPA;
ret.creditHours = creditHours;
ret.tuitionCost = tuitionCost;
return ret;
如果在其中读取值的方法是静态的,我如何将从用户(使用Scanner(读取的值分配给类构造函数?
注意:我是Java新手,所以我的一些术语可能有点不太对劲
-
Java
中不允许使用static
构造函数 -
那么您的
Student
类是而不是静态的,这意味着它可以仅与父Project1
一起创建。公共类Project1{
public class Student { public Student() { } } public static void main(String... args) { Project1 project1 = new Project1(); Student student = project1.new Student(); }
}
-
如果要使用没有
Project1
的Student
类,则必须将Student
类设为statis
。公共类Project1{
public static class Student { public Student() { } } public static void main(String... args) { Student student = new Project1.Student(); }
}
问题的标题看起来很简单,但描述很混乱:
如果变量是静态的,我如何将它们分配给类构造函数?
根据我的理解,如果你想在构造函数中分配一些静态变量,那么首先你的类中应该有静态变量,而这些变量似乎是缺失的。但是你还缺少一些东西。
java中没有静态构造函数,您可能需要参考:
为什么构造函数不能是静态的或者我们可以定义静态构造函数吗
我怀疑你发布的代码片段是否会编译,因为编译器应该抛出一个错误,因为类中永远不会有静态构造函数。
现在来谈谈你的实际问题:
如果读取值的方法是静态的,我如何将从用户(使用Scanner(读取的值分配给类构造函数?
我稍微修改了你的代码以解决你的问题:
package com.sopra.banking.compliance.report.backend.common.bean;
import java.util.Scanner;
public class Test
{
public static class Student
{
String name;
public Student()
{
}
public Student(String name)
{
Student student = readValues();
this.name = student.name;
}
static Student readValues()
{
Scanner sc = new Scanner(System.in);
Student student = new Student();
String name = sc.next();
student.name = name;
return student;
}
}
}
附带说明一下,您有一个内部类,如果您想在内部类中定义一个静态方法,则需要将该类设置为静态。
构造函数不能是静态的。方法可以。
如果你需要一个返回Student的静态方法,它看起来像
public static Student buildStudent(String name, String ID, float GPA, int creditHours, double tuitionCost) {
Student ret = new Student();
ret.name = name;
ret.ID = ID;
ret.GPA = GPA;
ret.creditHours = creditHours;
ret.tuitionCost = tuitionCost;
return ret;
}
然而,对于对象创建来说,使用实际的构造函数可以说更简单