#java #дизайн_языка
Статические переменные нужны для доступа к ним, без создания экземпляра класса. А вот зачем нужен static класс?
Ответы
Ответ 1
Статическим классом в java может быть только вложенный класс. Если класс отмечен как static, то он ведет себя, как обычный класс. например, есть класс А, вложенный статический класс B и вложенный (нестатический) класс С: public class A{ ... static public class B{ } public class C{ } } и мы хотим создать экземпляры этих классов во "внешнем" коде public class Test{ public static void main(String[] args) { A a = new A(); // обычный класс A.B b = new A.B(); // статический вложенный класс A.C c = a.new C(); // вложенный класс, связан с экземпляром А // A.C c = new A.C(); // синтаксическая ошибка (не скомпилится) } } или внутри статических методов класса А public class A{ ... static public class B{ } public class C{ } public static void main(String[] args) { A a = new A(); // обычный класс A.B b = new A.B(); // статический вложенный класс A.C c = a.new C(); // вложенный класс, связан с экземпляром А // A.C c = new A.C(); // синтаксическая ошибка (не скомпилится) } public static void test() { A a = new A(); // обычный класс A.B b = new A.B(); // статический вложенный класс A.C c = a.new C(); // вложенный класс, связан с экземпляром А // A.C c = new A.C(); // синтаксическая ошибка (не скомпилится) } } На мой взгляд использование статического класса может быть уместно, как небольшой класс, который по смыслу тесно связан с "основным" внешним классом. Например: public class Tree{ static public class Node{ } } В этой ситуации так же можно вынести вложенный класс в обычный и переместить оба класса в отдельный package. Единственным отличием вложенного статического класса от обычного, которое мне видится, - это более снисходительное отношение к видимости методов и полей между вложенным классом и его внешним классом. Например: public class A { private void privateMethod(){ B b = new B(); b.privateMethod(); // есть доступ к приватным методам/полям } static public class B { private void privateMethod(){ A a = new A(); a.privateMethod(); // есть доступ к приватным методам/полям } } } Ссылка на документацию: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.htmlОтвет 2
В основном для того, чтобы можно было создавать вложенные классы, объекты которых можно создавать, не создавая инстанса класса в котором он лежит.Ответ 3
"Статическим классом в java может быть только вложенный класс" - есть вложенные(static) и внутрение, разница как и в обычном плане, static имеет доступ только к статичным полям
Комментариев нет:
Отправить комментарий