Относится ли метод main к какому-либо классу? - PullRequest
10 голосов
/ 27 мая 2010

Относится ли метод main к какому-либо классу?

Ответы [ 13 ]

18 голосов
/ 27 мая 2010

Это относится к классу. Посмотрите на любую реализацию hello-world, и она будет вам понятна.

public static void main(String[] args) {
    System.out.println("Hello World");
}

не скомпилируется как есть. Вы должны поместить class HelloWorld { ... } вокруг него, и в этом случае вы можете сказать, что основной метод «принадлежит» классу HelloWorld.

Однако, поскольку он статический , он не принадлежит ни одному конкретному объекту . Между классами и объектами есть важное различие, с которым вам нужно познакомиться при работе с объектно-ориентированными языками. Изучение Java: объекты и классы является хорошей отправной точкой.

3 голосов
/ 27 мая 2010

Да. Каждый метод или поле должны принадлежать классу (или интерфейсу / перечислению).

2 голосов
/ 27 мая 2010

Если вы имеете в виду, принадлежит ли он к каждому классу, это не так. Он принадлежит к классу, где вы его определяете.

Но любой класс может иметь статический метод main.

2 голосов
/ 27 мая 2010

Каждая строка кода Java (кроме import / package) живет в классе (или является объявлением класса / интерфейса). Так же, как и main.

1 голос
/ 09 июня 2012

Основной метод в Java принадлежит классу, но не объекту.Объекты создаются во время выполнения.Таким образом, поскольку основной main() в Java является отправной точкой в ​​вашем приложении, нет способа запустить ваше приложение с помощью метода, специфичного для экземпляра.Вот почему ключевое слово static имеет смысл с основным методом.На самом деле все части объявления метода main имеют смысл, когда вы думаете как jvm и представляете, что делает метод main (запускает приложение):

  • public, потому что этот методдолжен быть доступен для jvm (не написано вами).
  • static, подразумевая, что к этому методу можно получить доступ без объекта (потому что его представление никогда не меняется), но здесь логика понятна, если вы снова будете думать как jvm;«У меня нет объектов для создания (создания экземпляров) объектов, поэтому мне нужен статический метод для запуска приложения, поскольку просто не существует логического способа запустить метод, специфичный для экземпляра, поскольку у меня ничего нетеще не для создания объектов ".
  • void Этот метод не может логически вернуть что-либо, потому что пока ничего не возвращено.Это начальная точка приложения.
  • main Я основной метод, поскольку без меня у вас не будет приложения.
  • String[] args Пришлите мне данные, которые могут оказаться полезнымидля моего запуска.
1 голос
/ 27 мая 2010

Он должен принадлежать классу, как и любой другой метод, и он должен находиться в классе, который вы хотите выполнить после компиляции.

Программы могут начинаться только с выполнения класса, который имеет метод main (примечание: это применимо для большинства типов Java-приложений. Например, апплеты работают по-разному)

1 голос
/ 27 мая 2010

Как упоминалось ранее, это часть класса , но не класса

Если ваш класс в пакете "unnammed" или "default" , ваш основной метод не будет вызывать любые другие классы Java из этого исходного класса с его основным () метод.
Хотя он может работать, он значительно ограничит то, что вы можете сделать в этом методе main.

Так что не используйте любой класс (т. Е. Не один в пакете по умолчанию)

1 голос
/ 27 мая 2010

Любой класс в Java может иметь открытый статический void main (аргументы String []). Основная функция, объявленная внутри класса (как и любой другой статический метод), принадлежит определению класса, но не его экземпляру.

Если вы создаете файл JAR из коллекции классов, вы можете указать, какой класс в JAR содержит основной метод приложения в META-INF / Manifest.mf, используя

Main-Class: fully qualified name of class (example: ie.mycode.MyApp)

При запуске команды

java -jar [your jar file]

Он просмотрит манифест и начнет выполнять код, указанный в main для объекта Main-Class.

1 голос
/ 27 мая 2010

В Java любое приложение должно иметь метод main в любом из классов. И это должно быть точно по формуле:

public static void main(String[] args)

Подробнее на официальных уроках .

0 голосов
/ 13 апреля 2018

Мы часто используем интерфейсы для определения определенных контрактов. Как и интерфейс Runnable, который определяет метод run (), который будет вызываться исполнителями. В качестве альтернативы это может быть класс с абстрактным методом, концептуально он такой же.

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

Однако метод main () отличается. Его «контракт» определяется не интерфейсом, а спецификацией, то есть спецификацией языка Java. Весь §12 посвящен выполнению, а §12.1.4 определяет «контракт» для метода main ().

Следует отметить, что нередко определенные "контракты" определяются не интерфейсами или абстрактными методами, а формальной спецификацией. Другим примером этого являются методы readObject () и writeObject ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...