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
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.
Java atmak ne olabilir?...
Nasıl Java iki dizi bir arada olabilir...
Neden't statik yöntemler Java'da ...
Neden't dizeleri Java ve .değişke...
Java sebebi ne olabilir.lang.yansıtır....