我经常看到人们使用内部枚举,例如:
public class Person {
enum Gender {
MALE,
FEMALE,
OTHER
}
...
}
我不确定它在内部是如何工作的,所以我想知道每次有人创建一个新的人时,是否会有这个枚举类的新实例,例如new Person()
?
内部枚举会继续消耗更多内存还是只有一个?
跟进:
public class Person {
String name;
int Age;
Address address = new Address();//Usual way we see
public class Address {
String city;
String Country;
int number;
}
}
public class test {
public static void main(String[] args) {
var a = new Person.Address();//complains "innerclass.Person' is not an enclosing class, make Address Static"
var p = new Person();
var a1 = p.new Address();//correct syntax to create inner clas object outside its outer class
}
}
TBH,不要指望创建内部类对象的语法会如此奇怪.但考虑到我们通常只在外部类中使用它,比如迭代器在不同的数据 struct 中的使用方式,我对此感到奇怪仍然是有道理的.
关于@Zabuzard和@user207421之间的讨论,两者都提出了一个很好的观点.user207421指出,类只有在非静态时才被认为是内部的.枚举和记录本质上是静态的:Oracle doc.从根本上学习是好的.但我很欣赏扎布扎德以一种我们可以轻松理解的方式解释一切.