SORU
21 NİSAN 2011, PERŞEMBE


Java atmak ne olabilir?

Geleneksel bilgelik diyor tek atmak nesneleri genişletmek Throwable Java, ama bu şu an için devre dışı bayt kodu doğrulayıcı ve Java derleme ve çalıştırma kodu atar rasgele nesneleri ve hatta ilkel?

Yukarı JVM athrow ve işlenen yığında ilk objref; ama eğer dediği başvurusu Throwable çalışma anında bir puan olmadığını kontrol edin olur mu? çıkacaktır baktım

CEVAP
21 NİSAN 2011, PERŞEMBE


JVM uygulamanız bağlıdır. Java VM şartnameye göre eğer nesne Throwable değilse tanımsız davranıştır.

Bu objectrefgerekirtip referans olması ve veya Throwable bir alt sınıfı Throwable örneği olan bir nesne belirtmelidir.

section 6.1, "The Meaning of 'Must'":

Bazı kısıtlama ("olmalı" ya da "olmalı") açıklama zamanında tatmin olmaz bir yönerge, Java sanal makinesi davranışı tanımsızdır.

throw new Object() eşdeğer yapan bir test programı Jasmin assembler kullanarak yazdım. Java Noktasal Server VM VerifyError atar:

# cat Athrow.j 
.source Athrow.j
.class public Athrow
.super java/lang/Object

.method public <init>()V
    aload_0
    invokenonvirtual java/lang/Object/<init>()V
    return
.end method

.method public static main([Ljava/lang/String;)V
    .limit stack 2

    new java/lang/Object
    dup
    invokenonvirtual java/lang/Object/<init>()V
    athrow

    return
.end method

# java -jar jasmin.jar Athrow.j 
Generated: Athrow.class

# java Athrow
Exception in thread "main" java.lang.VerifyError: (class: Athrow, method: main signature: ([Ljava/lang/String;)V) Can only throw Throwable objects

Bayt kodu devre dışı bırakma doğrulayıcı yürütmek athrow sağlar ve JVM yazdırmaya çalıştığında, kaza gibi görünüyor özel durum ayrıntıları. Bu iki program, Exception, bir atar yukarıda test programı olan ikinci Object Bir atar ilk karşılaştırın. Bunun bir çıktısını: ortada çıkar nasıl dikkat edin

# java -Xverify:none examples/Uncaught
Exception in thread "main" java.lang.Exception
        at examples.Uncaught.main(Uncaught.j)
# java -Xverify:none Athrow
Exception in thread "main" #

Tabii ki, bayt kodu doğrulayıcı devre dışı bırakılması tehlikelidir. VM uygun bayt kodu doğrulama yapıldı varsayalım yazılır ve bu nedenle talimat işlenen typecheck yok. Dikkat: bayt kodu doğrulama C programları tanımsız davranış gibidir atlatmak zaman çağırmak tanımsız davranış; her ne olursa, şeytanlar burnundan uçan dahil olabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • InsideBlackBerry

    InsideBlackB

    14 Aralık 2009
  • NextKsa

    NextKsa

    7 EKİM 2009
  • pissengehen

    pissengehen

    26 EYLÜL 2006