Вопрос по java, oop – Нестатический метод не может ссылаться из статического контекста [дубликат]

1

This question already has an answer here:

Код ниже встречается в основном классе пакета, который я пытаюсь создать. Он ссылается на объекты и методы из вспомогательного класса под названием 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);
        }

    } 
Пожалуйста, опубликуйте (снова ...) весь след стека: P m0skit0

Ваш Ответ

6   ответов
1

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

    thisJourney.updateCurrentCharges(date);
5

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

 Journey.journeyCost(thisJourney);

ЯвляетсяjourneyCost() объявлен статическим? Не имеешь в виду вместо этогоthisJourney.journeyCost()?

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

Journey.dayCharge = ...

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

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

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

3

менять

Journey.journeyCost(....)

в

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

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

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

3

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

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;

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

1

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

1

МетодjourneyCost не является статичным; так что это метод экземпляра, и он требует экземпляраJourney казнить. ПриговорJourney.journeyCost(thisJourney); is invoking the method in a static way, and its expecting that your method is a class-level method (or static).

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

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

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

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

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