2013-05-25 8 views
6

Böyle "alexei.ATable $ IndexOfATable.access 1400 $ (ATable.java:80) de"Numara .access XXXX ne anlama geliyor?

Ve ilginç değilim, sayı 1400 ne gibi bir yığın bir dize, var? İç sınıf IndexOfATable'ın yalnızca 3 alanı var, 1400 değil.

Nezaket, Niçin 1400 sayısı çok büyük?

debug: 
Exception in thread "main" java.lang.NullPointerException 
    at alexei.ATable$IndexOfATable.compareTwoRows(ATable.java:181) 
    at alexei.ATable$IndexOfATable.access$1400(ATable.java:80) 
    at alexei.ATable.updateIndex(ATable.java:501) 
    at alexei.ATable.addRow(ATable.java:361) 
    at learn.Base.main(Base.java:18) 
Java Result: 1 
+1

'.. $ 1400 'yalnızca belirli bir tanımlayıcının bir parçasıdır - bunlarla' $ 'olan tanımlayıcılar * normalde * bir derleyici/araç tarafından oluşturulur (javac'ta anonim sınıflar dahil). Bir indeks veya boyut ile ilgili değildir. "Bu cevap" (http://stackoverflow.com/a/4636669/2246674) "normalde" ne anlama geldiğine bakın. – user2246674

+0

Farkettim, onlar adım 100 ile numaralandırıldı: erişim $ 000, erişim 100 $, erişim $ 200 ve benzeri – Dumas45

cevap

15

Derleyici, iç sınıfla başa çıkmak için oluşturduğu sentetik bir yöntemdir. Java bayt kodu, bir iç sınıf kavramına sahip değildir, bu yüzden derlendiğinde, çalışma zamanında birinin varlığını "uyandırmak" için çeşitli hileler gerçekleştirir. Bu özel durumda, access$XXX sınıfı metotlar genel olarak iç sınıftan dış sınıfa bir referans sağlayarak ilişkilidir. Bu gibi sentetik varlıklar bunun belirtileridir. (Genellikle bunları sınıf/yöntem adında bir dolar varlığıyla fark edebilirsiniz.)

Neden 1400 sayısı çok büyük?

Sadece derleyici hakkında bilmesi gereken tamamen keyfi tanımlayıcı (ve dolayısıyla seçer.) Sürece uygulama içinde benzersiz olarak, bu olabilir herhangi bir şey (teknik olarak konuşursak, hatta olmak zorunda değildir bir sayı.)

Sorunun nerede olduğu sorusuyla ilgili olarak, en çok yığın izinin verdiği satırı inceleyin: ATable.java:181.