JavaRush /Blog Java /Random-MS /Pembolehubah Global di Java: Bila Untuk Menggunakannya?
Анзор Кармов
Tahap
Санкт-Петербург

Pembolehubah Global di Java: Bila Untuk Menggunakannya?

Diterbitkan dalam kumpulan
hello! Dalam artikel ini kita akan bercakap tentang pembolehubah global, pengisytiharan mereka dan contoh penggunaan yang sesuai. Nota kecil: kami tidak akan mempertimbangkan pembolehubah kelas global, iaitu pembolehubah yang boleh diakses dalam mana-mana satu kelas. Kami akan bercakap tentang pembolehubah global bagi keseluruhan aplikasi - yang boleh diakses dalam keseluruhan aplikasi. Pembolehubah Global di Java: Bila Untuk Menggunakannya?  - 1

Bagaimana untuk mencipta pembolehubah global

Pembolehubah global ialah pembolehubah yang boleh diakses dari mana-mana dalam aplikasi. Dalam erti kata lain, skop mereka adalah keseluruhan aplikasi. Untuk mencipta pembolehubah sedemikian dalam Java, anda perlu mencipta pembolehubah statik awam dalam kelas awam:
public class Example {
    public static int a;
    public static int b;
    public static String str;
}
Pembolehubah a, bdan str- telah menjadi global. Kami boleh mengaksesnya terus dari kelas lain di dalam aplikasi:
public class GlobalVarsDemo {
    public static void main(String[] args) {
        Example.a = 4;
        Example.b = 5;
        Example.str = "Global String variable value";

        System.out.println(Example.a);
        System.out.println(Example.b);
        System.out.println(Example.str);
    }
}
Jika kita menjalankan method main, kita akan melihat output berikut:

4
5
Global String variable value
Pembolehubah global boleh dibahagikan kepada 2 jenis:
  • pembolehubah yang boleh disunting;
  • pembolehubah yang hanya boleh dibaca.
Yang terakhir dipanggil pemalar global. Untuk mencipta pemalar global, anda perlu membuat pembolehubah finaldan memberikan nilai kepadanya apabila mentakrifkan pembolehubah:
public class Constants {

    public static final double PI = 3.1415926535897932384626433832795;
    public static final String HELLO_WORLD_STR = "Hello, World!";

}
Menurut konvensyen penamaan Java, semua pemalar mesti dinamakan dalam huruf besar, memisahkan perkataan dengan aksara garis bawah. Jadi, kami telah mencipta pemalar, dan kini kami tidak akan dapat mengubah nilainya: Pembolehubah Global di Java: Bila Untuk Menggunakannya?  - 2Walau bagaimanapun, kita boleh membaca nilainya:
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println(Constants.HELLO_WORLD_STR);
    }
}
Kesimpulan:

Hello, World!
public class ConstantsDemo {
    public static void main(String[] args) {
        double r = 10;
        String message = String.format("Площадь круга с радиусом %f=%f", r, getCircleSquare(r));
        System.out.println(message);

    }

    static double getCircleSquare(double r) {
        return Constants.PI * r * r;
    }
}
Kesimpulan:

Площадь круга с радиусом 10,000000=314,159265

Sekiranya anda menggunakan pembolehubah global?

Terdapat banyak artikel di Internet, mesej utamanya ialah ini: pembolehubah global adalah jahat, buruk dan dahsyat. Betul ke? Mari cuba berikan kebaikan dan keburukan pembolehubah global supaya semua orang boleh membuat kesimpulan mereka sendiri. Pembolehubah Global di Java: Bila Untuk Menggunakannya?  - 3Mari kita mulakan dengan keburukan. Mari bayangkan aplikasi yang mempunyai kelas dengan pembolehubah global yang boleh dibaca dan diedit. Dari masa ke masa, bilangan kelas dalam projek, bilangan pembolehubah global dan kaedah yang menggunakan pembolehubah global, atau dengan kata lain, bergantung pada mereka, berkembang. Dari masa ke masa, setiap pembolehubah global dibaca di bahagian sistem yang berbeza untuk tujuan yang berbeza. Nilai pembolehubah boleh dikemas kini di bahagian sistem yang berlainan. Gambaran keseluruhan dunia aplikasi ini menjadi jauh lebih rumit, dan ini membawa kepada kelemahan berikut :
  1. Mengurangkan kebolehbacaan dan meningkatkan kesukaran dalam memahami kod.
  2. Peningkatan kerumitan penyelenggaraan kod.
  3. Untuk menukar satu pembolehubah global, adalah perlu untuk menganalisis keseluruhan kod supaya tidak menetapkan pembolehubah kepada nilai yang tidak sah untuk bahagian lain sistem.
  4. Peningkatan ralat yang sangat sukar untuk dinyahpepijat.

    Mari kita bayangkan pembolehubah global, pelbagai objek. Dalam satu bahagian sistem, contohnya, rentetan dijangka dalam tatasusunan ini, dan di bahagian lain sistem, seseorang memutuskan untuk menggunakan nombor titik terapung. Tidak mungkin sesiapa mahu memahami perkara ini.

  5. Nama pembolehubah mungkin sama jika anda menggunakan pembolehubah global dalam kod anda, serta beberapa perpustakaan yang, seterusnya, juga menggunakan pembolehubah global. Ini boleh membawa kepada ralat di sisi aplikasi anda dan di sisi perpustakaan yang anda gunakan.
  6. Meningkatkan ketersambungan antara bahagian sistem yang berbeza yang menggunakan pembolehubah global. Sebaliknya, anda harus berusaha untuk gandingan longgar kod. Adalah lebih baik untuk mempunyai banyak subsistem kecil yang disambungkan secara longgar antara satu sama lain daripada mempunyai satu perkara yang besar. Kerana otak lebih mudah untuk menangani beberapa perkara yang mudah berbanding dengan satu perkara yang terlalu rumit dan mengelirukan.
  7. Menulis ujian unit menjadi lebih sukar kerana ujian tidak mengetahui pembolehubah global yang diperlukan dan bagaimana ia perlu dimulakan.
  8. Dalam aplikasi berbilang benang, penggunaan pembolehubah global oleh benang yang berbeza membawa kepada peningkatan dalam ralat yang sukar untuk nyahpepijat dan peningkatan dalam kerumitan projek. Oleh sebab itu, adalah perlu untuk mengkonfigurasi akses kepada pembolehubah tersebut dengan lebih betul, melengkapkannya dengan penyegerakan dan kunci. Ini boleh menyebabkan litar pintas pada masa hadapan. Contohnya, benang A telah mengunci pembolehubah X untuk kerjanya, dan benang B telah mengunci pembolehubah Y untuk kerjanya, dan benang A kini memerlukan pembolehubah Y, dan benang B memerlukan pembolehubah X. Akibatnya, atur cara akan membeku.
Tetapi ini semua tidak tepat. Ini adalah perihalan risiko, yang kemungkinannya meningkat dengan pertumbuhan projek dan peningkatan dalam bilangan pembolehubah global di dalamnya. Mari kita beralih kepada kebaikan :
  1. Dalam projek kecil, pembolehubah global adalah perkara paling mudah untuk membuat projek itu berfungsi.
  2. Kadangkala ketakutan untuk menggunakan pembolehubah global membawa kepada lebih kerumitan dalam projek. Kemudian pengaturcara mula mencipta singleton dan menggunakan corak reka bentuk lain.
  3. Dalam pengaturcaraan, anda selalunya perlu bergantung pada beberapa nilai yang tidak boleh diubah.

    Perkara yang paling munasabah ialah menulis nilai sedemikian sebagai pemalar, kerana hanya pemalar menjamin bahawa nilai pembolehubah tidak akan berubah dari semasa ke semasa. Pemalar sedemikian boleh didapati sepanjang masa ( Integer.MAX_VALUE, Integer.MIN_VALUE, Boolean.TRUE, Collections.EMPTY_LISTdsb.). Tetapi pengaturcaraan tidak terhad kepada menggunakan perpustakaan standard. Ia sering berlaku bahawa anda perlu menulis beberapa jenis logik unik, yang perlu bergantung pada pemalar unik anda sendiri. Itulah sebabnya kadangkala menggunakan pemalar (pembolehubah global baca sahaja) benar-benar menjadikan hidup lebih mudah.

Secara umum, anda tidak seharusnya terlalu menggunakan pembolehubah global; jika boleh, gunakan pemalar sahaja. Telah dikatakan sebelum ini bahawa menggunakan pembolehubah global dalam projek kecil adalah tidak buruk. Tetapi adalah lebih baik bagi pembangun pemula untuk tidak menggunakannya sama sekali. Atas dua sebab:
  1. Semua yang ditulis oleh pembangun pemula pada dasarnya adalah projek kecil. Dan menggunakan pembolehubah global dalam projeknya akan mengajarnya menggunakan pembolehubah global di mana-mana sahaja.
  2. Adalah lebih baik untuk terlebih dahulu belajar melakukan tanpa "helah terlarang". Dan dengan pengalaman, pemahaman tentang bila teknik tersebut sesuai digunakan akan datang dengan sendirinya.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION