SORU
22 Temmuz 2009, ÇARŞAMBA


Nasıl değerler() Java için uygulanan 6 çeteleler?

Java, aşağıdaki gibi bir sıralama oluşturabilirsiniz

public enum Letter {
    A, B, C, D, E, F, G;

    static {
       for(Letter letter : values()) {
          // do something with letter
       }
    }
}

"() Değerleri" yöntemi. bu soru kaygılar Özellikle, nasıl uygulanır? Genellikle, Java sınıfları Eclipse F3 ya da CTRL tuşu kullanılarak (bile Dize gibi sınıflar, Karakter, Tamsayı, ve Numaralama bile) kaynak atlayabilirim. Olası diğer numaralama yöntemleri kaynağı (örneğin, değerini(dizi)).

"() Değerleri" yeni bir dizi onu çağıran her zaman oluşturmak? Eğer ben atamak için yerel bir değişken ve sonra Değiştir bir element, ne olur ki, bu etkilemez tarafından döndürülen değeri değerleri(), hangi anlamına gelir bir yeni dizidir ayrılan her zaman).

Bunun için yerel kod olarak mı? Değiştirilmeyecek ispat edemiyor. ya da JVM / derleyici özel olarak, sadece değerleri yeni bir örneğini iade davranıyor()

CEVAP
22 Temmuz 2009, ÇARŞAMBA


Temel olarak, derleyici (javac) derleme zamanında static bir dizi tüm değerleri içeren içine numaralama çevirir. Değerler dediğiniz zaman size verir .clone () ... bu dizinin kopyası.

Numaralama bu basit verilen:

public enum Stuff {
   COW, POTATO, MOUSE;
}

Aslında Java oluşturduğu koda bakabilirsiniz:

public enum Stuff extends Enum<Stuff> {
    /*public static final*/ COW /* = new Stuff("COW", 0) */,
    /*public static final*/ POTATO /* = new Stuff("POTATO", 1) */,
    /*public static final*/ MOUSE /* = new Stuff("MOUSE", 2) */;
    /*synthetic*/ private static final Stuff[] $VALUES = new Stuff[]{Stuff.COW, Stuff.POTATO, Stuff.MOUSE};

    public static Stuff[] values() {
        return (Stuff[])$VALUES.clone();
    }

    public static Stuff valueOf(String name) {
        return (Stuff)Enum.valueOf(Stuff.class, name);
    }

    private Stuff(/*synthetic*/ String $enum$name, /*synthetic*/ int $enum$ordinal) {
        super($enum$name, $enum$ordinal);
    }
}

Nasıl javac '' geçici bir dizin yapma ve çalışan sınıflar: . çeviren arayabilirsiniz

javac -d <output directory> -XD-printflat filename.java

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Nightmare2005

    Nightmare200

    14 Ocak 2007
  • NPR

    NPR

    22 NİSAN 2006
  • RFS Dan

    RFS Dan

    22 Temmuz 2014