Ошибка “main metod is not static in class”

110
26 июля 2019, 04:00

Изучаю Java и столкнулся с проблемой запуска программы. Я убрал static из класса main, т.к код не хотел компилироваться, а теперь выдает ошибку

main metod is not static in class MyDog

public class MyDog {    
    class Dog {
        String name;
        int size;
        String breed;
        void bark(){
            System.out.println("Woof!");
        }
    }
    public void main (String[] args) {
        Dog ray=new Dog();
        ray.size=30;
        ray.bark();
    }
}
Answer 1

public static void main(Sting[] args) и static class Dog

Answer 2

У вас класс Dog вложен в класс MyDog. Обычно при создании экземпляра (объекта) вложенного класса этот экземпляр получает ссылку на экземпляр (объект) внешнего класса. Это нужно для того, чтобы объект вложенного класса имел доступ к переменным объекта внешнего класса. У вас в методе main создается объект класса Dog: Dog ray=new Dog();, но метод main -- статический, то есть работает без создания объекта, поэтому ссылка на объект класса MyDog не существует. Именно об этом говорит сообщение об ошибке, которое вы привели.

С другой стороны, метод main обязан быть статическим, поскольку это точка входа в программу, и программа должна начать работу до того, как вы сможете создать хоть какой-то объект.

Выход -- сделать статическим и вложенный класс. Статические вложенные классы не имеют связи с объектами тех классов, в которые они вложены, и поэтому ссылка на объект внешнего класса им не нужна, то есть их можно создавать в коде статических методов. Именно это и посоветовал вам Sergi.

Другое возможное решение -- описать класс Dog не внутри класса MyDog, а вне его. Тогда при создании объекта ссылка на объект внешнего класса будет не нужна, т. к. в таком случае для класса Dog внешнего класса не существует.

READ ALSO
Spring не использует прокси

Spring не использует прокси

В чужом проекте столкнулся со странной работой спринга, которой не могу найти объясненияПерестало выполняться сохранение в бд, пошёл посмотреть...

126
Android NSD. Как отправить сообщение от сервера ко всем, подключенным к нему клиентам

Android NSD. Как отправить сообщение от сервера ко всем, подключенным к нему клиентам

В одном месте мне нужно передать строку от сервера ко всем клиентам, которые к нему подключеныЯ могу отправить строку от клиента к серверу,...

135
JavaFX, ccs border с анимацией

JavaFX, ccs border с анимацией

Имею простейший BorderPane с рамкой, заданной с помощью таблицы стилей css:

130
Бесконечно создаётся тело box2d

Бесконечно создаётся тело box2d

Динамическое тело ball должно создаваться один раз, но вместо этого происходит вот это:

113