Czy jest coś takiego static class
w java?
Jakie jest znaczenie takiej klasy. Czy wszystkie metody klasy statycznej też muszą być static
?
Czy wymagane jest na odwrót, że jeśli klasa zawiera wszystkie metody statyczne, to klasa również powinna być statyczna?
Do czego służą klasy statyczne?
java
static-classes
Kraken
źródło
źródło
Odpowiedzi:
Java ma klasy zagnieżdżone statycznie, ale wygląda na to, że szukasz klasy statycznej najwyższego poziomu. Java nie ma możliwości uczynienia statycznej klasy najwyższego poziomu, ale można symulować klasę statyczną w następujący sposób:
final
- Zapobiega rozszerzeniu klasy, ponieważ rozszerzenie klasy statycznej nie ma sensuprivate
- Zapobiega tworzeniu instancji według kodu klienta, ponieważ nie ma sensu tworzyć instancji klasy statycznejstatic
- Ponieważ nie można utworzyć instancji klasy, nie można wywoływać metod instancji ani uzyskiwać dostępu do pól instancjiProsty przykład według sugestii z góry:
Co dobrego mają klasy statyczne? Dobrym zastosowaniem klasy statycznej jest definiowanie klas jednorazowych, użytkowych i / lub bibliotecznych, w których tworzenie instancji nie miałoby sensu. Świetnym przykładem jest klasa Math, która zawiera pewne stałe matematyczne, takie jak PI i E, i po prostu zapewnia obliczenia matematyczne. Wymaganie wystąpienia w takim przypadku byłoby niepotrzebne i dezorientujące. Zobacz
Math
klasę i kod źródłowy . Zauważ, że tak jestfinal
i wszyscy jej członkowiestatic
. Jeśli Java zezwala na deklarowanie klas najwyższego poziomu,static
wówczas klasa Math byłaby rzeczywiście statyczna.źródło
Foo
z jedynymistatic
metodami nie jest taka sama jakstatic class Foo
Cóż, Java ma „statyczne klasy zagnieżdżone”, ale wcale nie są takie same jak klasy statyczne w C #, skąd pochodzisz. Statycznie zagnieżdżona klasa to tylko taka, która nie ma niejawnie odniesienia do wystąpienia klasy zewnętrznej.
Statycznie zagnieżdżone klasy mogą mieć metody instancji i metody statyczne.
W Javie nie ma czegoś takiego jak klasa statyczna najwyższego poziomu.
źródło
static
podczas ich deklarowania. Są domyślnie statyczne, ponieważ nie potrzebujesz odniesienia do niczego innego, aby je zbudować. Osobiście uważam, że statyczna / niestatyczna terminologia jest nieco dziwna dla klas zagnieżdżonych ... Myślę, że łatwiej byłoby mówić o tym, jakie jest zachowanie.Istnieje statyczna klasa zagnieżdżona , ta klasa [statycznie zagnieżdżona] nie potrzebuje instancji klasy zamykającej, aby mogła zostać utworzona instancja.
Te klasy [statyczne zagnieżdżone] mogą uzyskiwać dostęp tylko do statycznych elementów klasy zamykającej [ponieważ nie ma żadnego odniesienia do instancji klasy zamykającej ...]
przykładowy kod:
źródło
Tak, w Javie jest statycznie zagnieżdżona klasa. Gdy zadeklarujesz klasę zagnieżdżoną jako statyczną, automatycznie staje się ona klasą samodzielną, którą można utworzyć instancji bez konieczności tworzenia instancji klasy zewnętrznej, do której należy.
Przykład:
Ponieważ
class B
jest zadeklarowany jako statyczny, możesz jawnie utworzyć instancję jako:Zauważ, że jeśli
class B
nie został zadeklarowany jako statyczny, aby stał się samodzielny, wywołanie obiektu instancji wyglądałoby tak:źródło
B b = new B();
jakbyś próbował utworzyć instancję zA
samej klasy .Co się dzieje, gdy członkowie wewnątrz
class
są zadeklarowani jakostatic
…? Do członków można uzyskać dostęp bez tworzenia instancjiclass
. Dlatego tworzenie klasy zewnętrznej (klasa najwyższego poziomu)static
nie ma znaczenia. Dlatego nie jest dozwolone.Ale możesz ustawić klasy wewnętrzne jako statyczne (ponieważ jest to członek klasy najwyższego poziomu). Następnie można uzyskać dostęp do tej klasy bez tworzenia klasy najwyższego poziomu. Rozważ następujący przykład.
Teraz wewnątrz innej klasy można uzyskać dostęp do
C
klasyB
bez tworzenia instancji klasyA
.static
klasy mogą miećnon-static
również członków. Tylko klasa staje się statyczna.Ale jeśli
static
słowo kluczowe zostanie usunięte z klasyB
, nie będzie można uzyskać do niego bezpośredniego dostępu bez wykonania instancjiA
.Ale nie możemy mieć
static
członków wnon-static
wewnętrznej klasie.źródło
static
ma tylko jedno znaczenie w java. Jeśli coś jeststatic
w klasie, oznacza to, że można do niego uzyskać dostęp bez tworzenia instancji tej klasy. Nie mówi nic o tworzeniu instancji czy nie ...Biorąc pod uwagę, że jest to najlepszy wynik w Google dla „java klasy statycznej” i najlepszej odpowiedzi nie ma tutaj, pomyślałem, że go dodam. Interpretuję pytanie OP dotyczące klas statycznych w języku C #, które są znane jako singletony w świecie Java. Dla nieświadomych w języku C # słowo kluczowe „static” można zastosować do deklaracji klasy, co oznacza, że klasy wynikowej nigdy nie można utworzyć.
Fragment „Effective Java - Second Edition” Joshua Blocha (powszechnie uważany za jeden z najlepszych dostępnych przewodników po stylu Java):
Bloch, Joshua (2008-05-08). Skuteczna Java (Java Series) (s. 18). Edukacja Pearson.
Myślę, że wdrożenie i uzasadnienie są dość oczywiste.
źródło
Czy klasa może być statyczna w Javie?
Odpowiedź brzmi TAK , możemy mieć klasę statyczną w Javie. W Javie mamy statyczne zmienne instancji , jak i metody statyczne , a także blok statyczny . Klasy mogą być również ustawione na statyczne w Javie.
W Javie nie możemy ustawić statycznej klasy zewnętrznej (zewnętrznej). Tylko zagnieżdżone klasy mogą być statyczne.
statyczna klasa zagnieżdżona vs niestatyczna klasa zagnieżdżona
1) Zagnieżdżona klasa statyczna nie potrzebuje odwołania do klasy zewnętrznej, ale niestatyczna klasa zagnieżdżona lub klasa wewnętrzna wymaga odniesienia do klasy zewnętrznej.
2) Klasa wewnętrzna (lub niestatyczna klasa zagnieżdżona) może uzyskać dostęp zarówno do statycznych, jak i niestatycznych elementów klasy zewnętrznej. Klasa statyczna nie może uzyskać dostępu do niestatycznych elementów klasy zewnętrznej. Może uzyskiwać dostęp tylko do statycznych członków klasy zewnętrznej.
patrz tutaj: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
źródło
Klasy zewnętrzne nie mogą być statyczne, ale klasy zagnieżdżone / wewnętrzne mogą być. To w zasadzie pomaga w użyciu klasy zagnieżdżonej / wewnętrznej bez tworzenia instancji klasy zewnętrznej.
źródło
Mówiąc prościej, Java obsługuje deklarację, że klasa jest statyczna tylko dla klas wewnętrznych, ale nie dla klas najwyższego poziomu.
klasy najwyższego poziomu: Projekt Java może zawierać więcej niż jedną klasę najwyższego poziomu w każdym pliku źródłowym Java, przy czym jedna z klas nosi nazwę po nazwie pliku. Przed klasami najwyższego poziomu dozwolone są tylko trzy opcje lub słowa kluczowe: publiczny, abstrakcyjny i końcowy .
Klasy wewnętrzne: klasy należące do klasy najwyższego poziomu nazywane są klasami wewnętrznymi, co jest w zasadzie pojęciem klas zagnieżdżonych. Klasy wewnętrzne mogą być statyczne . Ideą statyczną dla klas wewnętrznych jest wykorzystanie instancji obiektów klas wewnętrznych bez tworzenia obiektu klasy najwyższego poziomu. Jest to dokładnie ten sam sposób, w jaki metody statyczne i zmienne działają wewnątrz klasy najwyższego poziomu.
Dlatego Java obsługuje klasy statyczne na poziomie klasy wewnętrznej (w klasach zagnieżdżonych)
A Java nie obsługuje klas statycznych w klasach najwyższego poziomu.
Mam nadzieję, że daje to prostsze rozwiązanie pytania o podstawowe zrozumienie klas statycznych w Javie.
źródło
Java ma metody statyczne, które są powiązane z klasami (np. Java.lang.Math ma tylko metody statyczne), ale sama klasa nie jest statyczna.
źródło
Nie można używać słowa kluczowego static z klasą, chyba że jest to klasa wewnętrzna. Statyczna klasa wewnętrzna jest klasą zagnieżdżoną, która jest statycznym członkiem klasy zewnętrznej. Można uzyskać do niego dostęp bez tworzenia instancji klasy zewnętrznej, używając innych elementów statycznych. Podobnie jak elementy statyczne, statyczna klasa zagnieżdżona nie ma dostępu do zmiennych instancji i metod klasy zewnętrznej.
źródło
static
słowa kluczowego z klasą, chyba że jest to klasa zagnieżdżona . „Statyczny wewnętrzny” jest wewnętrznie sprzecznością .Metoda statyczna oznacza, że można uzyskać do niej dostęp bez tworzenia obiektu klasy, w przeciwieństwie do public:
źródło
Wszystkie dobre odpowiedzi, ale nie widziałem odwołania do java.util.Collections, który używa ton statycznej klasy wewnętrznej do swoich metod współczynników statycznych. Więc dodając to samo.
Dodanie przykładu z java.util.Collections, który ma wiele statycznych klas wewnętrznych. Klasy wewnętrzne są przydatne do grupowania kodu, do którego należy uzyskać dostęp za pośrednictwem klasy zewnętrznej.
Oto metoda współczynnika statycznego w klasie java.util.Collections
źródło