Co oznacza „publiczna statyczna pustka” w Javie?

149

Co to public static voidznaczy w Javie?

Jestem w trakcie uczenia się. We wszystkich przykładach w książce, na podstawie której pracuję, public static voidwystępuje przed jakąkolwiek metodą, która jest używana lub tworzona. Co to znaczy?

David
źródło

Odpowiedzi:

230

To trzy zupełnie różne rzeczy:

publicoznacza, że ​​metoda jest widoczna i można ją wywołać z innych obiektów innego typu. Inne alternatywy są private, protected, packagei package-private. Więcej informacji znajdziesz tutaj .

staticoznacza, że ​​metoda jest skojarzona z klasą, a nie z konkretną instancją (obiektem) tej klasy. Oznacza to, że możesz wywołać metodę statyczną bez tworzenia obiektu tej klasy.

voidoznacza, że ​​metoda nie zwraca wartości. Gdyby metoda zwróciła wartość int, intzamiast void.

Połączenie wszystkich trzech z nich jest najczęściej widoczne w mainmetodzie, którą obejmuje większość samouczków.

Mark Byers
źródło
12
Ponieważ pytający wciąż się uczy: kolejność tych słów kluczowych jest również ważna. Wszystkie modyfikatory pierwsze ( public, static, private, etc.), następnie typu zwrotny ( voidw tym przypadku).
Pindatjuh
1
@markbyres ok, rozumiem, że odpowiadasz, wiem, że główna metoda musi być statyczna, ale nie mam pojęcia, dlaczego jest publiczna? czy jest jakiś konkretny powód?
hardik
9
środowisko wykonawcze java musi wywołać metodę main, aby uruchomić aplikację. nie mógł tego zrobić, kiedy był prywatny.
Filip
44

Te trzy słowa mają ortogonalne znaczenie.

public oznacza, że ​​metoda będzie widoczna z klas w innych pakietach.

staticoznacza, że ​​metoda nie jest dołączona do konkretnej instancji i nie ma " this". Jest to mniej więcej funkcja.

voidjest typem zwrotu. To znaczy „ta metoda nic nie zwraca”.

Thomas Pornin
źródło
22

Publicznego kluczowe jest specyfikator dostępu, który pozwala programiście kontrolować widoczność członków klasy. Gdy element członkowski klasy jest poprzedzony przez public, wówczas można uzyskać do niego dostęp za pomocą kodu poza klasą, w której jest zadeklarowany. (Przeciwieństwem public to private, co zapobiega używaniu elementu członkowskiego przez kod zdefiniowany poza jego klasą).

W tym przypadku main( )musi być zadeklarowany jako publiczny, ponieważ musi być wywoływany przez kod poza swoją klasą podczas uruchamiania programu.

Słowo kluczowe static pozwala main( )na wywołanie bez konieczności tworzenia instancji konkretnej instancji klasy. Jest to konieczne, ponieważ main( )jest wywoływane przez interpreter języka Java przed utworzeniem jakichkolwiek obiektów.

Słowo kluczowe void po prostu mówi kompilatorowi, że main( )nie zwraca wartości. Jak zobaczysz, metody mogą również zwracać wartości.

utsav
źródło
18

To znaczy, że:

  • public - można go wywołać z dowolnego miejsca
  • static - nie ma żadnego stanu obiektu, więc możesz go wywołać bez tworzenia wystąpienia obiektu
  • void - nic nie zwraca

Można by pomyśleć, że brak zwrotu oznacza, że ​​niewiele robi, ale może to na przykład zapisywać rzeczy w bazie danych.

Paul Tomblin
źródło
4

To oznacza trzy rzeczy.

Po pierwsze publicoznacza, że ​​każdy inny obiekt może uzyskać do niego dostęp.

static oznacza, że ​​klasa, w której się znajduje, nie musi być najpierw tworzona przed wywołaniem funkcji.

void oznacza, że ​​funkcja nie zwraca wartości.

Ponieważ dopiero się uczysz, nie przejmuj się zbytnio pierwszymi dwoma, dopóki nie nauczysz się zajęć, a trzeci nie będzie miał większego znaczenia, dopóki nie zaczniesz pisać funkcji (innych niż main).

Najlepsza rada, jaką otrzymałem podczas nauki programowania i którą ci przekazuję, to nie przejmuj się drobnymi szczegółami, których nie rozumiesz od razu. Uzyskaj szeroki przegląd podstaw, a następnie wróć i martw się o szczegóły. Powodem jest to, że musisz użyć pewnych rzeczy (takich jak public static void) w swoich pierwszych programach, których tak naprawdę nie można dobrze wyjaśnić bez uprzedniego nauczenia cię o wielu innych rzeczach. Więc na razie zaakceptuj, że tak to się robi i idź dalej. Wkrótce je zrozumiesz.

Aaron
źródło
3

Biorąc pod uwagę typową klasę na najwyższym poziomie. Na najwyższym poziomie można używać tylko publicznych i nie modyfikujących modyfikatorów dostępu, więc zobaczysz publiczne lub w ogóle nie zobaczysz żadnego modyfikatora dostępu.

`` static '' jest używane, ponieważ możesz nie mieć potrzeby tworzenia rzeczywistego obiektu na najwyższym poziomie (ale czasami będziesz chciał, więc nie zawsze możesz zobaczyć / użyć statycznego. Są inne powody, dla których nie uwzględnisz statycznego też, ale jest to typowe na najwyższym poziomie).

voidjest używany, ponieważ zwykle nie będziesz zwracać wartości z najwyższego poziomu (klasy). (czasami będziesz chciał zwrócić wartość inną niż NULLtak void może nie zawsze być używana, szczególnie w przypadku, gdy zadeklarowałeś, zainicjowałeś obiekt na najwyższym poziomie, któremu przypisujesz jakąś wartość).

Zastrzeżenie: sam jestem nowicjuszem, więc jeśli ta odpowiedź jest w jakikolwiek sposób błędna, nie wieszaj mnie. Za dnia jestem rekruterem technicznym, a nie programistą; kodowanie to moje hobby. Zawsze jestem otwarty na konstruktywną krytykę i uwielbiam się uczyć, więc nie krępuj się wskazywać na wszelkie błędy.

David Leak Nowy Jork NY
źródło
2
  • public oznacza, że ​​możesz uzyskać dostęp do klasy z dowolnego miejsca w klasie / obiekcie lub poza pakietem lub klasą
  • static oznacza stałą, w której blok instrukcji został użyty tylko 1 raz
  • void oznacza brak typu zwracanego
Saleem Bhayo
źródło
6
To pytanie zostało odpowiednio omówione, być może spróbuj odpowiedzieć na nowe pytania zamiast odpowiadać na starsze pytania, podając zduplikowane informacje. Dzięki.
Kev
To jak wyjaśnianie o słoniu. Ludzie próbują to wyjaśnić, w zależności od tego, gdzie stoi. Jestem zadowolony ze wszystkich powyższych odpowiedzi, ale zastanawiam się, jak ktoś może powiedzieć „Kup książkę i java”.
Sulung Nugroho,
2

Public - oznacza, że ​​klasa (program) jest dostępna do użytku przez każdą inną klasę.

Static- tworzy klasę. Można również zastosować do zmiennych i metod, czyniąc je klasowymi metodami / zmiennymi zamiast tylko lokalnymi dla określonej instancji klasy.

Void- oznacza to, że żaden produkt nie jest zwracany, gdy klasa zakończy przetwarzanie. Porównaj to z klasami pomocniczymi, które dostarczają wartość zwracaną do klasy głównej, te działają jak funkcje; nie są one nieważne w deklaracji.

user647200
źródło
0

staticoznacza, że ​​metoda jest skojarzona z klasą, a nie z konkretną instancją (obiektem) tej klasy. Oznacza to, że możesz wywołać metodę statyczną bez tworzenia obiektu tej klasy. Ponieważ użycie staticsłowa kluczowego main()jest twoją pierwszą metodą, która ma zostać wywołana ... staticnie potrzebuje żadnego obiektu do instancji ... więc main( )jest wywoływana przez interpreter Java przed utworzeniem jakichkolwiek obiektów.

mahi
źródło