Rumah > Soal Jawab > teks badan
Java中的枚举类型是存储在Java运行期的那个区域?为什么单例模式用枚举就完美解决了?
枚举的内存分配是发生在什么时候?初始化又是啥发生在什么时候?代码中使用枚举时候,发生了什么事情?
PHP中文网2017-04-18 10:52:17
Enumerasi dalam Java wujud dalam
Method Area
(kawasan kaedah)
public enum T {
E1, E2
}
Kod di atas disusun seperti berikut:
$ javap T.class
Compiled from "T.java"
public final class io.zhudy.web.T extends java.lang.Enum<io.zhudy.web.T> {
public static final io.zhudy.web.T E1;
public static final io.zhudy.web.T E2;
public static io.zhudy.web.T[] values();
public static io.zhudy.web.T valueOf(java.lang.String);
static {};
}
Anda boleh mendapati bahawa pemalar sebenarnya disusun menjadi pembolehubah statik pada akhirnya Pembolehubah statik dalam Java disimpan dalam Method Area
.
Tujuan
单例模式
adalah untuk memastikan bahawa hanya terdapat satu contoh dalam ingatan, dan枚举值
adalah tetap yang hanya boleh mencapai tujuan mengawal nombor daripada contohPerbezaan antara penggunaan tradisional
class
untuk melaksanakan singleton danenum
ialah menggunakanclass
memerlukan penetapanconstructor
tahap akses kepadaprivate
jika anda ingin menghalangreflect
daripada memintas akses. Untuk mengawal untuk mencipta objek , pemprosesan tambahan perlu dilakukan seperti berikut:
public class T2 {
public static final T2 INSTANCE = new T2();
private T2() {
if (INSTANCE != null) {
throw new AssertionError("实例已存在");
}
}
public static void main(String[] args) throws Exception {
Constructor c = T2.class.getDeclaredConstructor();
Object o = c.newInstance();
System.out.println(o);
}
}