CodeGym /Java Blog /Acak /Lingkup Jawa
John Squirrels
Level 41
San Francisco

Lingkup Jawa

Dipublikasikan di grup Acak
Kita semua tahu bahwa negara memiliki perbatasan dan hukum mereka sendiri. Hukum negara beroperasi di dalam perbatasan. Juga di dalam negeri ada, misalnya, organisasi, seperti sekolah atau museum, yang memiliki aturan lokalnya sendiri. Mereka tidak bertentangan dengan hukum negara, tetapi beroperasi hanya dalam kerangka organisasi tertentu. Hal yang sama berlaku dalam pemrograman. Jadi dalam pemrograman, dan khususnya dalam bahasa Java, ada istilah "lingkup". Ini mengacu pada area program tempat data tertentu, seperti variabel atau metode, berfungsi. Pada artikel ini, kita akan mencari tahu apa cakupan variabel di Java dan bagaimana mendefinisikannya.

Lingkup Java pada umumnya

Mengapa perlu memisahkan ruang lingkup variabel dan metode? Faktanya adalah terkadang program berukuran sangat besar dan sulit untuk melacak satu atau beberapa variabel. Selain itu, dalam proyek besar, penamaan variabel yang jelas diinginkan sehingga jelas untuk apa mereka. Lingkup secara khusus memungkinkan Anda memiliki variabel berbeda dengan nama yang sama di berbagai bagian program. Kode seperti itu lebih mudah dipelihara dan dibaca. Lingkup Java menentukan di mana variabel atau metode tertentu dapat diakses dalam suatu program. Secara singkat:
  • Variabel yang dideklarasikan dalam suatu metode terlihat dari awal deklarasi hingga akhir metode (lingkup metode).
  • Variabel yang dideklarasikan dalam blok kode ada hingga akhir blok kode itu.
  • Variabel yang merupakan argumen metode ada hingga akhir metode.
  • Variabel kelas/objek ada untuk seumur hidup objek yang memuatnya. Visibilitas mereka diatur oleh pengubah akses khusus.
  • Variabel kelas statis ada sepanjang waktu program berjalan. Visibilitas mereka juga ditentukan oleh pengubah akses.

Lingkup Tingkat Metode

Variabel apa pun yang dideklarasikan dalam suatu metode, termasuk argumen, tidak dapat diakses di luar metode itu. Semua variabel yang dideklarasikan di dalam metode dapat dilihat dari awal deklarasi hingga akhir metode. Berikut adalah contoh cakupan variabel metode:

public class JScopeTest1 {


   public static void main(String[] args) {

       System.out.println(myMethod(5));
       System.out.println(myMethod(17));

   }
   public static int  myMethod(int arg) {
       int secondArg = 100; //local method variable
       return secondArg + arg;
   }
}
Di sini kita memiliki secondArg , variabel lokal atau argumen metode. Kita tidak bisa menggunakan variabel ini di luar metode myMethod atau sebelum dideklarasikan. Jika sebuah variabel adalah argumen fungsi, maka itu terlihat di seluruh tubuh metode ini. Pada contoh di atas kita memiliki dua argumen seperti itu: arg di metode saya dan arg di metode utama.

Lingkup Tingkat Kelas

Cakupan Tingkat Kelas (Variabel Instans) — variabel apa pun yang dideklarasikan dalam kelas tersedia untuk semua metode kelas itu. Bergantung pada pengubah aksesnya (yakni publik atau pribadi), terkadang dapat diakses di luar kelas. Jadi jika suatu variabel adalah variabel kelas, maka ia terikat pada objek tertentu dan ada selama ada objek dari kelas ini. Jika tidak ada objek, maka tidak ada salinan dari variabel tersebut. Variabel terlihat dari semua metode kelas, terlepas dari apakah mereka dideklarasikan sebelum atau sesudahnya. Setiap objek memiliki variabel sendiri independen dari objek lain. Akses ke variabel dari metode statis tidak dimungkinkan.

Contoh kode


public class Student {
   
//class level variables
   public String surname;
   String name;
   String secondName;
   private Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

   @Override
   public int hashCode(){
       //TODO: check for nulls
       //return surname.hashCode() ^ name.hashCode() ^ secondName.hashCode() ^ (birthday.hashCode());
       return (surname + name + secondName + birthday).hashCode();
   }
   @Override
   public boolean equals(Object other_) {
       Student other = (Student)other_;
       return (surname == null || surname.equals(other.surname) )
               && (name == null || name.equals(other.name))
               && (secondName == null || secondName.equals(other.secondName))
               && (birthday == null || birthday.equals(other.birthday));
   }
}
Surname , name , secondName dan birthday adalah variabel Instance.

Lingkup Blok

Jika suatu variabel didefinisikan/dideklarasikan dalam beberapa blok kode, maka variabel itu ada hingga akhir blok kode tersebut. Biasanya, variabel seperti itu ada di antara kurung kurawal di mana mereka didefinisikan. Sangat sering lingkup blok bisa menjadi variabel loop. Variabel yang dideklarasikan dalam kondisi for loop tidak dapat diakses di luar loop, kecuali jika Anda telah mendefinisikannya sebelumnya.

public class JScopeTest2 {
   public static void main(String[] args) {
       for (int i = 0; i < 10; i++) {
           int sum = 0;
           sum = sum + i;
       }
      
       int sum = 1;
       System.out.println(sum);
   }
}
Baik variabel penjumlahan pertama dan i dideklarasikan di dalam loop dan tidak ada di luar loop ini. Namun jumlah kedua dideklarasikan di luar loop sehingga variabel khusus ini akan dicetak.

Variabel statis

Jika sebuah variabel dideklarasikan sebagai statis (ditandai dengan kata kunci statis), maka itu ada selama kelasnya ada. Biasanya, JVM memuat kelas ke dalam memori pada penggunaan pertama, saat variabel statis diinisialisasi.

import java.util.Date;

public class Student {
   public static int today = 2022;
   String surname;
   String name;
   String secondName;
   Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

 
   public static void main(String[] args) {
       System.out.println(today);
   }

}
Anda tidak boleh membuat instance baru dari kelas Student untuk menggunakan variabel statis hari ini . Di sini "2022" akan dicetak.

Pengubah akses

Java memiliki 4 pengubah akses untuk membatasi akses ke metode atau variabel. Anda dapat menggunakannya di dalam kelas, bukan di dalam metode.
  • pribadi adalah pengubah yang paling ketat. Ini membatasi akses ke metode dan variabel ke kelas yang dideklarasikan. Jika tidak perlu menggunakan metode atau variabel tertentu di luar kelas, gunakan private. Variabel kelas biasanya privat di Java.

  • Jika tidak ada pengubah akses yang ditentukan, metode atau variabel akan menerima pengubah default . default memungkinkan akses hanya dari paket saat ini.

  • pengubah yang dilindungi memungkinkan akses ke metode atau variabel hanya dari dalam paket saat ini, kecuali jika diakses melalui kelas anak di luar paket.

  • publik adalah pengubah yang paling tidak membatasi. Ini memungkinkan Anda untuk mengakses kelas, metode, atau variabel tidak hanya dari kelas yang dideklarasikan, tetapi juga dari luar. Pengubah ini sangat sering digunakan.

Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION