如果变量是静态的,我如何将它们分配给类构造函数



我遇到了一个问题,我使用了一个方法来接收用户数据,而该方法是返回一个对象。问题是,每当我把输入的值分配给类构造函数时,我都会遇到一条错误消息,上面写着";非静态变量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();
    }
    

    }

  • 如果要使用没有Project1Student类,则必须将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;
}

然而,对于对象创建来说,使用实际的构造函数可以说更简单

相关内容

最新更新