"Profesor tidak bisa keluar dari kebiasaannya. Guru-guru tua yang terbiasa mengajar selalu seperti ini. Tidak ada yang bisa dia ceritakan kepadamu yang tidak dapat kamu temukan di buku. Kamu tidak belajar berenang dengan mendengarkan untuk kuliah renang. Kuliah hanya berguna jika Anda terbiasa dengan mata pelajaran tersebut dan mengetahui hampir sebanyak profesor Anda."

"Tetap saja, pelajarannya berguna."

"Ya. Maksud saya, kami berharap demikian. Semakin banyak perspektif tentang subjek yang Anda dengar, semakin dekat Anda dengan kebenaran. Ketika Anda mendengar hanya satu, yang dapat Anda lakukan hanyalah percaya atau tidak. Oke, mari kita kembali ke bisnis."

"Mari kita lihat gambar yang saya tunjukkan sebelumnya."


public class Variables

{
   private static String TEXT = "The end.";
  ┗━━━━━━━━━━━━━━━━━━━┛
   public static void main (String[] args)
                          ┗━━━━━━━┛
  {
     System.out.println("Hi");
     String s = "Hi!";
   ┏┗━━━━┛
    System.out.println(s);
    if (args != NULL)
    {
       String s2 = s;
      ┗━━━━┛
   
      System.out.println(s2);
     
    }
    Variables variables = new Variables();
    System.out.println(variables.instanceVariable);
    System.out.println(TEXT);
   
  }
 
   public String instanceVariable;
  ┗━━━━━━━━━━━━━━━┛
   public Variables()
   {
      instanceVariable = "Instance variable test.";
   }
}

1. Variabel yang dideklarasikan dalam suatu metode ada (terlihat) dari awal deklarasi hingga akhir metode.

2. Variabel yang dideklarasikan dalam blok kode ada hingga akhir blok kode.

3. Parameter metode ada hingga metode kembali.

4. Variabel dalam suatu objek ada selama seluruh umur objek yang memuatnya. Visibilitas mereka juga diatur oleh pengubah akses khusus.

5. Variabel statis (kelas) ada sepanjang waktu program berjalan. Visibilitas mereka juga ditentukan oleh pengubah akses."

"Benar. Aku ingat gambar ini."

"Bagus. Izinkan saya mengingatkan Anda tentang beberapa poin penting."

"Semua variabel yang dideklarasikan di dalam metode ada (terlihat) dari titik di mana mereka dideklarasikan hingga akhir metode (Contoh 1)."

"Jika sebuah variabel dideklarasikan dalam blok kode, itu ada sampai akhir blok kode (Contoh 2)."

"Jika variabel adalah parameter metode, itu ada (terlihat) di seluruh tubuh metode (Contoh 3)."

"Jika sebuah variabel adalah variabel instan (Contoh 4), itu terkait dengan objek tertentu dan ada selama objek itu ada. Jika tidak ada objek, maka tidak ada instance dari variabel tersebut. Anda dapat mengakses variabel (yaitu variabel terlihat) dari semua metode kelas, terlepas dari apakah mereka dideklarasikan sebelum atau sesudahnya. Variabel baru dibuat untuk setiap objek. Itu tidak tergantung pada objek lain. Anda tidak dapat mengakses variabel instan dari metode statis . "

"Jika sebuah variabel dideklarasikan static, yaitu ditandai dengan kata kunci static , itu ada selama kelasnya ada. JVM biasanya memuat kelas ke dalam memori saat pertama kali digunakan. Itu juga saat variabel statis diinisialisasi."

Lebih lanjut tentang ruang lingkup variabel - 1

"Contoh di atas mendeklarasikan kelas Cat, yang memiliki empat variabel: a, b, s (variabel non-statis), dan hitung (variabel statis). Jika kita membuat beberapa objek dari kelas ini (katakanlah, tiga), masing-masing mereka akan berisi instance-nya sendiri dari variabel non-statis kelas. Variabel statis dibagikan oleh semua objek kelas. Secara teknis, itu bahkan tidak ada di dalam objek ini, karena itu ada bahkan sebelum objek Cat apa pun dibuat."

"Inilah yang terjadi jika kita mendeklarasikan variabel sstatis:"

Lebih lanjut tentang ruang lingkup variabel - 2

"Oke. Kurasa aku mengerti."

"Bisakah Anda mendeklarasikan variabel dengan nama yang sama?"

"Bukan di dalam metode. Semua variabel yang dideklarasikan di dalam metode harus memiliki nama yang unik. Argumen metode juga dianggap sebagai variabel lokal."

"Bagaimana dengan variabel anggota?"

"Variabel anggota juga harus unik untuk setiap kelas."

"Tapi ada pengecualian: nama variabel lokal dan variabel anggota bisa identik. "

"Jika kita mengubah variabel seperti itu, yang mana dari dua variabel bernama identik yang akan diubah?"

"Jika ada beberapa variabel yang terlihat (dapat diakses) dalam kode kita – misalnya, variabel instan dan variabel lokal – variabel lokal akan diakses."

Contoh dengan dua variabel hitungan
class Main
{
    public int count = 0;     // Declare an instance variable

    public void run()
    {
        count = 15;           // Access the instance variable
        int count = 10;       // Declare a local method variable
        count++;             // Access the method variable
    }
}

"Kode ini mendeklarasikan dua variabel hitungan. Baris 3 mendeklarasikan variabel instan , dan baris 8 – variabel lokal ."

"Inilah yang terjadi ketika menjalankan metode dijalankan:"

"Pada baris 7, kami mengakses variabel instan dan menetapkan nilai 15 padanya"

"Pada baris 8, kami mendeklarasikan (membuat) variabel lokal baru : count. Ini menutupi variabel instan. Variabel lokal adalah apa yang akan dilihat oleh semua kode berikutnya dalam metode (akses)."

"Mengerti."

"Variabel lokal menutupi variabel instan. Dengan kata lain, variabel lokal adalah variabel yang akan diakses. Namun, Anda juga dapat mengakses variabel instan. Hanya sedikit lebih rumit untuk melakukannya."

Variabel statis (kelas).
ClassName.variableName

// Here are some examples:
Cat.catsCount
Variabel non-statis (instance).
this.variableName

// Here are some examples:
this.catsCount

"Apa lagi yang bisa Anda ceritakan tentang metode statis dan variabel statis?"

"Metode dan variabel statis tidak ditautkan ke objek kelas; mereka ditautkan ke kelas itu sendiri. Jika kita membuat sepuluh objek Variabel (lihat contoh di awal level ini), kita akan memiliki sepuluh variabel instanceVariable (satu untuk setiap objek) dan hanya satu variabel bersama (statis) TEXT ."

"Saya punya pertanyaan."

"Apa perbedaan antara metode statis dan non-statis?"

"Mari kita lihat cara kerja metode non-statis:"

Seperti apa kodenya
Cat cat = new Cat();
String name = cat.getName();
cat.setAge(17);
cat.setChildren(cat1, cat2, cat3);
Apa yang sebenarnya terjadi
Cat cat = new Cat();
String name = Cat.getName(cat);
Cat.setAge(cat,17);
Cat.setChildren(cat, cat1, cat2, cat3);

"Saat Anda memanggil metode menggunakan <object> dot <method name> , Anda sebenarnya memanggil metode kelas dan meneruskan objek yang sama sebagai argumen pertama. Di dalam metode, objek disebut 'ini' . Semua operasi di metode dilakukan pada objek ini dan datanya."

"Wow! Jadi begitu cara kerjanya!"

"Dan beginilah cara kerja metode statis."

Seperti apa kodenya
Cat cat1 = new Cat();
Cat cat2 = new Cat();
int catCount = Cat.getAllCatsCount();
Apa yang sebenarnya terjadi
Cat cat1 = new Cat();
Cat cat2 = new Cat();
int catCount = Cat.getAllCatsCount(null);

"Saat Anda memanggil metode statis, tidak ada objek yang diteruskan ke sana. Dengan kata lain, 'ini' sama dengan null . Itu sebabnya metode statis tidak dapat mengakses variabel dan metode non-statis (karena tidak memiliki 'ini' untuk diteruskan metode ini)."

"Hmmm. Kurasa aku mengerti. Setidaknya sedikit."

"Dan Paman Diego datang... dan tugas-tugasnya."