Что хорошего в статических классах в Java? - PullRequest
2 голосов
/ 10 марта 2011

Я прочитал, что могу определить класс как static, но я не понимаю, зачем мне это нужно. Что хорошего в статических классах? Когда мне нужно их использовать? Буду признателен за примеры.

Ответы [ 3 ]

5 голосов
/ 10 марта 2011

Ключевое слово static для классов разрешено только для вложенных классов внутри другого класса.

Разница между нестатическими вложенными классами (также известными как внутренние классы) и статическими вложенными классами заключается в том, что объекты первых всегда имеют соответствующий «внешний» объект, в то время как объекты последних не имеют (они имеют только частные -уровневый доступ и находятся внутри пространства имен).


Вот пример:

class Outer {
    static class StaticNested {}
    class Inner {}
}

Теперь мы можем создавать объекты следующим образом:

Outer o = new Outer();
Outer.StaticNested sn = new Outer.StaticNested();
Outer.Inner i = o.new Inner();

o соответствует соответствующему Внешнему объекту i, тогда как sn не имеет такого элемента. (Обычно вы создаете объекты внутренних классов из методов внешних объектов, там вы можете просто написать new Inner(), и в качестве внешнего объекта он принимает this.)

Снаружи Inner мы не можем получить соответствующий внешний объект, но внутри него мы можем написать Outer.this для ссылки на внешний объект. При необходимости это работает на нескольких уровнях.

4 голосов
/ 10 марта 2011

Вы можете определить внутренний класс как статический, как этот (если быть точным, класс станет статическим вложенным классом):

class A {
    public static class Inner { }
}

Это означает, что класс Innerкак-то связано с A, но не привязано к конкретному экземпляру.В основном это способ создать какую-то связь между ними.

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

Важно отметить, что только внутренние классымогут быть определены как статические, «нормальные» классы не могут.

0 голосов
/ 10 марта 2011

Из Sun Certified Programmer for Java 6 Учебное пособие :

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

Очевидный следующий вопрос: "Что означает static?" Все это означает, что вы получаете по одному на класс вместо одного на объект. Другими словами, есть одна версия, которой все делятся (не привязанная к какому-либо конкретному экземпляру, вместо одной на экземпляр класса). Это будет казаться очевидным к этому моменту, но вы должны использовать статический класс в ситуациях, когда вы хотите использовать статический член, а также хотите использовать класс. Статические классы также иногда могут быть полезны в качестве контейнеров для небольших вспомогательных методов, поскольку они имеют доступ к закрытым членам своих включающих классов.

Вот пример, который я помню из школы:

public class Shapes {
    List<Shape> shapes;

    private static class ShapeSorter implements Comparator {
        ...
    }

...

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

Есть только сотни других вопросов только о переполнении стека о том, что означает статическое в Java. Вот несколько примеров, которые помогут вам:

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