Что означает «публичная статическая пустота» в Java?

149

Что public static voidзначит в Java?

Я в процессе обучения. Во всех примерах, приведенных в книге, из которой я работаю, public static voidпредшествует любой метод, который используется или создается. Что это значит?

Дэвид
источник

Ответы:

230

Это три совершенно разные вещи:

publicозначает, что метод является видимым и может вызываться из других объектов других типов. Другие альтернативы private, protected, packageи package-private. Смотрите здесь для более подробной информации.

staticозначает, что метод связан с классом, а не с конкретным экземпляром (объектом) этого класса. Это означает, что вы можете вызывать статический метод, не создавая объект класса.

voidозначает, что метод не имеет возвращаемого значения. Если метод вернул, intвы бы написали intвместоvoid .

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

Марк Байерс
источник
12
Поскольку спрашивающий еще учится: порядок этих ключевых слов также важен. Все модификаторы (первый public, static, privateи т.д.) , то тип возврата ( voidв данном случае).
Пиндатюх
1
@ markbyres Хорошо, я понимаю ваш ответ, я знаю, что основной метод должен быть статическим, но я понятия не имею, почему он публичный ?? Есть ли какая-то конкретная причина для этого?
Hardik
9
среда выполнения Java должна вызывать метод main для запуска вашего приложения. он не мог этого сделать, когда был приватным.
Филипп
44

Три слова имеют ортогональные значения.

public означает, что метод будет виден из классов в других пакетах.

staticозначает, что метод не привязан к конкретному экземпляру и не имеет " this". Это более или менее функция.

voidэто тип возвращаемого значения. Это означает, что «этот метод ничего не возвращает».

Томас Порнин
источник
22

общественности ключевое слово является спецификатором доступа, который позволяет программисту управлять видимостью членов класса. Когда члену класса предшествует public, тогда к этому члену может обращаться код вне класса, в котором он объявлен. (Противоположностью public является private, что предотвращает использование элемента кодом, определенным вне его класса.)

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

Ключевое слово static позволяет main( )вызываться без создания экземпляра определенного экземпляра класса. Это необходимо, так как main( )вызывается интерпретатором Java перед созданием каких-либо объектов.

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

Utsav
источник
18

Это означает, что:

  • public - его можно вызвать откуда угодно
  • static - у него нет состояния объекта, поэтому вы можете вызывать его без создания объекта
  • void - ничего не возвращает

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

Пол Томблин
источник
4

Это означает три вещи.

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

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

void означает, что функция не возвращает значение.

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

Лучший совет, который я получил, когда учился программировать, и который я передаю вам, - не беспокойтесь о мелких деталях, которые вы не понимаете сразу. Получите широкий обзор основных принципов, а затем вернитесь к подробностям. Причина в том, что вы должны использовать некоторые вещи (например public static void) в ваших первых программах, которые не могут быть хорошо объяснены без предварительного изучения множества других вещей. Итак, на данный момент, просто примите, что так оно и есть, и двигайтесь дальше. Вы поймете их в ближайшее время.

Аарон
источник
3

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

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

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

Отказ от ответственности: я сам новичок, поэтому, если этот ответ каким-либо образом неверен, пожалуйста, не вешайте меня. Днем я технический рекрутер, а не разработчик; кодирование это мое хобби. Кроме того, я всегда открыт для конструктивной критики и люблю учиться, поэтому, пожалуйста, не стесняйтесь указывать на любые ошибки.

Дэвид Лик, Нью-Йорк, Нью-Йорк
источник
2
  • public означает, что вы можете получить доступ к классу из любого места в классе / объекте или вне пакета или класса
  • static означает константу, в которой блок выписки используется только 1 раз
  • void означает отсутствие типа возврата
Салим Бхайо
источник
6
Этот вопрос был адекватно освещен, возможно, попробуйте ответить на новые вопросы, а не отвечать на старые вопросы с дубликатами информации. Спасибо.
Кев
Это как объяснить слона. Люди пытаются объяснить это в зависимости от того, где он стоит. Я доволен всеми ответами, приведенными выше, но просто удивляюсь, как кто-то может сказать «Купи книгу Java».
Сулунг Нугрохо
2

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

Static- создает класс. Может также применяться к переменным и методам, делая их методами / переменными класса, а не просто локальными для определенного экземпляра класса.

Void- это означает, что продукт не возвращается, когда класс завершает обработку. Сравните это с вспомогательными классами, которые обеспечивают возвращаемое значение для основного класса, они работают как функции; они не имеют пустоты в декларации.

user647200
источник
0

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

махи
источник