Apa perbedaan antara variabel kelas dan variabel instance di Java?

Saya masih sangat baru di Java dan ingin memahami perbedaan antara variabel kelas dan variabel instance.

Sebagai contoh:

class Bicycle { 
    static int cadence = 0; 
    int speed = 0; 
    int gear = 1; 
}

Bagaimana variabel instance dan variabel kelas berbeda satu sama lain? Variabel mana di sini yang merupakan variabel kelas, dan mana yang merupakan variabel instance? Bagaimana hal ini mempengaruhi ruang lingkup?

Keduanya adalah variabel anggota, yang berarti bahwa keduanya diasosiasikan dengan kelas. Sekarang tentu saja, ada perbedaan di antara keduanya:

Variabel instance:

Variabel-variabel ini milik instance dari sebuah kelas, jadi sebuah objek. Dan setiap instance dari kelas itu (objek) memiliki salinan variabel itu sendiri. Perubahan yang dibuat pada variabel tidak tercermin dalam instance lain dari kelas itu.

public class Product {
    public int Barcode;
}

Variabel kelas:

Ini juga dikenal sebagai variabel anggota statis dan hanya ada satu salinan dari variabel tersebut yang digunakan bersama dengan semua instance dari kelas tersebut. Jika perubahan dilakukan pada variabel itu, semua instance lain akan melihat efek dari perubahan tersebut.

public class Product {
    public static int Barcode;
}

Contoh lengkap:

// INSTANCE VARIABLE
public class Main {

    public static void main(String[] args) {

        Product prod1 = new Product();
        prod1.Barcode = 123456;

        Product prod2 = new Product();
        prod2.Barcode = 987654;

        System.out.println(prod1.Barcode);
        System.out.println(prod2.Barcode);
    }
}

public class Product {
    public int Barcode;
}

Keluarannya adalah:

123456

987654

Sekarang, ubah variabel instance menjadi variabel kelas dengan membuatnya statis:

//CLASS VARIABLE
public class Main {

    public static void main(String[] args) {

        Product prod1 = new Product();
        prod1.setBarcode(123456);
        Product prod2 = new Product();
        prod2.setBarcode(987654);

        System.out.println(prod1.getBarcode());
        System.out.println(prod2.getBarcode());
    }
}

public class Product {

    public static int Barcode;

    public int getBarcode() {
        return Barcode;
    }

    public void setBarcode(int value){
        Barcode = value;
    }
}

Saya menggunakan metode non-statis untuk mendapatkan dan mengatur nilai Barcode agar dapat memanggilnya dari objek dan bukan dari kelas. Keluarannya adalah sebagai berikut:

987654

987654

Komentar (5)

Hal ini dijelaskan di sini (dengan contoh kelas Sepeda dengan variabel kelas jumlahSepeda dan variabel contoh kecepatan, kecepatan, gear &; id):

Terkadang, Anda ingin memiliki variabel yang umum untuk semua objek. Hal ini dapat dilakukan dengan modifier static. Field yang memiliki modifier static dalam deklarasinya disebut field statis atau variabel kelas. Mereka diasosiasikan dengan kelas, bukan dengan objek apapun. Setiap instance dari kelas berbagi variabel kelas, yang berada di satu lokasi tetap di memori. Setiap objek dapat mengubah nilai dari variabel kelas, tetapi variabel kelas juga dapat dimanipulasi tanpa membuat instance dari kelas.

Variabel kelas (dinyatakan statis) adalah lokasi yang umum untuk semua instance.

Dalam contoh, numberOfBicycles adalah variabel kelas (karena dideklarasikan statis). Hanya ada satu variabel seperti itu (yaitu lokasi) yang umum untuk semua instance dan kelas. Jadi, jika anda memodifikasi numberOfBicycles dalam satu metode, metode-metode lain akan melihat nilai baru (bahkan untuk objek Bicycle yang berbeda)

Sebaliknya, gear &; id adalah variabel instance (karena deklarasi mereka tidak memiliki modifier static). Setiap objek Sepeda memiliki satu objek sendiri. Jika Anda memodifikasi gear untuk beberapa Bicycle a, dan jika b adalah instance yang lain, memodifikasi a.gear tidak berpengaruh pada b.gear

Setiap objek Java adalah zona memori yang berbeda dengan beberapa meta data (misalnya beberapa referensi ke kelasnya) dan variabel instance-nya sendiri (mungkin diwarisi dari superclass). Tetapi variabel kelas adalah umum untuk kelas dan dibagi oleh semua instance.

Lihat juga Objek (ilmu komputer) & Variabel instans wikipages.

Komentar (0)

Variabel Instansi:

  • Variabel Instance dideklarasikan dalam kelas, tetapi di luar metode, konstruktor atau blok apa pun.

  • Variabel instance adalah milik instance dari sebuah kelas atau bisa dikatakan variabel instance itu milik objek.

  • Variabel instance memiliki nilai terpisah dari setiap instance dari kelas. dari kelas.

     Kelas InstanceDemo {
    
          // variabel instance ini dapat dilihat untuk setiap kelas anak.
            public String name = "Testing";
    
          // variabel count hanya dapat dilihat di kelas Demo.
            private int count = 2;
     }

Metode untuk mengakses variabel instance:

InstanceDemo demo = new InstanceDemo ();

System.out.println("Access Instance variable: " + demo.count + " , "+demo.name );

Keluaran: 2 , Pengujian

Variabel Kelas:

  • Variabel kelas adalah milik kelas.

  • Variabel kelas dibuat dengan menambahkan kata kunci "statis" sebelum variabel variabel.

  • Juga disebut variabel statis.

  • Dan yang paling penting variabel kelas mempertahankan satu nilai bersama untuk semua instance dari sebuah kelas, bahkan jika tidak ada objek instance dari kelas tersebut ada.

         Kelas ClassDemo {
    
          // variabel count sama untuk semua instance dari kelas ini
            public static int count = 2;
     }

Metode untuk mengakses variabel kelas:

System.out.println("Access Class variable: " + ClassDemo.count ); //variabel kelas langsung merujuk dengan nama kelas

Keluaran: 2

Perbedaan Singkat Antara Variabel Kelas dan Variabel Instance:

  • Variabel instans memiliki nilai terpisah untuk setiap instance dari sebuah kelas. Variabel kelas mempertahankan satu nilai bersama untuk semua instance dari kelas tersebut, bahkan jika tidak ada objek instance dari kelas tersebut. kelas, bahkan jika tidak ada objek instance dari kelas tersebut.
  • Anda akan menggunakan kata kunci statis untuk mengubah variabel instance menjadi menjadi variabel kelas.
  • Baik variabel instance maupun kelas dideklarasikan pada level kelas, bukan di dalam metode.
Komentar (0)