使用String时,构造函数不能应用于给定类型

时间:2017-02-11 12:46:23

标签: java

任何人都可以告诉我在创建一个construtor来调用另一个类文件中的方法时出错了。它告诉我构造函数不能应用于给定的类型

3 个答案:

答案 0 :(得分:1)

如果从Student类中删除构造函数声明,则隐式空构造函数将存在。 但是如果你明确声明了像public Student(String firstname, String surname, String total)这样的构造函数,那么空构造函数将无法使用,除非你明确地将它添加到你的类中。

public Student() { };

然后你调用不存在的方法:

newStudent.firstName("my name");

您要在Student对象中声明的方法是setFirstName(String firstName)

最后在println调用中,您试图直接访问对象的attribut而不是使用getters方法。

答案 1 :(得分:0)

你的学生班不像你那样有一个空的构造函数:

Student newStudent = new Student();

所以你有一个构造函数应该采用三个字符串:

public Student(String firstname, String surname, String total) {

因此,要解决您的问题,您有两种方法:

第一

创建一个不带任何属性的空构造函数:

public Student() {
}

您可以使用setAtt设置值,例如:

newStudent.setFirstName("my name");

2ED

您应该使用以下三个值调用构造函数:

Student newStudent = new Student("name 1", "name 2", "name 3");

注意

您无法为另一个类中的属性设置值,如下所示:

newStudent.firstName("my name");

你可以这样:

newStudent.firstName = "my name";

答案 2 :(得分:0)

我为纠正代码做了一些更改:

public class Main {
    public static void main(String[] args) {
        Student newStudent = new Student("Toto", "FromStack");
        newStudent.setFirstName("Jack");
        System.out.println(newStudent.getFirstName());
        System.out.println(newStudent.getSurname());
        System.out.println(newStudent.getFullName());
    }
}
  • 您必须使用大量参数调用constructor

  • 首选将参数的可见性设置为private(查看Student)并使用Getters访问它们

  • 还可以使用Setters更改值

在这里:

public class Student {
    private String firstName;
    private String surname;

    public Student(String firstname, String surname) {
        this.firstName = firstname;
        this.surname = surname;
    }
    // First Name GETTER
    public String getFirstName() {
        return firstName;
    }
    // First Name SETTER
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    // Surname GETTER
    public String getSurname() {
        return surname;
    }
    // Surname SETTER
    public void setSurname(String surname) {
        this.surname = surname;
    }
    //Full Name GETTER
    public String getFullName() {
        return firstName+" "+surname;
    }
}
  • 如果您正在使用Eclipse IDE,它可以为您创建Getters和Setters(在Source中)

  • 您不需要total attribut,因为它只是其他2个的连接,您永远不会单独更改它,如果它发生更改,则会因为其中一个更改attributs,只有一个getFulName(),它将取回两个名字

最后,如果你想在之后设置值,你可以创建一个空构造函数,=""每个

都不是“null”值
 public Student() {
            this.firstName = "";
            this.surname = "";
    }