Java Son değişkenlere varsayılan değerler olacaktır?
Böyle bir program var:
class Test {
final int x;
{
printX();
}
Test() {
System.out.println("const called");
}
void printX() {
System.out.println("Here x is " x);
}
public static void main(String[] args) {
Test t = new Test();
}
}
Eğer çalıştırmak için çalışırsanız, derleyici hata olarak alıyorum 8* *java varsayılan değerlere göre aşağıda çıktı değil mi??
"Here x is 0".
Final değişkenler dafault değerler olacaktır?
eğer böyle Şifremi değiştirirsem
class Test {
final int x;
{
printX();
x = 7;
printX();
}
Test() {
System.out.println("const called");
}
void printX() {
System.out.println("Here x is " x);
}
public static void main(String[] args) {
Test t = new Test();
}
}
Çıktı olarak alıyorum
Here x is 0
Here x is 7
const called
Herkes bu davranış.. açıklayınız
CEVAP
http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html, "Örnek Üye Başlatılıyor": . bölüm
Java derleyici kopyaları her kurucu blok başlatıcı.
Şöyle ki:
{
printX();
}
Test() {
System.out.println("const called");
}
tam olarak ne gibi davranır:
Test() {
printX();
System.out.println("const called");
}
Böylece gördüğünüz gibi, örnek oluşturulduktan sonra, son alan definitely assigned, (http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.3.1.2):
Değişken kesinlikle verilmelidir de boş son örneği hangi sınıf her bir kurucu sonu ; aksi halde ilan derleme zamanı hatası oluşur.
Süre yok gibi görünüyor belirtildiği explitely içinde docs (en azından ben değil bulur, son bir alanın geçici kabul varsayılan değer sona ermeden kurucu, böylece bir predictable value eğer sen oku önce ataması.
Varsayılan değerler: http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5
İkinci parçacık, x derleyici şikayet değil, örnek oluşturma başlatılmış
Test() {
printX();
x = 7;
printX();
System.out.println("const called");
}
'kamu, varsayılan olarak korumalı...
Java desteği varsayılan parametre değe...
Nasıl ActiveRecord varsayılan değerler...
Varsayılan ayar, karakter kodlaması Ja...
Java Güvenlik: Geçersiz anahtar boyutu...