Apa perbedaan antara variabel kelas dan variabel contoh di Jawa? [Tutup]

16

Saya sangat baru di Jawa dan ingin memahami perbedaan antara variabel kelas dan variabel instan.

Sebagai contoh:

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

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

Skylar Adams
sumber
1
Tampaknya Anda sudah mulai membaca Tutorial Java ™: Memahami Anggota Kelas yang menjelaskan hal ini, tetapi belum sepenuhnya memahaminya.

Jawaban:

35

Mereka berdua adalah anggota variabel , artinya keduanya terkait dengan suatu kelas. Sekarang tentu saja, ada perbedaan di antara keduanya:

Variabel instance:

Variabel-variabel ini termasuk turunan dari sebuah kelas , dengan demikian sebuah objek. Dan setiap instance dari kelas itu (objek) memiliki salinan variabel itu sendiri. Perubahan yang dilakukan pada variabel tidak mencerminkan dalam contoh 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 yang dibagi dengan semua instance dari kelas itu. Jika perubahan dilakukan ke variabel itu, semua instance lainnya 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;
}

Outputnya adalah:

123456

987654

Sekarang, ubah variabel instan ke variabel kelas dengan menjadikannya 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 Barcodeagar dapat memanggilnya dari objek dan bukan dari kelas. Output akan mengikuti:

987654

987654

Abbas
sumber
Mengapa contoh C # untuk pertanyaan Java?
Basile Starynkevitch
Pikiran saya persis. Saya hanya tahu pemrograman java bukan C #, jadi Anda belum banyak membantu
Skylar Adams
1
@ BasileStarynkevitch Saya terutama seorang pengembang C # dan karena prinsipnya penting untuk keduanya dan sama baiknya saya dengan cepat memberikan contoh C #, tentu saja salah saya. :) Mengubah contoh saya ke Java.
Abbas
2
@ SkylarAdams Maaf, saya salah berasumsi terlalu cepat bahwa siapa pun yang tahu Java, tahu C #. Saya mengubah contoh menjadi Java, semoga membantu.
Abbas
9
Untuk pertanyaan semacam ini, saya pikir itu tidak relevan, apakah menggunakan Java atau C #,
Thomas Junk
6

Hal ini dijelaskan di sini (dengan contoh Bicyclekelas dengan variabel kelas numberOfBicyclesdan contoh variabel cadence, speed, gear& id):

Terkadang, Anda ingin memiliki variabel yang umum untuk semua objek. Ini dilakukan dengan staticpengubah. Bidang yang memiliki staticpengubah dalam deklarasi mereka disebut bidang statis atau variabel kelas. Mereka terkait dengan kelas, bukan dengan objek apa pun. Setiap instance kelas membagikan variabel kelas, yang berada di satu lokasi tetap dalam memori. Objek apa pun dapat mengubah nilai variabel kelas, tetapi variabel kelas juga dapat dimanipulasi tanpa membuat turunan kelas.

Variabel kelas (dideklarasikan static ) adalah lokasi yang umum untuk semua instance.

Dalam contoh, numberOfBicyclesadalah variabel kelas (karena dideklarasikan static). Hanya ada satu variabel seperti itu (yaitu lokasi) yang umum untuk semua instance dan ke kelas. Jadi jika Anda memodifikasi numberOfBicyclesdalam satu metode, metode lain akan melihat nilai baru (bahkan berbedaBicycle objek yang )

Sebaliknya gear& idadalah variabel instan (karena deklarasi mereka tidak memiliki staticpengubah). Setiap Bicycleobjek memiliki objeknya sendiri. Jika Anda memodifikasi gearuntuk beberapa Bicycle a , dan jika b adalah contoh lain, memodifikasi a.geartidak berpengaruhb.gear

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

Lihat juga Objek (ilmu komputer) & wikipage variabel Instance .

Basile Starynkevitch
sumber
4

Variabel Instans:

  • Variabel instan dideklarasikan dalam kelas, tetapi di luar metode, konstruktor, atau blok apa pun.
  • Variabel instance milik instance kelas atau Anda dapat mengatakan bahwa variabel instance milik objek.
  • Variabel Instance memiliki nilai yang terpisah dari setiap instance dari kelas.

    Class InstanceDemo {
    
         // this instance variable is visible for any child class.
           public String name = "Testing";
    
         // count variable is visible in Demo class only.
           private int count = 2;
    }

Metode untuk mengakses variabel instan:

InstanceDemo demo = new InstanceDemo ();

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

Output: 2, Pengujian

Variabel kelas:

  • Variabel kelas milik kelas.
  • variabel kelas dibuat dengan menambahkan kata kunci "statis" sebelum variabel.
  • Disebut juga variabel statis.
  • Dan variabel kelas yang paling penting mempertahankan nilai bersama tunggal untuk semua instance dari sebuah kelas, bahkan jika tidak ada objek instance kelas ada.

        Class ClassDemo {
    
         // count variable is Same for all instance of this class
           public static int count = 2;
    }

Metode untuk mengakses variabel kelas:

System.out.println("Access Class variable: " + ClassDemo.count );
//class variable is directly refer with class name

Output: 2

Perbedaan Singkat Antara Variabel Kelas dan Variabel Instans:

  • Variabel Instance memiliki nilai terpisah untuk setiap instance kelas. Variabel kelas mempertahankan nilai bersama tunggal untuk semua instance kelas, bahkan jika tidak ada objek instance kelas itu ada.
  • Anda akan menggunakan kata kunci statis untuk mengubah variabel instan menjadi variabel kelas.
  • Variabel instance dan kelas dideklarasikan di level kelas, bukan di dalam metode.
Garg
sumber
3

Perbedaan antara class variablesdan instancevariabel, hanyalah masalah who knows what?.

An instance variablehanya diketahui (= terikat ) pada instance konkret - maka namanya.

  public class Person {
       private String firstName;
       private String lastName;
  [...]
  }

Definisi kelas seperti cetak biru untuk membangun objek beton . Mungkin poin ini sedikit membingungkan Anda. Tetapi dengan menulis seperti ini, setiap variabel akan terikat pada objek konkretnya: misalnya Setiap orang memiliki Nama depannya sendiri

A class variabledi sisi lain adalah - seperti namanya - diketahui oleh setiap anggota kelas; atau secara teknis: Diketahui / terikat di tingkat kelas . Contoh khas adalah penghitung dari berapa banyak objek yang telah Anda buat - meskipun itu adalah contoh yang sangat bermasalah; tapi itu tidak masalah pada tahap awal ini.

  public class Person {
       private String firstName;
       private String lastName;
  [...]
       static int numberOfPersons = 0
  }

numberOfPersonsdideklarasikan staticyang merupakan kata kunci untuk distingush antara class variablesdan instance variabes. Variabel dideklarasikan seperti yang lain dalam definisi kelas. Tetapi staticsinyal kata kunci, bahwa itu berbeda.

  • firstName, lastNameadalah variabel instan dan terikat pada instance konkret itu

  • numberOfPersons terikat ke kelas, sehingga setiap instance dapat mengakses variabel ini.

tl; dr

Tempat variabel didefinisikan adalah definisi kelas.

Variabel kelas dikenal di / terikat ke tingkat kelas, yaitu setiap instance konkret memiliki akses ke sana. Untuk mendefinisikan variabel kelas, Anda menggunakan kata kunci static.

Variabel Instance hanya dikenal pada tingkat instance. Anda mendefinisikannya tanpastatic kata kunci.

Dokumentasi lebih lanjut untuk Java ada di sini

Thomas Junk
sumber