CodeGym /Blog Java /rawak /Skop Java
John Squirrels
Tahap
San Francisco

Skop Java

Diterbitkan dalam kumpulan
Kita semua tahu bahawa negara mempunyai sempadan dan undang-undang mereka sendiri. Undang-undang negara beroperasi di dalam sempadan. Juga di negara ini terdapat, sebagai contoh, organisasi, seperti sekolah atau muzium, yang mempunyai peraturan tempatan mereka sendiri. Mereka tidak bercanggah dengan undang-undang negara, tetapi hanya beroperasi dalam rangka kerja organisasi yang ditentukan. Perkara yang sama berlaku dalam pengaturcaraan. Jadi dalam pengaturcaraan, dan khususnya dalam bahasa Java, terdapat istilah "skop". Ia merujuk kepada kawasan program di mana data tertentu, seperti pembolehubah atau kaedah, berfungsi. Dalam artikel ini, kita akan memikirkan apakah skop untuk pembolehubah dalam Java dan cara mentakrifkannya.

Skop Java secara umum

Mengapa perlu memisahkan skop pembolehubah dan kaedah? Hakikatnya kadangkala program adalah sangat besar dan sukar untuk mengesan satu atau pembolehubah lain. Di samping itu, dalam projek besar, penamaan pembolehubah yang jelas adalah wajar supaya jelas untuk kegunaannya. Skop secara khusus membolehkan anda mempunyai pembolehubah berbeza dengan nama yang sama di bahagian program yang berbeza. Kod sedemikian lebih mudah untuk dikekalkan dan dibaca. Skop Java mentakrifkan tempat pembolehubah atau kaedah tertentu boleh diakses dalam program. Secara ringkas:
  • Pembolehubah yang diisytiharkan dalam kaedah boleh dilihat dari permulaan pengisytiharan hingga akhir kaedah (skop kaedah).
  • Pembolehubah yang diisytiharkan dalam blok kod wujud sehingga penghujung blok kod itu.
  • Pembolehubah yang merupakan argumen kaedah wujud sehingga akhir kaedah.
  • Pembolehubah kelas/objek wujud sepanjang hayat objek yang mengandungi. Keterlihatan mereka dikawal oleh pengubah suai akses khas.
  • Pembolehubah kelas statik wujud sepanjang masa program dijalankan. Keterlihatan mereka juga ditentukan oleh pengubah suai akses.

Skop Tahap Kaedah

Sebarang pembolehubah yang diisytiharkan dalam kaedah, termasuk hujah, tidak boleh diakses di luar kaedah itu. Semua pembolehubah yang diisytiharkan di dalam kaedah boleh dilihat dari permulaan pengisytiharan mereka hingga akhir kaedah. Berikut ialah contoh skop pembolehubah kaedah:

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 mempunyai secondArg , pembolehubah tempatan atau hujah kaedah. Kami tidak boleh menggunakan pembolehubah ini di luar kaedah myMethod atau sebelum ia diisytiharkan. Jika pembolehubah ialah hujah fungsi, maka ia boleh dilihat dalam keseluruhan badan kaedah ini. Dalam contoh di atas kita mempunyai dua hujah sedemikian: arg dalam myMethod dan args dalam kaedah utama.

Skop Peringkat Kelas

Skop Peringkat Kelas (Pembolehubah Instance) — sebarang pembolehubah yang diisytiharkan dalam kelas tersedia untuk semua kaedah kelas itu. Bergantung pada pengubah suai aksesnya (iaitu awam atau peribadi), ia kadangkala boleh diakses di luar kelas. Jadi jika pembolehubah ialah pembolehubah kelas, maka ia terikat kepada objek tertentu dan wujud selagi terdapat objek kelas ini. Jika tiada objek, maka tiada salinan pembolehubah. Pembolehubah boleh dilihat daripada semua kaedah kelas, tidak kira sama ada ia diisytiharkan sebelum atau selepasnya. Setiap objek mempunyai pembolehubah sendiri bebas daripada objek lain. Akses kepada pembolehubah daripada kaedah statik tidak mungkin.

Contoh kod


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));
   }
}
Nama keluarga , nama , secondName dan hari lahir ialah pembolehubah Instance.

Skop Blok

Jika pembolehubah ditakrifkan/diisytiharkan dalam beberapa blok kod, maka ia wujud sehingga penghujung blok kod tersebut. Biasanya, pembolehubah sedemikian wujud di antara pendakap kerinting di mana ia ditakrifkan. Selalunya skop blok boleh menjadi pembolehubah gelung. Pembolehubah yang diisytiharkan dalam keadaan untuk gelung tidak boleh diakses di luar gelung, melainkan anda menentukannya terlebih dahulu.

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);
   }
}
Kedua-dua pembolehubah jumlah pertama dan i diisytiharkan di dalam gelung dan tidak wujud di luar gelung ini. Walau bagaimanapun, jumlah kedua telah diisytiharkan di luar gelung supaya pembolehubah tertentu ini akan dicetak.

Pembolehubah statik

Jika pembolehubah diisytiharkan sebagai statik (ditandakan dengan kata kunci statik), maka ia wujud selagi kelasnya wujud. Biasanya, JVM memuatkan kelas ke dalam memori pada penggunaan pertama, apabila pembolehubah statik dimulakan.

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 sepatutnya membuat contoh baharu kelas Pelajar untuk menggunakan pembolehubah statik hari ini . Di sini "2022" akan dicetak.

Pengubah suai akses

Java mempunyai 4 pengubah akses untuk menyekat akses kepada kaedah atau pembolehubah. Anda boleh menggunakannya di dalam kelas, bukan kaedah di dalam.
  • peribadi ialah pengubah suai yang paling ketat. Ia menyekat akses kepada kaedah dan pembolehubah kepada kelas yang diisytiharkan. Jika tidak perlu menggunakan kaedah atau pembolehubah tertentu di luar kelas, gunakan persendirian. Pembolehubah kelas biasanya peribadi di Jawa.

  • Jika tiada pengubah akses ditentukan, kaedah atau pembolehubah akan menerima pengubah suai lalai . lalai membenarkan akses hanya daripada pakej semasa.

  • pengubah suai dilindungi membenarkan akses kepada kaedah atau pembolehubah hanya dari dalam pakej semasa, melainkan ia diakses melalui kelas kanak-kanak di luar pakej.

  • awam ialah pengubah suai yang paling tidak terhad. Ia membolehkan anda mengakses kelas, kaedah atau pembolehubah bukan sahaja dari kelas yang diisytiharkan, tetapi juga dari luar. Pengubah suai ini sangat kerap digunakan.

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