Nesnelerin Dizisi Java

⚡ Akıllı Özet

Nesnelerin Dizisi Java Nesne referanslarını sabit boyutlu, bitişik bir yuvada saklar; bu sayede tek bir değişken bir sınıfın birçok örneğini tutabilir ve yineleme, değiştirme ve yöntemlere geçirme için her birine bir dizin aracılığıyla erişebilir.

  • ???? Referans depolama: Her bir yuva Java Nesne dizisi, nesnenin kendisini değil, nesneye bir referans tutar; tıpkı herhangi bir nesne değişkeni gibi. Java.
  • 🧱 İki aşamalı oluşturma: Diziyi `new ClassName[size]` ile ayırın, ardından her bir nesneyi `new ClassName()` ile ayırın ve üzerindeki yöntemleri çağırın.
  • ⚠️ NullPointerException: Her slot başlangıçta null değerle başlar. Başlatılmamış bir slot üzerinde bir metot çağırmak, çalışma zamanında NullPointerException hatasına neden olur.
  • 🔁 yineleme: Dizideki her nesneyi tek tek incelemek için dizi uzunluğuyla bir for döngüsü veya gelişmiş bir for döngüsü kullanın.
  • 📏 Sabit boyut: Bir dizi, tahsis edildikten sonra büyüyemez. Nesne sayısı çalışma zamanında değiştiğinde ArrayList kullanın.
  • 🏗️ Yapıcı fonksiyonun başlatılması: Oluşturma sırasında doğrudan geçirilen yapıcı fonksiyonlar, sonradan yapılan ayarlayıcı çağrılarına kıyasla daha kısa ve güvenli bir kurulum sağlar.
  • 🚚 Yöntem parametresi: Diziyi bir metoda iletmek, bir referans aktarımı anlamına gelir; bu nedenle metot içindeki değişiklikler çağıran tarafça görülebilir.

Nesnelerin Dizisi Java

Nesne dizisi nedir? Java?

A Java nesne dizisi Aynı sınıfa ait birden fazla nesne örneğini tek bir sabit boyutlu kapsayıcıda saklar. Değerleri saklayan ilkel bir dizinin aksine, int, doubleya da boolean Her bir yuvada doğrudan bir nesne dizisi saklanır. referanslarHer bir yuva, bir nesnenin bellek konumunu gösterir ve nesnenin kendisi de bu yuvada bulunur. Java yığın.

Bu düzen, herhangi bir nesnenin nasıl görüneceğine uyar. değişken in Java İşe yarıyor. Dizi, birden fazla nesne referansını bir araya getirerek bunlara indeksle erişmenizi sağlar. Nesne sayısı önceden biliniyorsa ve programın ömrü boyunca değişmiyorsa, doğal bir seçimdir.

Sözdizimi

ClassName[] obj = new ClassName[array_length];

Sağ taraf, şu amaçla alan ayırır: array_length referansların tümü, başlangıç ​​değerleriyle işaretlenmiştir. nullHiçbir nesne ClassName Henüz mevcut değil, yalnızca bu nesnelere referans tutabilen bir kap var.

Nesnelerden oluşan bir dizi nasıl oluşturulur? Java

Nesnelerden oluşan işlevsel bir dizi oluşturmak her zaman iki tahsis adımı gerektirir. Birincisi referans kapsayıcıyı tahsis eder, ikincisi ise kapsayıcının işaret edeceği her nesneyi tahsis eder. (Atla)ping İkinci adım, en yaygın kaynaktır. NullPointerException başlangıç ​​seviyesinde Java kodu.

) 1 Adım açık kod düzenleyici ve aşağıdaki kodu kopyalayın:

class ObjectArray {
    public static void main(String args[]) {
        Account obj[] = new Account[2];
        // obj[0] = new Account();
        // obj[1] = new Account();
        obj[0].setData(1, 2);
        obj[1].setData(3, 4);
        System.out.println("For Array Element 0");
        obj[0].showData();
        System.out.println("For Array Element 1");
        obj[1].showData();
    }
}

class Account {
    int a;
    int b;

    public void setData(int c, int d) {
        a = c;
        b = d;
    }

    public void showData() {
        System.out.println("Value of a = " + a);
        System.out.println("Value of b = " + b);
    }
}

) 2 Adım Olarak dosyayı kaydedin ObjectArray.javaArdından derleyip çalıştırın.

) 3 Adım Hatayı not edin. 4. adıma geçmeden önce hatayı ayıklamaya çalışın.

) 4 Adım Hattı inceleyin Account obj[] = new Account[2];Bu, türünde iki referans değişkeninden oluşan bir dizi tahsis eder. Accountancak herhangi bir kaynak tahsis etmiyor. Account nesneler. Her iki yuva da nesneleri tutar. nullve arama obj[0].setData(...) Bir on null referans bir hata fırlatır NullPointerException işlem esnasında.

Java Nesne dizisi referans değişkenleri

) 5 Adım 4. ve 5. satırların yorum satırlarını kaldırın. Bu iki satır gerçek bir değişiklik yaratır. Account nesneleri atayın obj[0] hem de obj[1]Dizi artık gerçek referanslar içeriyor ve kod sorunsuz çalışıyor.

Java Nesne dizisi dolduruldu

Çıktı:

For Array Element 0
Value of a = 1
Value of b = 2
For Array Element 1
Value of a = 3
Value of b = 4

Nesne Dizisini Nasıl Başlatırım? Java

Yukarıda gösterilen setter tabanlı başlatmanın ötesinde, nesne dizisi üç daha temiz şekilde başlatılabilir. Her stil, ayrıntılı anlatım yerine netliği tercih eder, bu nedenle duruma en uygun olanı seçin.

  1. Döngü başlatma — Diziyi ayırın, ardından her bir indeksi tek tek inceleyin ve yeni bir nesne atayın. Bu, büyük diziler veya nesne sayısının dinamik olduğu durumlarda standart bir yöntemdir.
  2. Yapıcı başlatma — Oluşturma sırasında değerleri doğrudan kurucuya iletin, böylece ayrı bir setter çağrısına gerek kalmaz.
  3. Dizi sabiti başlatma — Tek bir ifade içinde tanımlama ve doldurma işlemi, satır içi kod kullanılarak gerçekleştirilir. { ... } Küçük sabit kümeler için ideal başlatıcı.
class Account {
    int a, b;

    public Account(int a, int b) {   // constructor
        this.a = a;
        this.b = b;
    }
}

public class InitDemo {
    public static void main(String[] args) {

        // 1) Loop initialisation
        Account[] loopArr = new Account[3];
        for (int i = 0; i < loopArr.length; i++) {
            loopArr[i] = new Account(i, i * 10);
        }

        // 2) Constructor initialisation, one slot at a time
        Account[] ctorArr = new Account[2];
        ctorArr[0] = new Account(1, 2);
        ctorArr[1] = new Account(3, 4);

        // 3) Array literal initialisation
        Account[] litArr = {
            new Account(5, 6),
            new Account(7, 8),
            new Account(9, 10)
        };

        System.out.println("loop size   = " + loopArr.length);
        System.out.println("ctor size   = " + ctorArr.length);
        System.out.println("literal size= " + litArr.length);
    }
}

Döngü başlatma, boş yuva kalmamasını garanti ettiği için en güvenli varsayılan yöntemdir. nullYapıcı fonksiyon başlatma, her nesnenin farklı argümanlara ihtiyaç duyduğu durumlarda amacı açıkça belirtir ve dizi değişmezleri küçük örnek kodları kompakt tutar. Bir nedeniniz yoksa aynı dizi içinde farklı stilleri karıştırmayın: tutarlılık hataların tespitini kolaylaştırır.

Bir nesnedeki öğelere yineleme ve erişim Java Nesne Dizisi

Nesnelerden oluşan bir dizi oluşturulduktan sonra, üç yöntem neredeyse tüm erişim ihtiyaçlarını karşılar. Kodun dizin üzerinde ne kadar kontrole ihtiyaç duyduğuna uygun döngü stilini seçin.

Klasik - Classic for döngü Bu, öğeleri değiştirmek, komşuları karşılaştırmak veya bir alt aralığı yinelemek için yararlı olan dizine erişim sağlar.

for (int i = 0; i < obj.length; i++) {
    System.out.println("Element " + i);
    obj[i].showData();
}

geliştirilmiş for döngü (“for-each” döngüsü), indeksi gizler ve indeks gerekmediğinde daha doğal bir okuma sağlar:

for (Account acc : obj) {
    acc.showData();
}

Akarsular (Java 8 ve sonrası) Diziyi, filtreleme ve eşleme için kullanışlı olan bir işlem hattına dönüştürün.pingveya döngü yazmadan toplama işlemi:

import java.util.Arrays;

Arrays.stream(obj)
      .filter(acc -> acc.a > 0)
      .forEach(Account::showData);

Tek bir öğeyi okumak veya güncellemek için doğrudan indeks erişimini kullanın, örneğin obj[1].setData(10, 20)Öncelikle uzunluğunu mutlaka kontrol edin. obj.length kaçınmak ArrayIndexOutOfBoundsExceptionHerhangi bir yuva şu şekilde olabilirdi: nullErişimi boş değer kontrolü veya başka bir yöntemle koruyun. Optional Programın çökmesini önlemek için çalışmaya devam etmesini sağlamak.

Nesne dizisi ile nesne listesi arasındaki fark Java

Nesnelerden oluşan düz bir dizi hızlı ve tahmin edilebilir olsa da, çalışma zamanında nesne sayısı değiştiği anda sabit boyutu bir sınırlama haline gelir. JavaKoleksiyonlar çerçevesi şunları sağlar: ArrayList Dinamik alternatif olarak. Aşağıdaki tablo, her seçeneğin ne zaman uygun olduğunu vurgulamaktadır.

ÖzellikNesne DizisiNesnelerden oluşan ArrayList
BedenOluşturma aşamasında düzeltildi.Otomatik olarak büyür ve küçülür.
BeyanAccount[] a = new Account[5];List<Account> list = new ArrayList<>();
Erişim öğesia[i]list.get(i)
Öğe ekleOluşturulduktan sonra desteklenmiyor.list.add(obj)
Tip güvenliğiDerleme zamanında bildirimle tiplendirilmiştir.Derleme zamanında uygulanan jenerikler
PerformansAz miktarda daha hızlı indekslenmiş okumalarAmortize edilmiş O(1) ekle, eleman başına bazı ek masraflar
Tercih edildiğindeBoyut biliniyor ve sabittir.Boyut bilinmiyor veya çalışma zamanında değişiyor.

Bellek kullanımının kısıtlı olduğu ve indekslemenin öngörülebilir olduğu durumlarda, örneğin matris düzenlerinde veya performans açısından kritik olan sıcak yollarda, dizi kullanın. ArrayList Çoğu günlük uygulama kodunda, yeniden tahsis yapmadan ekleme ve çıkarma yeteneği, eleman başına küçük ek yükten daha önemli olduğu için bu özellik tercih edilir.

SSS

Nesnelerden oluşan bir dizi Java Aynı sınıfa ait örneklerin referanslarını depolayan sabit boyutlu bir kapsayıcıdır. Her bir yuva, yığındaki bir nesneye işaret eder ve öğelere köşeli parantezler kullanılarak sıfır tabanlı indeksle erişilir.

ClassName[] arr = new ClassName[size] şeklinde diziyi tanımlayın, ardından her bir nesneyi bir döngü içinde veya satır içi dizi sabitiyle new ClassName() kullanarak oluşturun. Her iki adım da gereklidir; ilki yalnızca referans yuvaları ayırır.

Çünkü `new ClassName[size]` yalnızca dizinin kendisini ayırır. Her yuva null olarak başlar, bu nedenle o yuvada herhangi bir yöntemi çağırmak NullPointerException hatası verir. Bunu düzeltmek için, kullanmadan önce her dizine yeni bir `ClassName()` atayın.

Dizilerin boyutu oluşturulurken sabit olarak seçilirken, ArrayList otomatik olarak büyür ve küçülür. Diziler biraz daha hızlı indeksli okuma sağlar; ArrayList ise günlük uygulama kodları için kullanışlı ekleme, kaldırma ve akış yöntemleri ekler.

İndeks gerektiğinde arr.length ile klasik bir for döngüsü kullanın veya basit yineleme için gelişmiş bir for-each döngüsü kullanın. Filtreleme veya dönüştürme için diziyi Arrays.stream(arr) ile sarmalayın ve ihtiyacınız olan işlem hattını zincirleyin.

Parametreyi ClassName[] name olarak tanımlayın, ardından metodu dizi değişkeniyle çağırın. Java Bu yöntem, dizi referansını değer olarak iletir; bu nedenle, yöntem içindeki eleman alanlarındaki değişiklikler çağıran tarafından görülebilir.

Makine öğrenimi kod üreteçleri, iki aşamalı bellek tahsis modelini tanır ve yeni başlayanların unuttuğu eksik `new ClassName()` satırlarını tamamlar. Ayrıca, hedef koleksiyon boyutu bilinmediğinde `ArrayList` önererek `NullPointerException` hatalarını azaltırlar.

Evet. GitHub Copilot, etki alanı modelini açıklayan bir yorumdan dizi bildirimleri, kurucu döngüleri, yineleme blokları ve ArrayList dönüşümleri oluşturur. RevOluşturulan kodu kullanmadan önce doğru kurucu argümanları ve güvenli null işleme için inceleyin.

Bu yazıyı şu şekilde özetleyin: