Czy statyczna Klasa zagnieżdżona może zostać utworzona w Javie?

Z poradników Java Oracle znalazłem ten tekst:

Podobnie jak w przypadku metod klasowych i zmiennych, statyczna Klasa zagnieżdżona jest powiązana ze swoją klasą zewnętrzną. Podobnie jak statyczne metody klas, statyczna Klasa zagnieżdżona nie może odnosić się bezpośrednio do zmiennych instancji lub metod zdefiniowanych w jej klasie-może używać ich tylko poprzez odniesienie do obiektu.

Uwaga: statyczna Klasa zagnieżdżona współdziała z instancjami klasy zewnętrznej (i innymi klasami) po prostu jak każda inna klasa na najwyższym poziomie. W efekcie statyczna Klasa zagnieżdżona jest behawioralnie klasą najwyższego poziomu, która została zagnieżdżona w innej klasie najwyższego poziomu dla wygody pakowania.

Statyczne klasy zagnieżdżone są dostępne za pomocą zamykającej się nazwy klasy:

OuterClass.StaticNestedClass

Na przykład, aby utworzyć obiekt dla statycznej klasy zagnieżdżonej, użyj składni:

Klasa zewnętrzna.StaticNestedClass nestedObject = nowe Klasa zewnętrzna.StaticNestedClass();

Myślałem, że nie jest możliwe utworzenie statycznej klasy, więc nie bardzo rozumiem zdanie pogrubione.

Masz pojęcie, co to znaczy?

Author: user1031431, 2013-08-18

3 answers

Albo mylisz static z abstract, Jak mówi kihero, albo mieszasz pojęcie z klasą, która ma metody static (która jest po prostu klasą, która ma metody statyczne).

Statyczna Klasa zagnieżdżona jest po prostu klasą zagnieżdżoną, która nie wymaga instancji swojej klasy zamykającej. Jeśli znasz C++, wszystkie klasy w C++ są klasami "statycznymi". W Javie zagnieżdżone klasy nie są domyślnie statyczne (ta niestatyczna odmiana jest również nazywana " klasą wewnętrzną"), co oznacza, że wymagają instancji swojej zewnętrznej klasy, którą śledzą za kulisami w ukrytym polu - ale to pozwala klasom wewnętrznym odnosić się do pól powiązanej z nimi klasy zamkniętej.

public class Outer {

    public class Inner { }

    public static class StaticNested { }

    public void method () {
        // non-static methods can instantiate static and non-static nested classes
        Inner i = new Inner(); // 'this' is the implied enclosing instance
        StaticNested s = new StaticNested();
    }

    public static void staticMethod () {
        Inner i = new Inner(); // <-- ERROR! there's no enclosing instance, so cant do this
        StaticNested s = new StaticNested(); // ok: no enclosing instance needed

        // but we can create an Inner if we have an Outer: 
        Outer o = new Outer();
        Inner oi = o.new Inner(); // ok: 'o' is the enclosing instance
    }

}

Wiele innych przykładów na Jak utworzyć instancję niestatycznej klasy wewnętrznej w metodzie statycznej

Domyślnie deklaruję statyczne wszystkie zagnieżdżone klasy, chyba że potrzebuję dostępu do pól klasy.

 32
Author: Jason C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:37

Statyczne klasy zagnieżdżone same w sobie nie są statyczne. W Javie żadna klasa nie jest statyczna. Słowo kluczowe Static w klasach zagnieżdżonych oznacza, że jest kolejnym statycznym członkiem klasy zewnętrznej. Ale to tylko kolejna surowa Klasa . Dlatego możemy utworzyć instancję tej klasy

 11
Author: Abhishek raut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-10 14:58:06

Mylisz static z abstract. Nie można tworzyć instancji klas abstrakcyjnych. static nie jest poprawnym kwalifikatorem dla klas najwyższego poziomu, ale znaczenie dla klas wewnętrznych jest takie, które zacytowałeś.

 4
Author: kiheru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-17 22:29:27