尽管实现了构造函数,但构造函数缺少错误

时间:2020-01-20 00:53:25

标签: java constructor

我从以下代码中得到了这个构造函数未定义的错误:

def last_day_month(year, month):
    leap_year_flag = 0
    end_dates = {
        1: 31,
        2: 28,
        3: 31,
        4: 30,
        5: 31,
        6: 30,
        7: 31,
        8: 31,
        9: 30,
        10: 31,
        11: 30,
        12: 31
    }

    # Checking for regular leap year    
    if year % 4 == 0:
        leap_year_flag = 1
    else:
        leap_year_flag = 0

    # Checking for century leap year    
    if year % 100 == 0:
        if year % 400 == 0:
            leap_year_flag = 1
        else:
            leap_year_flag = 0
    else:
        pass

    # return end date of the year-month
    if leap_year_flag == 1 and month == 2:
        return 29
    elif leap_year_flag == 1 and month != 2:
        return end_dates[month]
    else:
        return end_dates[month]

谁能解释我为什么会出现这样的错误?我相信我已经在学生类

中完成了构造定义
package arrayClassObject;

public class Constructor {
    public class Student{
        String name;
        public Student() {

        }
        public Student(String name) {
            this.name = name;
        }
        void setName(String name) { // setter
            this.name = name; 
        }   
        public String getName() { // getter
            return name;
        }

        }   
    public static void main(String[] args) {        
        Student s = new Student();
        s.setName("Jack");
        System.out.println(s.getName());
    }

}

2 个答案:

答案 0 :(得分:3)

当您有一个非静态内部类时,仅当存在该封闭类的实例时才可以创建一个实例。因此,在不更改上面的class structures的情况下,您需要执行以下操作:

Constructor c = new Constructor(); // instance of the enclosing class
Student s = c.new Student();       // special syntax 
s.setName("Jack");
System.out.println(s.getName());

答案 1 :(得分:0)

您将Student定义为封闭类Constructor的嵌套内部类。 由于Student是非静态的,因此它只能与Constructor的关联实例一起存在。

有关嵌套类的更多信息,请参见Nested Classes (The Java™ Tutorials > Learning the Java Language > Classes and Objects)

有多种方法可以解决此问题。

  1. Student设为静态。这样,您就不需要Constructor的实例来创建Student

  2. 保持Student一个非静态内部类。然后,您首先需要构造一个Constructor的实例,以便与Student关联。 (new Constructor().new Student()

  3. Student移动到其自己的文件。可能不需要Student作为内部类。因此,只需将其设为常规课程即可。