а @non статический метод нельзя ссылаться из статического контекста [duplicate]

На этот вопрос уже есть ответ:

На нестатическую переменную нельзя ссылаться из статического контекста 12 ответов

Приведенный ниже код находится в основном классе пакета, который я пытаюсь создать. Он ссылается на объекты и методы из вспомогательного класса под названием Journey. По зовуjourneyCost метод в строке, помеченной звездочками Я получаю сообщение об ошибке «Нестатический метод не может быть указан в статическом контексте». Это смутило меня, так как у меня сложилось впечатление, что объект Journey "thisJourney", созданный во второй строке, представляет собой экземпляр класса и, следовательно, означает, что контекст не является статичным. Заранее спасибо, Seany.

public boolean journey(int date, int time, int busNumber, int journeyType){
        Journey thisJourney = new Journey(date, time, busNumber, journeyType);

        if (thisJourney.isInSequence(date, time) == false)
        {
            return false;            
        }
        else
        {
            Journey.updateCurrentCharges(date);

            thisJourney.costOfJourney = Journey.journeyCost(thisJourney);***** 
            Journey.dayCharge = Journey.dayCharge + thisJourney.costOfJourney;
            Journey.weekCharge = Journey.weekCharge + thisJourney.costOfJourney;
            Journey.monthCharge = Journey.monthCharge + thisJourney.costOfJourney;

            Balance = Balance - thisJourney.costOfJourney;
            jArray.add(thisJourney);
        }

    } 

Ответы на вопрос(6)

менят

Journey.journeyCost(....)

К

thisJourny.journyCost(...........)

ваш JournyCost - нестатический метод Journy clss, поэтому вы должны вызывать этот метод через его объект, который является ThisJourny

используя имя класса, вы можете получить доступ только к статические участники или может вызвать статические методы этого класса.

ь изменить все будущие расходы на поездку с помощью последних трех строк (и это будет предполагать, что это статические значения)

thisJourney.costOfJourney = thisJourney.journeyCost();//dont know why you are passing the journey object to this method.
Journey.dayCharge = Journey.dayCharge + thisJourney.costOfJourney;
Journey.weekCharge = Journey.weekCharge + thisJourney.costOfJourney;
Journey.monthCharge = Journey.monthCharge + thisJourney.costOfJourney;

Эти три последние строки все еще нуждаются в работе, я не знаю, почему вы пытаетесь изменить статическую переменную. Попробуйте вместо этого, если вы просто хотите установить расходы наthisJourney

thisJourney.dayCharge = Journey.dayCharge + thisJourney.costOfJourney;
thisJourney.weekCharge = Journey.weekCharge + thisJourney.costOfJourney;
thisJourney.monthCharge = Journey.monthCharge + thisJourney.costOfJourney;

Хотя даже при этом значения заряда должны быть постоянными. Вы действительно не должны смешивать статический класс и класс экземпляра одного и того же типа, обмениваясь их использованием.

метод tripCost (Путешествие в путешествие) должен быть статическим?

что вы пытаетесь вызывать нестатический метод статическим способом, как, например, этот:

 Journey.journeyCost(thisJourney);

ЯвляетсяjourneyCost() объявлен статическим? Разве вы не имеете в виду вместоthisJourney.journeyCost()?

Плюс, вы должны использовать методы получения и установки для изменения и доступа к переменным-членам, поэтому вместо:

Journey.dayCharge = ...

у тебя должно быт

Journey.setDayCharge(Journey.getDayCharge() + thisJourney.getCostOfJourney());

(setDayCharge а такжеgetDayCharge в этом случае нужно быть статичным)

someMethod является статическим методом. «Путешествие» в статическом контексте. thisJourney находится в нестатическом контексте, потому что это экземпляр. Поэтому вы должны использовать

    thisJourney.updateCurrentCharges(date);

journeyCost не является статичным; так что это метод экземпляра, и он требует экземпляраJourney чтобы казнить. ПриговорJourney.journeyCost(thisJourney); вызывает метод статическим способом, и он ожидает, что ваш метод является методом уровня класса (или статическим).

Так, ты можешь сделать свойjourneyCost метод статический для вашего звонка на работу:

public static boolean journey(int date, int time, int busNumber, int journeyType)

Или попробуйте вызвать метод из правильного экземпляра:

Journey aJourneyInstance = new Journey();
thisJourney.costOfJourney = aJourneyInstance.journeyCost(thisJourney);

ВАШ ОТВЕТ НА ВОПРОС