JavaRush /Blog Jawa /Random-JV /10 Cathetan babagan Modifier Statis ing Jawa

10 Cathetan babagan Modifier Statis ing Jawa

Diterbitake ing grup
Modifier statis ing Jawa langsung digandhengake karo kelas. Yen lapangan iku statis, banjur belongs kanggo kelas, yen cara statis, iku padha: iku belongs kanggo kelas. Adhedhasar iki, sampeyan bisa ngakses cara statis utawa lapangan nggunakake jeneng kelas. Contone, yen kolom count statis ing kelas Counter, sampeyan bisa ngakses variabel kanthi pitakon kaya: Counter.count. 10 Cathetan babagan Modifier Statis ing Jawa - 1Sadurunge miwiti cathetan, ayo padha ngelingi (lan bisa uga ngerteni) apa statis lan apa statis ing basa Jawa. Statis minangka modifier sing ditrapake kanggo lapangan, blok, metode, utawa kelas batin. Modifier iki nuduhake yen subyek wis kaiket ing kelas saiki.

Lapangan statis

Nalika kita nuduhake variabel tingkat kelas, kita nuduhake yen nilai kasebut kalebu kelas. Yen sampeyan ora nindakake iki, nilai variabel bakal diikat menyang obyek sing digawe nggunakake kelas iki. Iki artine apa? 10 Cathetan babagan Modifier Statis ing Jawa - 2Lan kasunyatane yen variabel kasebut ora statis, mula saben obyek anyar saka kelas iki bakal duwe nilai dhewe saka variabel iki, kanthi ngganti sing diganti sacara eksklusif ing siji obyek: Contone, kita duwe kelas Mobil kanthi non -variabel statis:
public class Car {
  int km;
}
Banjur ing utama:
Car orangeCar = new Car();
orangeCar.km = 100;

Car blueCar = new Car();
blueCar.km = 85;

System.out.println("Orange car - " + orangeCar.km);
System.out.println("Blue car - " + blueCar.km);
Output sing kita entuk yaiku:

Orange car - 100
Blue car - 85
Minangka sampeyan bisa ndeleng, saben obyek duwe variabel dhewe, owah-owahan mung kanggo obyek iki. Ya, yen kita duwe variabel statis, mula nilai global iki padha kanggo saben wong: Saiki kita duwe Mobil kanthi variabel statis:
public class Car {
  static int km;
}
Banjur kode sing padha ing utama bakal metu menyang console:

Orange car - 85
Blue car - 85
Sawise kabeh, kita duwe siji variabel kanggo kita kabeh, lan saben-saben kita ngganti. Variabel statis biasane diakses ora kanthi referensi obyek - orangeCar.km, nanging kanthi jeneng kelas - Car.km

Blok statis

Ana rong blok initialization - biasa lan statis. Blok kasebut dimaksudake kanggo miwiti variabel internal. Yen blok kasebut normal, mula variabel internal obyek kasebut diinisialisasi, nanging yen statis, banjur variabel statis (yaiku variabel kelas) ditugasake. Conto kelas kanthi blok inisialisasi statis:
public class Car {
  static int km;

  static {
     km = 150;
  }
}

Metode statis

Cara statis beda-beda saka cara biasa amarga padha uga kaiket ing kelas tinimbang obyek. Properti penting saka metode statis yaiku mung bisa ngakses variabel / metode statis. Minangka conto, ayo goleki kelas sing bakal dadi jinis counter sing nglacak panggilan metode:
public class Counter {
  static int count;

  public static void invokeCounter() {
     count++;
     System.out.println("Current counter value - " + count);
  }
}
Ayo diarani ing utama:
Counter.invokeCounter();
Counter.invokeCounter();
Counter.invokeCounter();
Lan kita entuk output menyang konsol:

Текущее meaning счётчика - 1
Текущее meaning счётчика - 2
Текущее meaning счётчика - 3

Kelas statis ing basa Jawa

Mung kelas njero bisa dadi kelas statis. Maneh, kelas iki diikat karo kelas njaba, lan yen kelas njaba diwarisake dening kelas liyane, mula iki ora bakal diwarisake. Kajaba iku, kelas iki bisa diwarisake, kaya sing bisa diwarisake saka kelas liyane lan ngleksanakake antarmuka. Ateges, kelas nested statis ora beda karo kelas njero liyane, kajaba obyek kasebut ora ngemot referensi kanggo obyek kelas njaba sing nggawe. Nanging, iki ndadekake kelas statis paling padha karo non-nested biasa, amarga mung prabédan iku wis kebungkus ing kelas liyane. Ing sawetara kasus, iki minangka kauntungan kanggo kita, amarga saka iku kita duwe akses menyang variabel statis pribadi saka kelas njaba. Conto kelas statis bersarang:
public class Vehicle {

  public static class Car {
     public int km;
  }
}
Nggawe conto kelas iki lan nyetel nilai variabel internal:
Vehicle.Car car = new Vehicle.Car();
car.km = 90;
Kanggo nggunakake cara statis / variabel / kelas, kita ora perlu kanggo nggawe obyek saka kelas sing. Mesthi, modifiers akses kudu dianggep. Contone, lapangan privatemung bisa diakses ing kelas sing diumumake. Lapangan protectedkasedhiya kanggo kabeh kelas ing paket ( paket ), uga kanggo kabeh kelas warisan njaba paket. Kanggo rincian liyane, priksa artikel " pribadi vs dilindhungi vs umum ". Upamane ana cara statis increment()ing kelas Countersing tugase kanggo nambah counter count. Kanggo nelpon cara iki, sampeyan bisa nggunakake invocation saka formulir Counter.increment(). Ora perlu instantiate kelas Counterkanggo ngakses kolom utawa metode statis. Iki prabédan dhasar antarane obyek statis lan NON-statis (anggota kelas). Ayo kula ngelingake sampeyan yen anggota kelas statis langsung dadi kelas, dudu contone. Yaiku, nilai variabel statis countbakal padha kanggo kabeh obyek saka jinis Counter. Mengko 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 bakal ndeleng dhasar 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 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. Wiwit cara mainiku statis, nanging variabel countora, ing kasus iki cara printlnnang cara mainbakal uncalan "Kompilasi kesalahan wektu".

  2. Ora kaya variabel lokal, kolom lan metode statis ora aman ing Jawa. Ing laku, iki minangka salah sawijining panyebab paling umum masalah sing ana gandhengane karo keamanan program multithreaded. Ngelingi yen saben instance kelas duwe salinan sing padha karo variabel statis, variabel kasebut kudu direksa - "dikunci" dening kelas kasebut. Mula, nalika nggunakake variabel statis, priksa manawa wis disinkronake kanthi bener supaya ora ana masalah kayata kahanan balapan.

  3. Статические методы имеют преимущество в применении, т.к. отсутствует необходимость каждый раз создавать новый an object для доступа к таким методам. Статический метод можно вызвать, используя тип класса, в котором эти методы описаны. Именно поэтому, подобные методы How нельзя лучше подходят в качестве методов-фабрик (factory), и методов-утorт (utility). Класс java.lang.Math — замечательный пример, в котором почти все методы статичны, по этой же причине классы-утorты в Java финализированы (final).

  4. Другим важным моментом является то, что вы НЕ можете переопределять (Override) статические методы. Если вы объявите такой же метод в классе-наследнике (subclass), т.е. метод с таким же именем и сигнатурой, вы лишь «спрячете» метод суперкласса (superclass) instead of переопределения. Это явление известно How сокрытие методов (hiding methods). Это означает, что при обращении к статическому методу, который объявлен How в родительском, так и в дочернем классе, во время компиляции всегда будет вызван метод исходя из типа переменной. В отличие от переопределения, такие методы не будут выполнены во время работы программы. Рассмотрим пример:

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

    Вывод в консоль:

    Внутри родительского класса/статического метода

    Код наглядно демонстрирует: несмотря на то, что an object имеет тип Car, вызван статический метод из класса Vehicle, т.к. произошло обращение к методу во время компиляции. И заметьте, ошибки во время компиляции не возникло!

  5. Объявить статическим также можно и класс, за исключением классов верхнего уровня. Такие классы известны How «вложенные статические классы» (nested static class). Они бывают полезными для представления улучшенных связей. Яркий пример вложенного статического класса — HashMap.Entry, который предоставляет структуру данных внутри HashMap. Стоит заметить, также How и любой другой внутренний класс, вложенные классы находятся в отдельном файле .class. Таким образом, если вы объявor пять вложенных классов в вашем главном классе, у вас будет 6 файлов с расширением .class. Ещё одним примером использования является объявление собственного компаратора (Comparator), например компаратор по возрасту (AgeComparator) в классе сотрудники (Employee).

  6. Модификатор static также может быть объявлен в статичном блоке, более известным How «Статический блок инициализации» (Static initializer block), который будет выполнен во время загрузки класса. Если вы не объявите такой блок, то Java соберёт все статические поля в один список и выполнит его во время загрузки класса. Однако, статичный блок НЕ может пробросить перехваченные исключения, но может выбросить не перехваченные. В таком случае возникнет «Exception Initializer Error». На практике, любое исключение возникшее во время выполнения и инициализации статических полей, будет завёрнуто Java в эту ошибку. Это также самая частая причина ошибки «No Class Def Found Error», т.к. класс не находился в памяти во время обращения к нему.

  7. Iku migunani kanggo ngerti sing cara statis kaiket ing wektu kompilasi, minangka gantos kanggo naleni cara virtual utawa non-statis, kang kaiket ing runtime ing obyek nyata. Mulane, cara statis ora bisa diganti ing Jawa amarga polymorphism runtime ora ditrapake kanggo wong-wong mau. Iki minangka watesan penting sing kudu ditimbang nalika nyatakake metode statis. Iki ndadekake pangertèn mung nalika ora ana kamungkinan utawa perlu kanggo override kuwi cara dening kelas inheritor. Cara pabrik lan cara utilitas minangka conto sing apik kanggo nggunakake modifier statis. Joshua Bloch mbatesi sawetara kaluwihan nggunakake cara pabrik statis liwat konstruktor ing bukune Jawa Efektif , kang dibutuhake maca kanggo saben programmer saka basa.

  8. Properti penting saka blok statis yaiku initialization. Kolom utawa variabel statis diwiwiti sawise kelas dimuat ing memori. Urutan initialization saka ndhuwur kanggo ngisor, ing urutan padha diterangake ing file sumber kelas Jawa. Wiwit kolom statis diinisialisasi kanthi cara sing aman, properti iki uga digunakake kanggo ngleksanakake Singleton. Yen sampeyan ora nggunakake dhaptar Enumkaya Singleton, kanggo siji alesan utawa liyane, banjur ana alternatif apik kanggo sampeyan. Nanging ing kasus iki, iku perlu kanggo njupuk menyang akun sing iki ora "males" initialization. Iki tegese lapangan statis bakal diwiwiti sadurunge sapa wae "takon". Yen obyek kasebut intensif sumber daya utawa arang digunakake, mula miwiti ing blok statis ora bakal bisa digunakake kanggo sampeyan.

  9. Sajrone serialization, kaya transientvariabel, kolom statis ora serialized. Pancen, yen sampeyan nyimpen data ing kolom statis, banjur sawise deserialization obyek anyar bakal ngemot nilai utami (standar), contone, yen kolom statis ana variabel saka jinis int, banjur nilai sawise deserialization bakal nol, yen jinis floatpunika 0,0, yen jinis Object- null. Jujur, iki minangka salah sawijining pitakonan sing paling kerep ditakoni babagan serialisasi ing wawancara Jawa. Aja nyimpen data sing paling penting babagan obyek ing kolom statis!

  10. Lan pungkasane, ayo ngomong babagan static import. Modifier iki akeh sing padha karo operator standar import, nanging ora kaya, ngidini sampeyan ngimpor siji utawa kabeh anggota statis saka kelas. Nalika ngimpor cara statis, bisa diakses kaya-kaya ditetepake ing kelas sing padha, uga nalika ngimpor lapangan, kita bisa ngakses tanpa nemtokake jeneng kelas. Fitur iki dikenalaké ing Jawa versi 1.5, lan nalika digunakake bener, mbenakake maca kode. Konstruksi iki paling kerep ditemokake ing tes JUnit , amarga Meh kabeh pangembang tes nggunakake static importmetode tegas, contone, assertEquals()lan duplikat sing kakehan. Yen ora ana sing jelas, welcome kanggo informasi tambahan .

Mekaten. Saben programer kudu ngerti kabeh titik ing ndhuwur babagan modifier statis ing Jawa . Artikel iki nyakup informasi dhasar babagan variabel statis, kolom, metode, blok wiwitan lan impor. Kalebu sawetara sifat penting, kawruh sing kritis nalika nulis lan ngerti program ing Jawa. Muga-muga saben pangembang bakal nyampurnakake katrampilan nggunakake konsep statis amarga ... Iki penting banget kanggo program serius."
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION