JavaRush /Blog Jawa /Random-JV /Pamungkas, Konstanta lan Ora owah ing Jawa

Pamungkas, Konstanta lan Ora owah ing Jawa

Diterbitake ing grup
Hello! Tembung "modifier" wis akrab karo sampeyan. Paling ora, sampeyan wis nemokake modifikasi akses (umum, pribadi) lan modifier statis. Dina iki kita bakal ngomong babagan modifier final khusus . Bisa diarani "semen" wilayah program kita sing mbutuhake prilaku sing tetep, ora ambigu, ora owah. Bisa digunakake ing telung wilayah program kita: kelas, metode lan variabel. Ora bisa owah ing basa Jawa: final, konstanta lan Ora owah - 2 Ayo padha liwat siji-siji. Yen deklarasi kelas ngemot modifier final , iki tegese sampeyan ora bisa oleh warisan saka kelas iki. Ing ceramah sadurunge, kita ndeleng conto warisan sing prasaja: kita duwe kelas wong tuwa Animal, lan rong kelas anak - CatlanDog
public class Animal {
}

public class Cat extends Animal {
   //..поля и методы класса Cat
}

public class Dog extends Animal {

   //..поля и методы класса Dog
}
Nanging, yen kita nemtokake Animalmodifier kanggo kelas, kelas uga finalora bakal bisa oleh warisan . CatDog
public final class Animal {

}

public class Cat extends Animal {

   //ошибка! Cannot inherit from final Animal
}
Compiler langsung ngasilake kesalahan. Ana akeh -kelas wis dileksanakake ing Jawa final. Sing paling misuwur sing sampeyan gunakake yaiku String. Kajaba iku, yen kelas diumumake minangka final, kabeh cara uga dadi final. Iki artine apa? Yen modifier ditemtokake kanggo metode final, cara iki ora bisa diganti. Contone, kita duwe kelas Animalsing nemtokake cara voice(). Nanging, asu lan kucing kanthi jelas "ngomong" beda. Mulane, ing saben kelas - Catlan Dog- kita bakal nggawe cara voice(), nanging kita bakal ngleksanakake beda.
public class Animal {

   public void voice() {
       System.out.println("Voice!");
   }
}

public class Cat extends Animal {

   @Override
   public void voice() {
       System.out.println("Meow!");
   }
}

public class Dog extends Animal {

   @Override
   public void voice() {
       System.out.println("Woof!");
   }
}
Ing kelas Catlan Dogkita wis overridden cara saka kelas induk. Saiki kewan bakal vocalize gumantung apa obyek kelas iku:
public class Main {

   public static void main(String[] args) {

       Cat cat = new Cat();
       Dog dog = new Dog();

       cat.voice();
       dog.voice();
   }
}
Kesimpulan: Meow! woof! Nanging, yen Animalkita ngumumake metode ing kelas voice()minangka final, ora bisa didefinisikan maneh ing kelas liyane:
public class Animal {

   public final void voice() {
       System.out.println("Voice!");
   }
}


public class Cat extends Animal {

   @Override
   public void voice() {//ошибка! final-метод не может быть переопределен!
       System.out.println("Meow!");
   }
}
Banjur obyek kita bakal dipeksa nggunakake metode voice()kaya sing ditetepake ing kelas induk:
public static void main(String[] args) {

   Cat cat = new Cat();
   Dog dog = new Dog();

   cat.voice();
   dog.voice();
}
Kesimpulan: Voice! Swara! Saiki babagan final-variabel. Yen ora, diarani konstanta . Pisanan (lan sing paling penting), nilai pisanan sing diwenehake menyang konstanta ora bisa diganti. Iku diutus sapisan lan ing salawas-lawase.
public class Main {

   private static final int CONSTANT_EXAMPLE = 333;

   public static void main(String[] args) {

       CONSTANT_EXAMPLE = 999;//ошибка! Нельзя присвоить новое meaning final-переменной!
   }
}
Konstanta ora perlu diinisialisasi langsung. Iki bisa ditindakake mengko. Nanging nilai sing ditugasake dhisik bakal tetep ing salawas-lawase.
public static void main(String[] args) {

   final int CONSTANT_EXAMPLE;

   CONSTANT_EXAMPLE = 999;//так делать можно
}
Kapindho, mbayar manungsa waé kanggo jeneng variabel kita. Konstanta Jawa nduweni konvensi penamaan sing beda. Iki dudu camelCase sing biasa kita lakoni. Ing kasus variabel biasa, kita bakal nyebat konstantaContoh, nanging jeneng konstanta ditulis ing huruf kapital, lan ing antarane tembung kasebut (yen ana sawetara) ana garis ngisor - "CONSTANT_EXAMPLE". Kenapa konstanta dibutuhake? Contone, bakal migunani yen sampeyan terus nggunakake sawetara nilai konstan ing program. Ayo dadi ngomong sampeyan mutusaké kanggo pindhah menyang sajarah lan nulis game "The Witcher 4" piyambak. Game kasebut mesthi bakal nggunakake jeneng karakter utama - "Geralt of Rivia". Luwih becik misahake baris iki lan jeneng pahlawan liyane dadi konstan: nilai sing sampeyan butuhake bakal disimpen ing sak panggonan, lan sampeyan mesthi ora bakal salah nalika ngetik kaping sejuta.
public class TheWitcher4 {

   private static final String GERALT_NAME = "Геральт из Ривии";
   private static final String YENNEFER_NAME = "Йеннифэр из Венгерберга";
   private static final String TRISS_NAME = "Трисс Меригольд";

   public static void main(String[] args) {

       System.out.println("Ведьмак 4");
       System.out.println("Это уже четвертая часть Ведьмака, а " + GERALT_NAME + " ниHow не определится кто ему" +
               " нравится больше: " + YENNEFER_NAME + " or " + TRISS_NAME);

       System.out.println("Но если вы никогда не играли в Ведьмака - начнем сначала.");
       System.out.println("Главного героя зовут " + GERALT_NAME);
       System.out.println(GERALT_NAME + " - ведьмак, охотник на чудовищ");
   }
}
Kesimpulan:
Ведьмак 4
Это уже четвертая часть Ведьмака, а Геральт из Ривии ниHow не определится, кто ему нравится больше: Йеннифэр из Венгерберга or Трисс Меригольд.
Но если вы никогда не играли в Ведьмака — начнем сначала.
Главного героя зовут Геральт из Ривии
Геральт из Ривии — ведьмак, охотник на чудовищ
Kita wis misahake jeneng karakter dadi konstanta, lan saiki kita ora bakal salah nulis, lan ora perlu nulis kanthi tangan saben wektu. Kaluwihan liyane: yen pungkasane kudu ngganti nilai variabel ing kabeh program, cukup kanggo nindakake ing sak panggonan, tinimbang nindakake kanthi manual ing kabeh kode :)

Jinis sing ora bisa diganti

Sajrone wektu kerja ing Jawa, sampeyan bisa uga wis biasa karo kasunyatan manawa programmer meh kabeh ngontrol kahanan kabeh obyek. Wanted - digawe obyek Cat. Yen aku pengin, aku ganti jeneng. Yen dheweke kepengin, dheweke ngganti umure, utawa liya-liyane. Nanging ing Jawa ana sawetara jinis data sing nduweni status khusus. Padha ora owah , utawa ora owah . Iki tegese yen kelas ora bisa diganti, negara obyek kasebut ora bisa diganti. Tuladha? Sampeyan bisa uga kaget, nanging conto sing paling misuwur ing kelas Immutable yaiku String! Iku bakal katon, kita ora bisa ngganti Nilai saka senar? Ayo jajal:
public static void main(String[] args) {

   String str1 = "I love Java";

   String str2 = str1;//обе переменные-ссылки указывают на одну строку.
   System.out.println(str2);

   str1 = "I love Python";//но поведение str1 ниHow не влияет на str2
   System.out.println(str2);//str2 продолжает указывать на строку "I love Java", хотя str1 уже указывает на другой an object
}
Kesimpulan: Aku tresna Jawa Aku tresna Jawa Sawise kita nulis:
str1 = "I love Python";
obyek kanthi senar "Aku tresna Jawa" ora owah lan ora lunga menyang ngendi wae. Ana kanthi aman lan nduweni teks sing padha karo sadurunge. Kode:
str1 = "I love Python";
mung nggawe obyek liyane lan saiki variabel str1kasebut. Nanging kita ora bisa mengaruhi obyek "Aku tresna Jawa" ing sembarang cara. Oke, ayo nyoba kanthi cara sing beda! Kelas Stringkebak cara, lan sawetara wong koyone ngganti negara baris! Contone, ana cara replace(). Ayo padha ngganti tembung "Jawa" dadi tembung "Python" ing baris kita!
public static void main(String[] args) {

   String str1 = "I love Java";

   String str2 = str1;//обе переменные-ссылки указывают на одну строку.
   System.out.println(str2);

   str1.replace("Java", "Python");//попробуем изменить состояние str1, заменив слово "Java" на “Python”
   System.out.println(str2);
}
Kesimpulan: Aku tresna Jawa Aku tresna Jawa Ora bisa maneh! Mungkin metode kurva ora bisa digunakake? Ayo coba siji liyane. Tuladhane, substring(). Trim string adhedhasar nomer karakter sing dikirim. Ayo dipotong dadi 10 karakter pisanan:
public static void main(String[] args) {

   String str1 = "I love Java";

   String str2 = str1;//обе переменные-ссылки указывают на одну строку.
   System.out.println(str2);

   str1.substring(10);//обрезаем исходную строку
   System.out.println(str2);
}
Kesimpulan: Aku tresna marang Jawa Aku tresna marang Jawa Ora bisa owah ing basa Jawa: final, konstanta lan Ora owah - 3 Ora ana owah-owahan. Lan ora kudu. Kaya sing wis dingerteni, obyek Stringora bisa diganti. Apa kabeh metode kelas kasebut String? Padha bisa motong baris, ngganti karakter ing, etc. Yagene dheweke dibutuhake yen ora ana kedadeyan? Padha bisa! Nanging padha bali obyek senar anyar saben wektu. Ora ana gunane nulis:
str1.replace("Java", "Python");
- sampeyan ora bakal ngganti obyek asli. Nanging yen sampeyan nulis asil saka cara menyang variabel referensi anyar, sampeyan bakal langsung ndeleng prabédan!
public static void main(String[] args) {

   String str1 = "I love Java";

   String str2 = str1;//обе переменные-ссылки указывают на одну строку.
   System.out.println(str2);

   String str1AfterReplacement =  str1.replace("Java", "Python");
   System.out.println(str2);

   System.out.println(str1AfterReplacement);
}
Iki mung cara kabeh cara iki Stringbisa. Sampeyan ora bisa nindakake apa-apa karo obyek "Aku tresna Jawa" . Cukup gawe obyek anyar lan tulis: "Obyek anyar = asil saka sawetara manipulasi karo obyek " Aku tresna Jawa " ." Apa jinis liyane sing ora bisa diganti? Saka apa sing sampeyan kudu eling saiki - kabeh kelas pambungkus liwat jinis primitif ora bisa diganti. Integer, Byte, Character, Short, Boolean, Long, Double, Float- kabeh kelas iki nggawe obyek Immutable . Iki uga kalebu kelas digunakake kanggo nggawe nomer akeh - BigIntegerlan BigDecimal. Kita bubar ngliwati pangecualian lan ndemek StackTrace. Dadi: obyek saka kelas java.lang.StackTraceElement uga immutable. Iki logis: yen wong bisa ngganti data ing tumpukan kita, bisa negate kabeh karya karo. Mbayangno wong mlebu StackTrace lan ngganti OutOfMemoryError dadi FileNotFoundException . Lan sampeyan kudu bisa karo tumpukan iki lan goleki sabab saka kesalahan. Lan program ora nggunakake file ing kabeh :) Mulane, ing sisih aman, obyek iki digawe immutable. Inggih, karo StackTraceElement iku luwih utawa kurang cetha. Napa ana sing pengin nggawe senar ora bisa diganti? Apa sing bakal dadi masalah yen bisa ngganti nilai-nilai kasebut. Mesthi bakal luwih trep: / Ana sawetara alasan kanggo iki. Kaping pisanan, nyimpen memori. Senar sing ora bisa diganti bisa diselehake String Poollan sing padha bisa digunakake saben wektu tinimbang nggawe sing anyar. Kapindho, safety. Contone, umume login lan sandhi ing program apa wae yaiku strings. Kemungkinan ngganti bisa nyebabake masalah karo wewenang. Ana alesan liyane, nanging kita durung entuk sinau basa Jawa-kita bakal bali mengko.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION