Java Bir yapıcıda int dizisini başlat


92

Bir sınıfım var ve o sınıfta şuna sahibim:

 //some code
 private int[] data = new int[3];
 //some code

Sonra kurucumda:

public Date(){
    data[0] = 0;
    data[1] = 0;
    data[2] = 0;
}

Bunu yaparsam her şey yolundadır. Varsayılan veri değerleri başlatılır, ancak bunun yerine şunu yaparsam:

public Date(){
    int[] data = {0,0,0};
}

Diyor ki:

Local variable hides a field

Neden?

Yapıcı içinde bir diziyi başlatmanın en iyi yolu nedir?


Umarım değişken kapsamı kavramının farkındasınızdır. datasonraki değişkeniniz "//some code"tüm sınıfın kapsamına sahip. datayapıcıdaki değişken , yapıcı içinde bir kapsama sahipken. ve kurucu tamamlandığında, değişken yok edilecektir. Ayrıca datayapıcı içindeki değişken, değişkeni sınıfta aynı adla gizler. Bu hatayı haklı çıkarırLocal variable hides a field
Naveen Babu

Yanıtlar:


180
private int[] data = new int[3];

Bu, dizi öğelerinizi zaten 0 olarak başlatır. Bunu yapıcıda tekrarlamanıza gerek yoktur.

Yapıcınızda şöyle olmalıdır:

data = new int[]{0, 0, 0};

Evet. Bana izin vermesinin tek yolu buydu. Sadece verileri koymak; "bu bir ifade değil" dedi. Teşekkürler
Favolas

data=new int[3]Varsayılan yapıcıda kullanamaz Date()mı?
parsecer

7

Ya yapabilirsin:

public class Data {
    private int[] data;

    public Data() {
        data = new int[]{0, 0, 0};
    }
}

Yapıcıda başlatılan dataveya:

public class Data {
    private int[] data = new int[]{0, 0, 0};

    public Data() {
        // data already initialised
    }
}

Yapıcıdaki datakod çalıştırılmadan önce başlatılır .


Data = new int [] {0,0,0}; yapıcının içinde. Yapıcıda sadece veri koyarak koddan önce başlatırsam;
kurucunun

dizide milyondan fazla eleman varsa .. ilk kodu kullanmak istersiniz ve public Data() throws Error {eğer OutOfMemoryErroratılacaksa satırı değiştirirsiniz .
nick

4

Bunun nedeni, yapıcıda bir öznitelikle aynı ada sahip yerel bir değişken bildirmiş olmanızdır.

Tüm öğelerin sıfır olarak başlatıldığı bir tamsayı dizisi tahsis etmek için, bunu yapıcıya yazın:

data = new int[3];

Diğer başlangıç ​​değerlerine sahip bir tamsayı dizisi tahsis etmek için bu kodu yapıcıya koyun:

int[] temp = {2, 3, 7};
data = temp;

veya:

data = new int[] {2, 3, 7};

4

neden basitçe değil

public Date(){
    data = new int[]{0,0,0};
}

hatayı almanızın nedeni int[] data = ..., yeni bir değişken bildirmesi ve alanı gizlemesidata

ancak, dizinin içeriğinin zaten 0 olarak başlatıldığına dikkat edilmelidir (varsayılan değeri int)


1

kurucunuzda başka bir int dizisi oluşturuyorsunuz:

 public Date(){
  int[] data = {0,0,0};
  }

Bunu dene:

 data = {0,0,0};

NOT: Bu arada, bir örnek değişkeni olarak bildirilmişse dizi öğelerinizi başlatmanıza gerek YOKTUR. Örnek değişkenleri, bir tamsayı dizisi için varsayılan değerlerin tümü sıfır olan varsayılan değerlerini otomatik olarak alır.

Yerel olarak bildirilmiş diziye sahip olsaydınız, her bir öğeyi başlatmanız gerekirdi.


0

En iyi yol, herhangi bir ilklendirme cümlesi yazmamaktır. Eğer yazarsanız Bunun nedeni int a[]=new int[3], varsayılan olarak, daha sonra tüm dizi yani değerlerini Java a[0], a[1]ve a[2]başlatılır 0! Bir alanı gizleyen yerel değişkenle ilgili olarak, sonuca varmamız için kodunuzun tamamını gönderin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.