我曾经看到在Java
中将类声明为static
,但却感到困惑:
由于类用于创建对象,并且不同的对象具有不同的内存分配。
那么,在声明类时,“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
,嵌套的内部类和嵌套的静态类都可以有嵌套类。但请记住,只能在顶级类中声明静态类,不能在内部类中声明它。public class Test {
public class Inner1 {
public class Inner2 {
public class Inner3 {
}
}
}
public static class nested1 {
public static class nested2 {
public static class nested3 {
}
}
}
}
它仅描述了此类与包含类的关系。
内部类是在另一个类的范围内定义的类。内部类的实例附加到容器类的特定实例(创建它们的实例)。
静态嵌套类是嵌套类,但是被定义为静态的。像静态成员一样,它们与特定实例没有关系;它们只属于包含类。在嵌套类中,您无法引用不带静态修饰符的包含类成员/方法,因为它们没有关联的特定实例。