Подтвердить что ты не робот

Почему класс объявлен как статический в Java?

Я видел, что класс был объявлен как static в java, но confused:
Поскольку класс используется для создания объектов, а разные объекты имеют разные распределения памяти.
Тогда что такое "static", используемое для объявления класса? Означает ли это, что member variables - все static?
Это имеет смысл?

4b9b3361

Ответ 1

Во-первых, вы не можете ставить статический класс верхнего уровня. вы можете сделать только статический класс вложенного класса. Создавая вложенный класс static, вы в основном говорите, что вам не нужен экземпляр вложенного класса для его использования из вашего внешнего класса/класса верхнего уровня.

Пример:

class Outer {

static class nestedStaticClass {

//its member variables and methods (don't nessarily need to be static)
//but cannot access members of the enclosing class
}

public void OuterMethod(){
//can access members of nestedStaticClass w/o an instance
}
}

Кроме того, запрещается объявлять статические поля внутри внутреннего класса, если они не являются константами (другими словами, static final). Поскольку статический вложенный класс не является внутренним классом, вы можете объявить здесь статические члены.

Может ли класс быть вложенным в вложенный класс?

Одним словом, да. Посмотрите ниже Test, и вложенные внутренние классы, и вложенный статический класс могут иметь вложенные классы в em. Но помните, что вы можете объявлять только статический класс внутри класса верхнего уровня, это запрещено объявлять внутри внутреннего класса.

public class Test {
    public class Inner1 {
        public class Inner2 {
            public class Inner3 {

            }
        }
    }
    public static class nested1 {
        public static class nested2 {
            public static class nested3 {

            }
        }   
    }
}

Ответ 2

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

Вот хороший код примера в этом ответе

Ответ 3

Он просто описывает отношение этого класса к содержащемуся классу.

Внутренние классы - это классы, определенные в рамках другого класса. Экземпляры внутренних классов привязаны к определенному экземпляру класса контейнера (экземпляр, в котором они были созданы).

Статические вложенные классы - это вложенные классы, но они определены как static. Подобно статическим членам, они не имеют никакого отношения к конкретному экземпляру; они просто принадлежат к содержащему классу. Во вложенных классах вы не можете ссылаться на нестатические члены/методы содержащего класса, так как нет конкретного экземпляра, связанного с ними.