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 contoh
Perbezaan antara penggunaan tradisional class untuk melaksanakan singleton dan enum ialah menggunakan class memerlukan penetapan constructor tahap akses kepada private jika anda ingin menghalang reflect 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);
}
}
Kod di atas disusun seperti berikut:
Anda boleh mendapati bahawa pemalar sebenarnya disusun menjadi pembolehubah statik pada akhirnya Pembolehubah statik dalam Java disimpan dalam
Method Area
.