Oc-windows.ru

IT Новости из мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Функция main java

1.5 Первая программа Java

1.5 Первая программа Java

Теперь давайте посмотрим на простую программу, написанную на языке Java.

1.5.1 Программа Hello World!

1.5.2 Описание «Hello World»

Теперь подробно разберёмся в коде и попробуем понять его синтаксис.
import j ava.io.*;

Команда импорта в программе говорит компилятору, где искать файл класса, который мы используем в нашем коде. Он включает определение на класс, в котором мы нуждаемся для выполнения кода, io — пакет, который всегда находится в папке по имени Java, и этот пакет в свою очередь имеет номера классов, которые имеют множество методов. Эти методы могут использоваться в нашем коде, если мы импортируем пакет.
// This is a simple program called HelloJava.java

Это — строка комментария, которая игнорируется компилятором. Java также поддерживает многострочные комментарии. Подобные комментарии должны начаться с/* и заканчиваться на */например следующие:
/* ;statementl
statement 2 */
class HelloWorld <

Эта строка объявляет класс по имени HelloWorld. При создании класса используется ключевое слово class вместе с именем класса/именем файла.

Обратите внимание: принято, чтобы имя класса начиналось с заглавной буквы.

Ключевое слово >
public static void main(String args[ ])

Ключевое слово main() — основной метод. Это — строка, с которой начинается выполнение программы. Все приложения Java должны иметь один метод main(). Давайте расшифруем каждое слово в коде.

Ключевое слово public — это спецификатор доступа. Спецификаторы доступа будут рассмотрены в последующих главах. Когда члену класса предшествует public, то к этому члену возможен доступ из кода, внешнего по отношению к классу, в котором описан данный метод. В данном случае, main метод объявлен как public так, чтобы JVM мог обратиться к этому методу.

Ключевое слово static позволяет методу main() вызываться без потребности создавать образец класса. К объекту класса нельзя обратиться, не создав это. Но в этом случае, есть копия этого метода, доступного в памяти после того, как класс расположен, даже если не был создан образец этого класса. Это важно, потому что JVM вызывает этот метод в первую очередь. Следовательно этот метод должен быть как static и не должен зависеть от экземпляров любого создаваемого класса.

Ключевое слово void говорит компилятору, что метод не возвращает никакого значения.

main ()— метод, который исполняет специфическую задачу. Это место с которого начинается выполнение всех приложений Java. Класс, который не имеет основного метода, может быть успешно откомпилирован, но не может быть выполнен, поскольку он не имеет отправной точки выполнения, которой является main() метод.

String args [ ] — один из параметров, который передаётся основному методу. Любая информация, которую мы передаём методу, получена переменными, которые упомянуты в пределах круглой скобки метода. Эти переменные — параметры этого метода. Даже если мы не должны передавать никакой информации методу, название метода должно сопровождаться пустыми круглыми скобками, args [ ] (переменная) — массив типа String. Параметры, которые передают в командной строке, сохранены в этом массиве. Открытие и закрытие изогнутой скобки для main метода составляют блок метода. Функции, которые будут выполнены от основного метода должны быть определены в этом блоке.
System.out.println( Welcome to the world of Java ) ;

Эта запись отображает строку экране. Вывод строки осуществляется с помощью метода println (). println () отображает только строку, которая передаётся со справкой System.out.

System — класс, который является предопределенным и обеспечивает доступ к системе.

out — выходной поток и связан с консолью.

Все инструкции в Java заканчиваются точкой с запятой (;).

Чтобы скомпилировать исходный текст, выполните команду javac, определяя название исходного файла в командной строке:

Рисунок 1.4: Компилирование файла a.java
Компилятор Java создает файл HelloWorld.class, который содержит байт-коды, и которые не могут быть непосредственно выполнены. Мы должны использовать интерпретатор Java, чтобы выполнить этот код-

Рисунок 1.5: Выполнение файла a.java

Вывод на экран отображается так:
Welcome to the world of Java

HelloWorld это не файл с расширением java или .class. Это только название класса.

Зона кода

Эту статью я написал несколько лет назад для другого сайта, но она так и не была опубликована. Тогда 7-я версия Java только-только появилась на свет, а 6-я была всё ещё актуальна. Статья адресована, в первую очередь тем, кто начинает знакомиться с языком Java. Я решил стряхнуть с неё пыль и опубликовать: пусть будет!

Здравствуйте, уважаемый читатель! Эта статья состоит из двух частей.

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

А вторая часть может быть интересна не только новичкам, но и тем, кто уже имеет некоторый опыт программирования на Java. В ней будут описаны несколько любопытных фактов, связанных с main() . Признаться, о некоторых из них я и сам узнал, уже имея за плечами 3 года работы с Java-технологиями. Это, кстати, говорит о том, что прекрасно можно обходиться и без знания этих фактов. Их ценность состоит лишь в том, что они действительно забавны.

Новичкам

Метод main() отличается от всех остальных методов тем, что является, как правило, точкой входа в программу. Этот метод вызывается виртуальной машиной Java. Как только заканчивается выполнение метода main() , так сразу же завершается, тем самым, работа самой программы.

Метод main() , так и любой другой метод, должен быть обязательно вложен в класс. После компиляции класс, содержащий метод main() , запускается на выполнение командой

Читать еще:  Preg replace javascript

Эта команда приводит к выполнению метода main() , вложенного в данный класс. Оговоримся, что после имени класса могут следовать параметры командной строки, которые будут обсуждаться ниже.

Метод main() должен объявляться в классе следующим образом:

Ключевое слово public означает, что метод main() доступен везде, где доступен содержащий его класс. Ключевое слово static означает, что метод является статическим, т. е. не требует для своего вызова наличие экземпляра класса. Ключевое слово void означает, что метод не возвращает никакого значения. Все эти три слова обязательно должны присутствовать в описании метода.

Запись ( String[] args ) после имени метода представляет собой список его параметров. Имеется лишь один параметр args , содержащий ссылку на массив строк. Этот массив формируется из строки, переданной классу, содержащему метод main() , при запуске этого класса на выполнение командой java.

Если строка передана не была, то массив args содержит 0 элементов. В противном случае строка разбивается на части, которые в строке отделёны друг от друга пробельными символами. Эти части будем в дальнейшем называть аргументами командной строки. Данными аргументами и заполняется массив args .

Вместо имени массива args можно использовать любое другое имя. Например, следующее описание main() вполне корректно.

Что касается типа и количества параметров метода main() , то они изменению не подлежат.

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

Рассмотрим пример, в котором на консоль построчно выводятся все аргументы командной строки, переданные программе при её запуске. Под программой в данном случае мы будем понимать класс, содержащий метод main() . Этот класс мы назовём MainTest . Вот его код:

Здесь в методе main() содержится цикл, поочерёдно перебирающий элементы массива args . Ссылки на элементы массива поочерёдно присваиваются переменной s и выводятся на консоль методом println() объекта System.out . Этот метод после каждого вывода осуществляет перевод строки.

Сохраним код класса MainTest в файле с именем MainTest.java и скомпилируем этот файл командой

В результате компиляции получаем файл MainTest.class . Запускаем его на выполнение с несколькими аргументами командной строки:

java MainTest Это всего лишь проверка!

Если нет проблем с отображением кириллицы, то в результате выполнения команды на консоль будет выведено:

Это
всего
лишь
проверка!

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

В следующем примере (весьма вычурном) метод main() рекурсивен. При каждом вызове метода, за исключением последнего, на печать выводится один аргумент командной строки.

Здесь в методе main() выясняется, не является ли пустым массив args . Если нет, то на печать выводится первый его элемент. После этого метод main() вызывается рекурсивно. В качестве параметра ему передаётся новый массив, отличающийся от старого отсутствием первого элемента. Если же массив args пуст, то работа main() на этом завершается.

Результат выполнение класса RexMain совпадает с результатом выполнения класса MainTest .

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

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

Новичкам и не только

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

В Интернете на форумах, посвящённых Java, я нередко встречал любопытную задачку: написать класс, метод main() которого имеет пустое тело, выводящий на консоль надпись “Hello world!”. Полагаю, что эта задача известна многим из тех, кто интересуется Java.

В основе решения задачи лежит использование статического блока, представляющего собой программный код, заключённый в фигурные скобки, которому предшествует ключевое слово static . Статический блок вкладывается в класс и исполняется при первом же обращении к классу, до выполнения любых методов класса, в том числе, и метода main() .

Статический блок имеет некоторое сходство со статическим методом. Отличается он от последнего тем, что не имеет имени, не принимает параметров, не возвращает значения (а значит, не может содержать инструкции return ) и не вызывается явно. Так же как и статический метод, статический блок может содержать обращения к статическим полям и методам класса.

Статические блоки используются редко. Как правило, в их задачи входит инициализация статических полей класса.

Ну а мы поместим в статический блок инструкцию вывода на консоль строки “Hello world!”:

Можно скомпилировать класс, запустить на выполнение и удостовериться в том, что с поставленной задачей он вполне успешно справляется.

Тот факт, что статический блок выполняется до метода main() , легко проверить, скомпилировав и выполнив следующий класс:

На консоль будет выведено:

Привет от static-блока!
Привет от метода main()!

Заметим, что задачу, поставленную в начале статьи, можно решить, не прибегая к использованию статического блока. Для этого достаточно написать статический метод, печатающий строку “Hello world!” и возвращающий значение какого-либо типа, например, типа int , после чего создать статическое поле того же типа, инициализирующееся посредством вызова данного метода.

Читать еще:  Java lang date

Дело в том, что инициализация статических полей происходит до выполнения любых статических методов, (и даже до выполнения статического блока). Исключением из этого правила является вызов статических методов в процессе инициализации. Поэтому метод, участвующий в инициализации, выполнится раньше main() .

Вот код, демонстрирующий данный подход:

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

Резонно задаться вопросом: а можно ли вообще обойтись без метода main() , пусть даже имеющего пустое тело? Для ответа на вопрос изменим класс HelloWorld , удалив из него main() :

И вот тут начинается самое интересное! Я компилировал и запускал этот класс с использованием комплектов разработки на языке Java (JDK) трёх разных версий: jdk1.6_021, jdk1.6_024 и jdk1.7.0_01. Во всех трёх случаях код компилировался без проблем. А вот с запуском класса проблемы возникали.

Для начала, оговорюсь, что каждый файл с расширением class запускался под управлением “своей” виртуальной машины Java, т. е. входящей в тот JDK, посредством которого этот файл был получен в результате компиляции.

Итак, в последних двух случаях на экран выводилась надпись:

Error: Main method not found in class WithoutMain, please define the main method as: public static void main(String[] args)

Таким образом, не выполнялся даже код, входящий в статический блок. А вот в первом случае на консоль выводилось следующее:

HelloWorld!
Exception in thread «main» java.lang.NoSuchMethodError: main

На этот раз виртуальная машина, всё же, выполняет статический блок и только после этого, не обнаружив метода main() , спохватывается и выдаёт по данному поводу ругательство. Можно ли избежать сообщения об исключении? Оказывается, можно!

Для этого достаточно после инструкции печати вызвать статический метод exit() класса System . Данный метод прерывает работу виртуальной машины и возвращает родительскому процессу (как правило, операционной системе) целое значение, переданное методу в качестве аргумента. Считается, что ненулевое значение свидетельствует об аварийном прерывании.

Итак, ниже приведён код работоспособной программы, не содержащей метода main() .

Выполнение программы приводит к следующему выводу на консоль:

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

Создание (определение) функции

Пора научиться создавать собственные функции! Код, в котором создаётся функция, называется определением функции.

Вот простейший пример функции, которая печатает в консоль ‘“Hello world!”‘ (напомним, это побочный эффект):

Функции могут возвращать или не возвращать значения, могут вызываться с указанием параметров или без. Тип возвращаемых данных указывают при объявлении функции — перед её именем.

В примере выше функция просто печатает в консоль и ничего не должна возвращать, поэтому тип возвращаемого значения — void.

В заголовке функции сначала идут модификаторы, определяющие, на каких условиях она доступна для вызова. static означает, что функция не пользуется членами того класса, к которому относится (напомним, в Java всякая функция относится к какому-то классу, но классы мы в этом курсе не изучаем).

Чтобы Java-приложение могло работать, в каком-то его классе обязательно нужно объявить такую функцию main, как мы делали ранее во всех примерах:

Именно эта функция и будет вызвана при запуске приложения, поэтому в ней мы и писали код, который хотели выполнить. В примерах мы объявляли эту функцию в классе App.

Создадим нашу первую функцию. У неё будет одна задача: выводить на экран текст Today is: December 5 .

Нужно назвать функцию так, чтобы из названия была понятна её задача. Давайте дадим ей имя showDate :

В нашей функции только две строчки кода, но их может быть сколько угодно. Функции можно считать программами внутри программ.

Вот полная программа, c определением функции и вызовом:

В ней не только функция main, но и showDate описана в классе App, поэтому функция showDate вызывается выражением App.showDate — но на самом деле если обе функции описаны в одном и том же классе, как здесь, то одна из них может вызывать другую без указания имени класса: не App.showDate(), а просто showDate().

Мы могли бы использовать подобную функцию на сайте или в какой-нибудь программе, чтобы выводить текущую дату на экран. Но в текущем виде функция не справится с задачей, ведь она всегда выводит Today is: December 5 .

Давайте улучшим функцию так, чтобы она принимала дату в качестве аргумента и выводила её на экран.

Определим и вызовем нашу обновленную функцию:

Теперь понятно, зачем нужны были круглые скобки после имени функции: в них можно указать аргументы. Теперь наша функция принимает один аргумент — date , имеющий тип String (так называется в Java тип, соответствующий строке текста).

Заметьте: мы не создаём переменную date , но используем её в теле функции. Java работает так: переменная сама создаётся при вызове и указанное значение (в нашем примере — ‘January 29’ ) записывается в эту переменную.

Аргументы можно называть как угодно, их имена имеют смысл исключительно в теле функции.

Аргументов может быть несколько. В таком случае в определении функции мы делаем то же самое, что в вызове: просто указываем аргументы через запятую.

Полный пример определения функции с несколькими аргументами и её вызова:

Читать еще:  Примеры javascript таблицы

Главное — помнить про порядок: в каком порядке аргументы стоят при определении функции, в таком же порядке они должны передаваться при вызове.

Задание

Реализуйте функцию printJaimesLine , которая принимает один аргумент — строку, и выводит реплику на экран в формате JAIME: переданная_строка .

Как назвать переменную, которая будет аргументом — решайте сами.

Наша система содержит код, скрытый от вас. В этом упражнении скрыт вызов функции printJaimesLine . Так мы проверяем ваше решение.

Вам не нужно самостоятельно вызывать функцию, только определить её. Но для наглядности — вот как наша система вызывает её:

чтобы мы могли вызвать эту функцию из другого класса, нужно ее пометить не только ключевым словом static, но еще и public.

Несколько методов main () в java

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

после первоначального запуска программы будет создан foo, и внутри него будет другой общедоступный основной метод. Это вызовет какие-либо ошибки?

10 ответов

это не вызовет ошибок. Только потому, что ты!—5—>инициализации объект, не означает, что метод main выполняется. Java будет только первоначально вызывать основной метод переданного ему класса, например

, делать что-то вроде:

это причиной StackOverflowError , потому что вы явно вызываете метод main TestClass, который затем вызовет main метод снова, и снова, и снова, и снова.

когда сомневаетесь, просто проверьте его: -)

метод main является статическим, что означает, что он принадлежит к классу, а не объекту. Таким образом, объект не будет иметь другого основного метода внутри него вообще.

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

Если вы ссылаетесь на несколько основных методов в одном и том же программа, тогда это тоже не проблема. Основной класс просто указан, и его основной метод выполняется для запуска программы (в случае файла jar это атрибут основного класса в файле манифеста.)

у него не будет дополнительного main -метод, as main is static . Так что один раз за класс.

если у вас есть несколько main -методы в вашем проекте вы укажете, какой из них запускать при запуске приложения.

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

после поиска класса Java с несколькими методами main() или простыми словами, перегруженными методами main (), я придумал собственный пример. Посмотрите, пожалуйста

я протестировал этот Java-код на JDK 1.7 и работает как шарм !

вам нужно» public static void main(String args []) » для начала, а затем вы можете вызвать перегруженные основные методы внутри этого main, и он должен работать наверняка.

любые комментарии и предложения высоко ценятся. Я просто начинающий разработчик Java, готовый развивать свои навыки Java.

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

вы можете иметь только один основной метод в одном классе, но вы можете вызвать один основной метод другому явно

когда вы запускаете свой класс Java, он всегда будет искать подпись public static void main (String args []) в классе. Поэтому предположим, если вы вызываете аргумент командной строки, он будет искать сигнатуру метода в классе и не будет вызывать другое, пока u явно не вызовет его по имени класса.

но когда вы пытаетесь то же самое от затмение он будет запрашивать, какой класс компилировать. Означает MainMethod1 или Mainmethod2. Поэтому, если класс te имеет точную подпись, их можно использовать в качестве отдельной точки входа для запуска приложения. Переходя к вашему вопросу, если вы удалите подпись, как это было сделано выше, изменив аргумент, если основной метод. он будет действовать как обычный метод.

это все о механизме выполнения JVM. Помните, вы пишете >java com.abc.MainClass в командной строке cmd.

Это все объясняет. Если метод main не найден здесь, он выдает ошибку времени выполнения: метод Main не найден в классе MainClass. Теперь, если метод main найден здесь, он действует как первая точка, когда счетчики программы должны сопоставить и начать выполнять инструкции. Затем загружаются ссылочные классы, а также могут вызываться ссылочные методы с использованием экземпляров, созданных внутри. Итак, main-это класс конкретно хоть один класс может иметь только один основной способ. Обратите внимание, что подпись основного метода никогда не меняется. вы можете иметь два перегруженных основных методов в одном классе, как

public static void main (String[] args) <>

public static void main () <> / / перегружен в том же классе.

во время статической привязки исходный main разрешается и идентифицируется механизмом выполнения.

еще один интересный момент для рассмотрения-это случай, когда у вас есть два разных класса в файле java.

например, у вас есть файл Java с двумя классами:

компиляции с javac FirstClassMultiply.java будет генерировать два .class файлы, первый из них FirstClassMultiply.class и второй SecondClass.class

и для того, чтобы запустить его вам нужно будет сделать это для созданного .class файлы: java FirstClassMultiply и java SecondClass , не исходное имя файла файл.

обратите внимание на несколько дополнительных моментов:

Ссылка на основную публикацию
Adblock
detector