CodeGym /Blog Jawa /Acak /10 iku sampeyan kudu ngerti babagan modifier statis ing J...
John Squirrels
tingkat
San Francisco

10 iku sampeyan kudu ngerti babagan modifier statis ing Jawa

Diterbitake ing grup
Ing Jawa, modifier statis tegese ana sing ana hubungane langsung karo kelas: yen lapangan statis, mula kalebu kelas kasebut; yen cara iku statis, banjur belongs kanggo kelas. Akibaté, sampeyan bisa nggunakake jeneng kelas kanggo nelpon cara statis utawa referensi lapangan statis. Contone, yen countlapangan statis ing Counterkelas, tegese sampeyan bisa ngrujuk variabel kanthi ekspresi ing ngisor iki: Counter.count. 10 prekara sing kudu dingerteni babagan modifier statis ing Jawa - 1Mesthi, modifikasi akses kudu dianggep. Contone, privatelapangan mung kasedhiya ing kelas sing diumumake. Lan protectedlapangan kasedhiya kanggo kabeh kelas ing paket, uga kanggo kabeh subclasses njaba paket. Upaminipun Counterkelas duwe cara statis increment()kang tugas kanggo nambah ingcountlapangan. Kanggo nelpon cara iki, sampeyan bisa nggunakake Counter.increment(). Ora perlu nggawe conto kelas Counterkanggo ngakses kolom utawa metode statis. Iki minangka prabédan dhasar antarane variabel lan metode statis (kelas) lan variabel lan metode NON-statis (kayata). Cathetan penting. Aja lali yen anggota statis saka kelas kasebut langsung kalebu kelas, dudu conto kelas kasebut. Tegese, nilai countvariabel statis bakal padha kanggo kabeh Counterobyek. Ing artikel iki, kita bakal nliti aspek dhasar nggunakake modifier statis ing Jawa, uga sawetara fitur sing bakal mbantu sampeyan ngerti konsep pemrograman utama.

Apa saben programmer kudu ngerti babagan modifier statis ing Jawa.

Ing bagean iki, kita ndeleng aspek utama nggunakake metode statis, kolom, lan kelas. Ayo dadi miwiti karo variabel.
  1. Sampeyan ora bisa ngakses anggota non-statis saka kelas ing konteks statis, kayata cara statis utawa blok. Nglumpukake kode ing ngisor iki bakal nyebabake kesalahan:

    
    public class Counter {
    private int count;
    public static void main(String args []) {
       System.out.println(count); //  Compile time error
    }
    }
    

    Iki minangka salah sawijining kesalahan sing paling umum ditindakake dening programer Java, utamane para pemula. Amarga mainmetode kasebut statis lan countvariabel ora, nggunakake printlnmetode ing njero mainmetode kasebut bakal ngasilake "kesalahan wektu kompilasi".

  2. Ora kaya variabel lokal, kolom lan metode statis ora ana thread safeing Jawa. Ing praktik, iki minangka salah sawijining panyebab masalah keamanan ing program multi-threaded. Ngelingi yen saben conto kelas referensi salinan sing padha saka variabel statis, variabel kasebut kudu direksa utawa "dikunci" dening kelas kasebut. Mulane, nalika nggunakake variabel statis, pesthekake yen padha bener synchronizedkanggo ngindhari masalah kayata race conditions.

  3. Cara statis duwe kauntungan praktis amarga ora perlu nggawe obyek anyar saben sampeyan pengin nelpon. Cara statis bisa diarani nggunakake jeneng kelas sing nyatakake. Pramila cara kasebut cocog kanggo factorymetode lan utilitymetode. Kelas kasebut java.lang.Mathminangka conto sing apik: meh kabeh cara statis. Kelas utilitas Jawa ditandhani finalkanthi alasan sing padha.

  4. Titik penting liyane yaiku sampeyan ora bisa ngatasi ( @Override) cara statis. Yen sampeyan ngumumake cara kasebut ing subclass, yaiku cara kanthi jeneng lan teken sing padha, sampeyan mung "ndhelikake" metode kasebut superclasstinimbang ngganti. Fenomena iki dikenal minangka method hiding. Iki tegese yen cara statis diumumake ing kelas induk lan anak, metode sing diarani mesthi adhedhasar jinis variabel nalika kompilasi. Ora kaya metode overriding, metode kasebut ora bakal dieksekusi nalika program mlaku. Ayo nimbang conto:

    
    class Vehicle {
         public static void kmToMiles(int km) {
              System.out.println("Inside the parent class / static method");
         } 
    }
    
    class Car extends Vehicle {
         public static void kmToMiles(int km) {
              System.out.println("Inside the child class / static method");
         } 
    }
    
    public class Demo {   
       public static void main(String args []) {
          Vehicle v = new Car();
           v.kmToMiles(10);
      }
    }
    

    Output konsol:

    Nang kelas induk / metode statis

    Kode kasebut kanthi jelas nuduhake manawa obyek kasebut minangka Car, metode statis ing Vehiclekelas kasebut diarani, amarga metode kasebut diarani nalika kompilasi. Lan elinga yen ora ana kesalahan kompilasi!

  5. Apa maneh, saliyane kelas tingkat paling dhuwur, sampeyan bisa ngumumake kelas statis. Kelas kasebut dikenal minangka nested static classes. Padha migunani kanggo nyedhiyakake kohesi sing luwih apik. Conto striking saka kelas statis nested yaiku HashMap.Entry, yaiku struktur data ing njero HashMap. Wigati dicathet yen, kaya kelas njero, kelas nested statis diumumake ing file .class sing kapisah. Mangkono, yen sampeyan ngumumake limang kelas nested ing kelas utama, sampeyan bakal duwe 6 file karo extension .class. Conto liyane yaiku deklarasi kita dhewe Comparator, kayata pembanding umur ( AgeComparator) ing Employeekelas.

  6. Modifier statis uga bisa ditemtokake ing blok statis, luwih dikenal minangka "block initialization statis", sing dieksekusi nalika kelas dimuat. Yen sampeyan ora ngumumake pemblokiran kuwi, Jawa nglumpukake kabeh kolom statis menyang dhaptar siji lan initializes nalika kelas dimuat. Blok statis ora bisa mbuwang pengecualian sing dicenthang, nanging bisa mbuwang sing ora dicenthang. Ing kasus iki, ExceptionInInitializerErrorbakal kelakon. Ing laku, sembarang pangecualian sing dumadi sak initialization saka kolom statis bakal kebungkus kesalahan iki dening Jawa. Iki uga sabab paling umum saka NoClassDefFoundError, amarga kelas ora bakal ing memori nalika referensi.

  7. Iku migunani kanggo ngerti yen cara statis disambungake ing wektu kompilasi, ora kaya ngubungake metode virtual utawa non-statis, sing disambungake nalika mbukak nalika diarani obyek nyata. Patut, cara statis ora bisa ditindhes ing Jawa, amarga polimorfisme ora ditrapake nalika mbukak. Iki minangka watesan penting sing kudu ditimbang nalika nyatakake metode statis. Mengkono mung bisa dimangerteni yen ora ana kemampuan utawa kudu ngilangi metode kasebut ing subkelas. Cara pabrik lan cara utilitas minangka conto sing apik babagan panggunaan modifier statis. Joshua Bloch nedahake sawetara kaluwihan sing ditindakake dening metode pabrik statis tinimbang para konstruktor ing bukune Jawa Efektif, sing wajib diwaca kanggo saben programmer Java.

  8. Initialization minangka aspek penting saka blok statis. Kolom utawa variabel statis diwiwiti sawise kelas dimuat ing memori. Urutan initialization saka ndhuwur tekan ngisor, ing urutan sing padha diumumake ing file sumber kelas Jawa. Wiwit kolom statis diinisialisasi kanthi cara sing aman, proses iki uga digunakake kanggo ngetrapake Singletonpola kasebut. Yen sampeyan ora nggunakake minangka Enumkanggo Singletonsawetara alesan, sampeyan duwe alternatif apik. Nanging ing kasus iki, sampeyan kudu nyathet yen iki dudu initialization "malas". Iki tegese lapangan statis bakal diwiwiti sanajan sadurunge ana wong sing "takon". Yen obyek iku sumber daya-abot utawa arang digunakake, banjur initializing ing blok statis ora bakal bisa kanggo sampeyan.

  9. Sajrone serialization, kolom statis, kaya transientvariabel, ora serialized. Pancen, yen sampeyan nyimpen data ing kolom statis, bakal ngemot nilai awal (standar) sawise deserialization. Contone, yen kolom statis minangka int, nilai kasebut bakal dadi nol sawise deserialization. Yen jinise float, regane bakal dadi 0.0. Yen kolom kasebut minangka Object, nilai kasebut bakal dadi null. Jujur, iki minangka salah sawijining pitakonan sing paling kerep ditakoni babagan serialisasi ing wawancara kanggo posisi Jawa. Aja nyimpen data obyek penting ing kolom statis!

  10. Pungkasan, ayo ngomong babagan impor statis. Modifier iki wis akeh ing umum karo importstatement standar, nanging beda ing ngijini sampeyan mport siji utawa kabeh anggota kelas statis. Sawise cara statis diimpor, bisa diakses kaya-kaya diumumake ing kelas sing padha. Kajaba iku, kanthi ngimpor kolom statis, kita bisa ngakses tanpa nemtokake jeneng kelas. Fitur iki muncul ing Java 1.5 lan nambah keterbacaan kode nalika digunakake kanthi bener. Konstruksi iki paling kerep ditemokake ing tes JUnit, amarga meh kabeh pangembang tes nggunakake impor statis kanggo cara negesake, contone assertEquals()lan varian sing kakehan.

  11. Semono wae. Saben programer Java kudu ngerti kabeh aspek saka modifier statis kasebut ing ndhuwur. Artikel iki nliti informasi dhasar babagan variabel statis, kolom, metode, blok inisialisasi, lan impor. Iku uga ndemek sawetara sifat penting sing penting kanggo ngerti nulis lan ngerti program Jawa. Muga-muga saben pangembang bakal nyempurnakake panggunaan anggota statis kanthi trampil, amarga penting banget kanggo pangembangan piranti lunak sing serius.

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