JavaRush /Blog Jawa /Random-JV /Ngopi #134. Apa sing kudu dihindari nalika nulis kode Jaw...

Ngopi #134. Apa sing kudu dihindari nalika nulis kode Jawa. Carane final, pungkasan lan finalize digunakake ing Jawa

Diterbitake ing grup

Sing Dihindari Nalika Nulis Kode Jawa

Sumber: Sedheng Kita menehi perhatian marang artikel sing nyathet kesalahan umum sing ditindakake para pangembang nalika nulis kode Jawa. Ngopi #134.  Apa sing kudu dihindari nalika nulis kode Jawa.  Carane final, pungkasan lan finalize digunakake ing Jawa - 1

Nggunakake Enum.values

Iki dianggep minangka bug, aku kaget amarga aku nggunakake Enum.values ​​kanthi rutin . Masalah ing kene iku Enum.values ​​() mestine dhaftar immutable dening specification. Kanggo nindakake iki, kudu ngasilake conto anyar saka array kanthi nilai enum saben-saben diarani.
public enum Fruits {
    APPLE, PEAR, ORANGE, BANANA;

    public static void main(String[] args) {
        System.out.println(Fruits.values());
        System.out.println(Fruits.values());
    }
}
// output
// [Lcom.test.Fruits;@7ad041f3
// [Lcom.test.Fruits;@251a69d7
Ana rong obyek sing kapisah ing memori ing kene, mula bisa uga ora ana masalah gedhe. Nanging yen sampeyan nggunakake Fruit.values ​​() nalika proses request lan sampeyan duwe mbukak dhuwur, iki bisa mimpin kanggo masalah memori. Sampeyan bisa kanthi gampang ndandani iki kanthi ngenalake VALUES variabel final statis pribadi kanggo caching.

Passing Parameter opsional minangka parameter metode

Coba kode ing ngisor iki:
LocalDateTime getCurrentTime(Optional<ZoneId> zoneId) {
    return zoneId.stream()
        .map(LocalDateTime::now)
        .findFirst()
        .orElse(LocalDateTime.now(ZoneId.systemDefault()));
}
Kita ngliwati zoneId parameter Opsional lan, adhedhasar anané, mutusake apa bakal menehi wektu ing zona wektu sistem utawa nggunakake zona sing ditemtokake. Nanging, iki dudu cara sing bener kanggo nggarap Opsional. Kita kudu ngindhari nggunakake minangka parameter lan nggunakake metode overloading.
LocalDateTime getCurrentTime(ZoneId zoneId) {
  return LocalDateTime.now(zoneId);
}

LocalDateTime getCurrentTime() {
  return getCurrentTime(ZoneId.systemDefault());
}
Kode sing sampeyan deleng ing ndhuwur luwih gampang diwaca lan debug.

Nggunakake StringBuilder

String ing basa Jawa iku ora owah. Iki tegese yen wis digawe ora bisa diowahi maneh. JVM njaga blumbang senar lan, sadurunge nggawe anyar, nelpon String.intern () cara , kang ngasilake Kayata saka blumbang senar cocog kanggo Nilai, yen ana. Contone, kita pengin nggawe senar dawa kanthi nggabungake unsur kasebut.
String longString = new StringBuilder()
  .append("start")
  .append("middle")
  .append("middle")
  .append("middle")
  .append("end")
  .toString();
Kita bubar dikandhani manawa iki minangka ide sing ala banget amarga versi Jawa sing lawas nindakake ing ngisor iki:
  • ing baris 1 senar "wiwitan" dipasang menyang blumbang senar lan nuding longString
  • baris 2 nambah senar "startmiddle" kanggo blumbang lan nunjuk menyang longString
  • ing baris 3 kita duwe "miwiti tengah"
  • ing baris 4 - "miwiti tengah tengah"
  • lan pungkasane ing baris 5 kita nambah "startmiddlemiddlemiddleend" menyang blumbang lan nunjuk longString menyang
Kabeh larik iki tetep ing blumbang lan ora tau digunakake, asil ing jumlah gedhe saka RAM boroske. Kanggo ngindhari iki, kita bisa nggunakake StringBuilder.
String longString = new StringBuilder()
  .append("start")
  .append("middle")
  .append("middle")
  .append("middle")
  .append("end")
  .toString();
StringBuilder mung nggawe siji string nalika metode toString diarani , saéngga nyisihake kabeh string penengah sing wiwitane ditambahake menyang blumbang. Nanging, sawise Java 5 iki rampung kanthi otomatis dening compiler , supaya luwih apik nggunakake concatenation string nggunakake "+".

Nggunakake pambungkus primitif nalika ora dibutuhake

Coba rong fragmen ing ngisor iki:
int sum = 0;
for (int i = 0; i < 1000 * 1000; i++) {
  sum += i;
}
System.out.println(sum);
Integer sum = 0;
for (int i = 0; i < 1000 * 1000; i++) {
  sum += i;
}
System.out.println(sum);
Conto pisanan mlaku kaping enem luwih cepet tinimbang sing kapindho ing komputerku. Bentenipun mung kita nggunakake kelas pambungkus Integer. Cara kerjane Integer yaiku ing baris 3, runtime kudu ngowahi variabel jumlah dadi integer primitif (otomatis unboxing), lan sawise tambahan rampung, asil kasebut banjur dibungkus menyang kelas Integer anyar. (kemasan otomatis). Iki tegese kita nggawe 1 yuta kelas Integer lan nindakake rong yuta operasi kemasan, sing nerangake kalem sing dramatis. Kelas Wrapper mung kudu digunakake nalika kudu disimpen ing koleksi. Nanging, versi Jawa sing bakal teka bakal ndhukung koleksi jinis primitif, sing bakal nggawe bungkus ora bisa digunakake.

Carane final, pungkasan lan finalize digunakake ing Jawa

Sumber: Newsshare Ing artikel iki sampeyan bakal sinau ing ngendi, kapan lan ngapa tembung kunci Finalize digunakake, lan apa iku worth nggunakake ing kabeh ing Jawa. Sampeyan uga bakal sinau beda antarane final, pungkasan lan finalize.

Ing ngendi pemblokiran pungkasan digunakake?

Blok pungkasan ing Jawa digunakake kanggo nyimpen bagean kode penting kayata kode ngresiki, nutup file, utawa nutup sambungan, contone. Blok pungkasan dieksekusi preduli saka pangecualian sing dibuwang utawa apa sing ditindakake. A pungkasanipun ngemot kabeh statements penting apa ana pangecualian utawa ora.

Kepiye carane ngrampungake variabel ing Jawa?

Ana 3 cara kanggo miwiti variabel Jawa pungkasan:
  • Sampeyan bisa miwiti variabel final nalika diumumake. Pendekatan iki paling umum.
  • Variabel final kosong diinisialisasi ing blok instance-initializer utawa konstruktor.
  • Variabel statis final kosong diinisialisasi ing blok statis.

Apa kita bisa nelpon metode finalize kanthi manual ing Jawa?

Cara finalize () ora perlu lan ora dianjurake kanggo disebut nalika obyek dadi metu saka orane katrangan. Amarga ora dingerteni sadurunge (utawa apa) metode finalize () bakal dieksekusi . Umumé, finalize dudu cara sing paling apik kanggo digunakake kajaba ana kabutuhan khusus. Diwiwiti nganggo aksara Jawa 9 wis ora ana.

Nalika metode finalisasi diarani?

Metode finalize () diarani nindakake reresik sadurunge ngumpulake sampah.

Apa prabédan antarane final, pungkasan lan finalize?

Bentenipun utama antarane final, pungkasan lan finalize punika final minangka modifier akses, pungkasanipun punika pamblokiran ing pangecualian penanganan lan finalize iku cara saka kelas obyek.

Apa bisa ngilangi cara pungkasan?

Ora, cara sing diumumake final ora bisa diganti utawa didhelikake.

Apa kita bisa nggunakake nyoba tanpa nyekel?

Ya, sampeyan bisa duwe blok nyoba tanpa blok nyekel kanthi nggunakake blok pungkasan . Kaya sing kita ngerteni, blok pungkasan bakal ditindakake sanajan ana pangecualian kajaba Sistem ing blok coba.

Apa metode pungkasan?

Cara pungkasan ora bisa diganti utawa didhelikake dening subclass. Padha digunakake kanggo nyegah prilaku sing ora dikarepke saka subclass ngowahi cara sing bisa kritis kanggo fungsi utawa konsistensi kelas.

Apa konstruktor bisa dadi final?

Konstruktor ora bisa diumumake final. Compiler sampeyan bakal tansah mbuwang kesalahan kaya "modifier final ora diijini." Pungkasan nalika ditrapake ing metode tegese metode kasebut ora bisa diganti ing subkelas. Konstruktor ora cara biasa.

Apa tembung kunci pungkasan sing digunakake?

Tembung kunci pungkasan digunakake kanggo nggawe blok kode sawise blok nyoba. Blok pungkasan tansah dileksanakake preduli saka pangecualian ana. Nggunakake pemblokiran pungkasan ngidini sampeyan mbukak statement jinis unwind sing pengin dieksekusi, preduli saka apa sing kedadeyan ing kode sing dilindhungi.

Apa gunane pungkasane?

Blok pungkasan ing Jawa yaiku blok sing digunakake kanggo nglakokake bagean kode kayata nutup sambungan lan liya-liyane. Blok pungkasan ing Jawa tansah dileksanakake manawa pangecualian ditangani utawa ora. Mulane, ngemot kabeh pratelan sing perlu sing kudu dicithak manawa ana pangecualian utawa ora.

Napa metode Finalize dilindhungi?

Apa modifier akses cara finalize () dilindhungi? Apa ora bisa umum? Ora umum amarga ora kena diarani wong liya kajaba JVM. Nanging, kudu direksa supaya bisa ditindhes dening subkelas sing kudu nemtokake prilaku kasebut.

Apa metode finalisasi mesthi diarani basa Jawa?

Metode finalisasi diarani nalika obyek bakal dikumpulake. Iki bisa kedadeyan kapan wae sawise dadi layak kanggo koleksi sampah. Elinga yen kabeh bisa obyek ora sampah diklumpukake (lan mulane finalize ora tau disebut).

Apa bedane uncalan lan uncalan?

Tembung kunci uncalan digunakake kanggo sengaja mbuwang pengecualian. Tembung kunci throws digunakake kanggo ngumumake siji utawa luwih pengecualian, dipisahake karo koma. Nalika nggunakake uncalan, mung siji pangecualian di buwang.

Apa bedane antarane try catch lan pungkasane tembung kunci?

Iki minangka rong konsep sing beda: blok nyekel dieksekusi mung yen ana pangecualian ing blok coba. Pamblokiran pungkasan tansah kaleksanan sawise nyoba (-nyekel) pemblokiran, preduli saka pangecualian iki di buwang utawa ora.

Apa kita bisa nggunakake pungkasane tanpa nyoba ing Jawa?

Blok pungkasan kudu digandhengake karo blok coba, sampeyan ora bisa nggunakake pungkasan tanpa blok coba. Sampeyan kudu nyelehake ing blok iki pernyataan sing kudu ditindakake.

Apa kita bisa marisi cara pungkasan?

Apa cara pungkasan diwarisake? Ya, cara pungkasan diwarisake, nanging sampeyan ora bisa ngilangi.

Cara sing ora bisa diganti?

Kita ora bisa ngilangi metode statis amarga metode overriding adhedhasar link dinamis nalika runtime lan metode statis diikat nggunakake link statis ing wektu kompilasi. Mangkono, overriding cara statis ora bisa.

Apa sing kedadeyan yen cara pungkasan ditimpa?

Cara pungkasan sing diumumake ing kelas induk ora bisa diganti dening kelas anak. Yen kita nyoba kanggo ngatasi cara pungkasan, compiler bakal uncalan pangecualian ing wektu kompilasi.

Apa tembung kunci pungkasan lan metode finalisasi bisa digunakake?

Ora ana podho ing fungsine, kajaba jeneng sing padha. Tembung kunci pungkasan bisa digunakake karo kelas, metode utawa variabel ing Jawa. Kelas pungkasan ora bisa ditambahake ing Jawa, cara pungkasan ora bisa ditindhes, lan variabel pungkasan ora bisa diowahi.

Apa tembung kunci super ing Jawa?

Tembung kunci super ing Jawa minangka variabel referensi sing digunakake kanggo nyebut obyek langsung saka kelas induk. Kapan sampeyan instantiate subclass, conto saka kelas induk digawe ing podo karo, kang dirujuk dening super variabel referensi. Tembung kunci super bisa digunakake kanggo langsung nelpon metode kelas induk.

Apa bedane tembung kunci statis lan pungkasan?

Bentenane utama antarane tembung kunci statis lan pungkasan yaiku tembung kunci statis digunakake kanggo nemtokake anggota kelas sing bisa digunakake kanthi bebas saka obyek saka kelas kasebut. Tembung kunci Final digunakake kanggo mratelakake variabel konstan, cara sing ora bisa ditindhes, lan kelas sing ora bisa diwarisake.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION