2013-03-01 24 views
8

Mam zamieszanie związane z inicjowaniem zmiennych w Javie. Jak rozumiem, zmienne klasy otrzymują domyślną inicjalizację, podczas gdy zmienne lokalne nie są domyślnie inicjowane. Jeśli jednak utworzę tablicę wewnątrz metody za pomocą nowego słowa kluczowego, domyślnie zostanie ona zainicjowana. Czy to dotyczy wszystkich przedmiotów? Czy użycie nowego słowa kluczowego inicjuje obiekt, niezależnie od tego, czy jest to zmienna klasy, czy zmienna lokalna?Domyślna inicjalizacja w java

+1

Czy go wypróbować, aby zobaczyć co się dzieje? –

+0

Tak, próbowałem z innymi obiektami i to się wydaje, dlatego zadałem pytanie: –

Odpowiedz

2

Czy dotyczy to wszystkich przedmiotów? Czy za pomocą nowego słowa kluczowego zainicjować obiekt niezależnie od tego, czy jest to zmienna klasy, czy zmienna lokalna?

Podczas korzystania z słowa kluczowego new. oznacza to, że masz zainicjalizowany swój obiekt. nie ma znaczenia, czy zadeklarowano to na poziomie metody czy na poziomie instancji.

public void method(){ 
Object obj1;// not initialized 
Object obj2 = new Object();//initialized 
} 
+1

Dziękuję za wyjaśnienie. Tego właśnie szukałem. –

+0

@BM serdecznie zapraszamy :) – PermGenError

5

Po dalszych badaniach prymitywy będą zawsze inicjowane do wartości domyślnych tylko wtedy, gdy są zmiennymi składowymi, zmienne lokalne będą generować błąd kompilacji, jeśli nie zostaną zainicjowane.

Jeśli utworzysz tablicę prymitywów, wszystkie zostaną zainicjowane domyślnie (dotyczy to zarówno tablic lokalnych, jak i członków), tablica obiektów, które będą potrzebne do utworzenia instancji.

+0

Nie jestem tego pewien. Kiedy deklaruję prymityw w metodzie, domyślnie nie jest ona inicjowana.Jeśli spróbuję użyć go bez inicjalizacji, pojawia się błąd kompilacji. –

+0

yes, kompilatory wyplują komunikat "ta zmienna mogła nie zostać zainicjalizowana" dla niezainicjowanych lokalnych prymitywów –

+0

@JeffHawthorne naprawdę? Nie mam przed sobą kompilatora java, żeby to przetestować, ale myślę, że prymitywy zawsze będą miały podane wartości domyślne, gdy zostaną zadeklarowane, niezależnie od miejsca. –

27

Z Java Language Specification

każda zmienna klasy zmiennej przykład lub składnik Tablica jest inicjowany na wartość domyślną, gdy jest tworzony (§15.9, §15.10)

  • Dla bajtów typu wartość domyślna to zero, czyli wartość (bajt) 0.

  • W przypadku typu short domyślną wartością jest zero, czyli wartość (short) 0.

  • Dla typu int, domyślna wartość wynosi zero, czyli 0.

  • Dla typu long, domyślna wartość wynosi zero, to znaczy, 0L.

  • Dla zmiennej typu typ wartość domyślna to zero dodatnie, czyli 0.0f.

  • Dla typu double domyślną wartością jest zero dodatnie, czyli 0.0d.

  • W typie char domyślną wartością jest pusty znak "\ u0000".

  • Dla typu boolean domyślną wartością jest false.

  • Dla wszystkich typów referencyjnych (§4.3), wartość domyślna to null

+0

+1 za faktyczne wymienienie wszystkich prymitywów, byłem zbyt leniwy =). –

+0

Dzięki Wiem, jakie zainicjowane wartości są, gdy są one zainicjalizowane. Po prostu nie byłem pewien, w jakich sytuacjach inicjowane są domyślne obiekty. –

+0

To powinna być zaakceptowana odpowiedź. –