Вопрос по java, static, object, methods, call – На нестатический метод (имя метода ()) нельзя ссылаться из статического контекста. Зачем?

1

Я действительно запутался с этим! У меня 2 класса,Club а такжеMembership, В членстве у меня есть метод,getMonth(), а в клубе у меняjoinedMonth() который принимает параметр «месяц»; - поэтому пользователь вводит месяц, а затем я хочу, чтобы он возвратил членство, которое присоединилось в этот конкретный месяц.

Я пытаюсь вызвать метод getMonth () из класса Club, чтобы затем я мог сравнить целые числа месяцев. Но когда я пытаюсь вызвать метод, я просто получаю упомянутый «нестатический метод getMonth (), на который нельзя ссылаться из статического контекста».

В принципе, что это такое и как я могу решить это?

Заранее спасибо!

Клуб:

public class Club
{
    private ArrayList<Membership> members;
    private int month;

    /**
     * Constructor for objects of class Club
     */
    public Club()
    {
        // Initialise any fields here ...

    }

    /**
     * Add a new member to the club's list of members.
     * @param member The member object to be added.
     */
    public void join(Membership member)
    {
        members.add(member);
    }

    /**
     * @return The number of members (Membership objects) in
     *         the club.
     */
    public int numberOfMembers()
    {
        return members.size();
    }


        /**
    * Determine the number of members who joined in the given month
    * @param month The month we are interested in.
    * @return The number of members
    */
    public int joinedMonth(int month){

        Membership.getMonth();

    }



}

Состав:

public class Membership
{
    // The name of the member.
    private String name;
    // The month in which the membership was taken out.
    public int month;
    // The year in which the membership was taken out.
    private int year;

    /**
     * Constructor for objects of class Membership.
     * @param name The name of the member.
     * @param month The month in which they joined. (1 ... 12)
     * @param year The year in which they joined.
     */
    public Membership(String name, int month, int year)
        throws IllegalArgumentException
    {
        if(month < 1 || month > 12) {
            throw new IllegalArgumentException(
                "Month " + month + " out of range. Must be in the range 1 ... 12");
        }
        this.name = name;
        this.month = month;
        this.year = year;
    }

    /**
     * @return The member's name.
     */
    public String getName()
    {
        return name;
    }

    /**
     * @return The month in which the member joined.
     *         A value in the range 1 ... 12
     */
    public int getMonth()
    {
        return month;
    }

    /**
     * @return The year in which the member joined.
     */
    public int getYear()
    {
        return year;
    }

    /**
     * @return A string representation of this membership.
     */
    public String toString()
    {
        return "Name: " + name +
               " joined in month " +
               month + " of " + year;
    }
}

Ваш Ответ

3   ответа
0

Доступ к статическому методу можно получить с помощью имени класса. В приведенном выше коде вы пытаетесь получить доступgetMonth() метод с именем классаMembership (Membership.getMonth ()). Но подпись getMonth ()public int getMonth(){...}, здесь этот метод не содержит никакого статического ключевого слова. Из-за этого вы получаете"non-static method getMonth() cannot be referenced from a static context".

Чтобы решить эту проблему, мы должны изменить public int getMonth () на public static int getMonth () или использовать объект, который вы уже создали для класса Membership.

Надеюсь, это полезно.

4

Membership это класс. Вызов методов возможен только в том случае, если метод является статическим. ВашgetMonth Метод не является статическим, поэтому вам понадобится экземплярMembership класс, чтобы назвать это. У вас уже есть список экземпляров в вашемClub класс, поэтому выберите один из них и позвонитеgetMonth в теме.

Привет, большое спасибо за ваш ответ! Но я не уверен, как вы относитесь к тому, что вы упомянули? MalvEarp
Хорошо, позвольте мне сказать это так:Which Membership экземпляр & APOS; sgetMonth метод должен быть вызван? Подумайте, как это будет работать в реальном мире, если это вам поможет: у вас есть папка, полная информации о членстве. Теперь вы хотите знать, сколько участников присоединились к определенному месяцу. Чем ты занимаешься? Вы, наверное, посмотрите на каждую запись и посчитаете, сколько соответствует месяцу, который вы хотите. Вы должны сделать то же самое, выражая это как программу. Но то, что делает ваша программа, смотрит на папку в течение месяца и затем игнорирует ее. (нет цели дляgetMonth, нет возвращаемого значения)
0

Модификатор статики делает метод / поле частью класса, а не объекта (экземпляра). Вы вызываете его, используя имя класса в качестве ссылки (или ссылку на объект, но это плохая практика). Если метод / поле не является статическим, его необходимо вызывать посредством ссылки на объект класса (экземпляр).

Похожие вопросы