В чём здесь ошибка? [закрыт]

122
15 октября 2019, 00:00
    public class Main {
    class Vehicle {
        int passengers; 
        int fuelcap;    
        int mpg;
        void range() {
            System.out.println("Range is " + fuelcap * mpg);
        }
    }
    class AddMeth {
        public static void main(String[] args) {
            Vehicle minivan = new Vehicle();
            Vehicle sportscar = new Vehicle();
            minivan.passengers = 7;
            minivan.fuelcap = 16;
            minivan.mpg = 21;
            sportscar.passengers = 2;
            sportscar.fuelcap = 14;
            sportscar.mpg = 12;
            System.out.print("Minivan can carry " + minivan.passengers + ". ");
            minivan.range(); 
            System.out.print("Sportscar can carry " + sportscar.passengers +  ". ");
            sportscar.range(); 
        }
    }
}

Вот код. При компиляции выдаёт ошибки:

Error:(17, 31) java: non-static variable this cannot be referenced from a static context
Error:(18, 33) java: non-static variable this cannot be referenced from a static context
Error:(16, 28) java: Illegal static declaration in inner class Main.AddMeth
  modifier 'static' is only allowed in constant variable declarations
Answer 1

Для запуска программы внешний (единственный в файле публичный) класс должен называться так же, как и файл, и он должен содержать статический метод

public static void main(String[] args) {
  // Делаете здесь, что надо   
}

Этот метод является точкой входа в программу. Статические методы не могут обращаться к нестатическим переменным или методам. Следовательно, вам нужно либо все методы и переменные объявлять как статические, либо в коде статического метода создать экземпляр какого-либо класса (можно того же самого), и вызывать нестатический метод этого экземпляра, который будет делать всё, что вам надо, используя нестатические члены (переменные и методы экземпляра). Например, так:

public class Main {
  public static void main(String[] args) { // Точка входа
    new Main().run(args);      // Создаем объект и вызываем его метод run() 
  }
  int i, j; // Переменные экземпляра 
  void run(String... args) {  // Метод экземпляра
    // Делаете здесь, что надо   
    i = j = 123; // В методе экземпляра можно использовать переменные экземпляра 
    anotherInstanceMethod(); // И вызывать другие методы экземпляра  
  }
  void anotherInstanceMethod() {
    System.out.format("i = %d, j = %d\n", i, j);
  }
} // public class Main {

Ну и советую всё-таки почитать учебники, тогда у вас таких вопросов (за которые, как видите, здесь минусуют) возникать не будет -- там все это написано.

READ ALSO
Добавление iFrame на PrimeFace страницу

Добавление iFrame на PrimeFace страницу

Вот в чем вопрос: хочу вывести iFrame с обзором pdf, написал сервлет который отвечает за высылку информации (так как сам pdf находится не в папке...

127
Как сделать эффект чтобы было понятно ,что скриншот сделан

Как сделать эффект чтобы было понятно ,что скриншот сделан

У меня есть кнопка которая делает скриншотКак сделать какой-то эффект, чтобы было понятно ,что скриншот сделан

130
Почему дублируется диалог?

Почему дублируется диалог?

Почему дублируется диалог? Если запустить меню, выбрать доход, ввести доход, закрыть диалог, закрыть ввод дохода, в меню выбрать доход, ввести...

146
Грамотное API, underscoreCase, camelCase

Грамотное API, underscoreCase, camelCase

В vuejs мы создали объект для отправки, json, давая имена через camelCase

107