JavaRush /Blog Jawa /Random-JV /Jawa 13: Fitur Anyar

Jawa 13: Fitur Anyar

Diterbitake ing grup
Kita wis biasa karo kasunyatan manawa rilis JDK anyar katon saben nem wulan. Nganti saiki, pendekatan iki wis mbenerake dhewe, lan kuwatir sawetara pangembang yen dheweke ora bakal ngupayakake nganyari wis muspra: ana sawetara owah-owahan nem sasi lan ora global kaya sadurunge. Ya, programer anyar bisa uga ora weruh inovasi kasebut. Jawa 13: fitur anyar - 1Nanging, luwih apik kanggo pangembang piranti lunak ing mangsa ngarep supaya terus-terusan ngupayakake inovasi. Ing artikel iki, kita bakal njlèntrèhaké usulan ekstensi sing ditampa (JEPs). Jawa 13 kalebu mung limang JEPs lan 76 unsur perpustakaan inti anyar (kang meh setengah tambahan prasaja kanggo paket java.io).

JEP 355 : Blok Teks (Preview)

Ayo diwiwiti kanthi ngganti sintaks basa kasebut. Sing paling penting yaiku blok teks. Padha ngidini sampeyan supaya karakter uwal lan ngerti carane format strings. Sampeyan bisa uga elinga yen JDK 12 ora kalebu fitur Raw String Literals (JEP 326) sing dikarepake kanggo nggarap literal string. Ing Jawa 13, diganti JEP 355 kanthi blok teks. Sampeyan mbokmenawa elinga yen ing basa Jawa, senar dibungkus kutipan ganda. Iki apik, nanging masalah iku baris ora bisa Occupy luwih saka siji baris saka file sumber (supaya kebingungan karo baris Jawa, kene kita bakal nelpon baris file "baris"). Inggih, ayo ngubengi lan nggunakake, contone, simbol \nyen break dibutuhake, utawa concatenation ekspresi multiline. Ora dadi apik banget! Literal teks kanthi fragmen HTML, XML, SQL, utawa JSON sing disematake utamane rumit. Kabeh uwal, concatenation, lan editing manual iki ndadekake kode ora trep kanggo nulis lan angel diwaca. Blok teks nyoba ngatasi masalah iki. Padha miwiti uh ... karo telung kuotasi pindho lan mungkasi karo wong-wong mau (Aku ngerti, iku ora muni apik banget). Kabeh ing antarane kuotasi diinterpretasikake minangka bagean saka baris, kalebu baris anyar. Blok teks bisa digunakake persis padha karo literal teks standar, lan Jawa bakal nyusun kode kanthi cara sing padha. Tanda kutip pambuka kudu diterusake karo pembatas baris; pamblokiran teks ora bisa digunakake ing siji baris, supaya kode
String smallBlock = """Only one line""";
bakal nyebabake kesalahan ing ngisor iki:
TextBlock.java:3: error: illegal text block open delimiter sequence, missing line terminator
   String smallBlock = """Text Block""";
                          ^
TextBlock.java:3: error: illegal text block open delimiter sequence, missing line terminator
   String smallBlock = """Text Block""";
                                   	^
Fragmen HTML prasaja saiki bisa ditulis kaya iki:
String htmlBlock = """
               	<html>
                 	<body>
                   	<p>CodeGym Web page</p>
                 	</body>
               	<html>
         	     """;
Ayo sebutno sawetara subtleties sing luwih apik kanggo ngerti nalika nggunakake blok teks. Penempatan kuotasi penutup dadi penting: nemtokake carane spasi putih sok-sok ditangani. Ing conto ing ndhuwur, kuotasi nutup didadekake siji karo indentasi teks HTML. Ing kasus iki, kompiler bakal mbusak spasi indentasi, lan minangka asil kita bakal entuk baris kaya iki:
<html>
  <body>
    <p>My web page</p>
  </body>
</html>
Cathetan:baris kuwi bakal ngemot newline ing mburi baris. Yen ora perlu, kuotasi tutup """ bisa diselehake langsung sawise tag </html>. Yen kita mindhah kuotasi nutup nyedhaki wates kiwa, iki bakal ngganti jumlah indentation dibusak. Yen kita mindhah loro spasi ing sisih kiwa, kita bakal nambah rong spasi kanggo indentasi kanggo saben baris baris. Ngalih menyang pinggir kiwa bakal nyebabake kabeh padding bisa diawetake. Pindhah kuotasi luwih nengen ora bakal ana pengaruh lan ora bakal nambah indentasi maneh. Blok teks kalebu ing JDK 13 minangka fitur pratinjau. Tegese durung kalebu ing spesifikasi basa Jawa sing cocog. Tegese, ora jelas apa fitur iki bakal dadi bagean permanen saka basa utawa mung tamu ing kene. Saiki, pangembang bisa nyoba fitur kasebut lan menehi pendapat babagan iki. Nasib blok teks bakal gumantung: fitur kasebut bisa ditingkatake, lan yen sampeyan ora seneng, mula bisa dicopot kabeh. Yen sampeyan pengin nyoba pamblokiran teks ing praktik, elinga yen fitur pratinjau kudu dilebokake kanthi jelas supaya bisa ngumpulake lan mbukak. kompilasi:

javac --enable-preview --release 13 TextBlock.java
Kanggo mbukak aplikasi, sampeyan kudu ngaktifake fitur pratinjau:

java --enable-preview TextBlock
Kelas kasebut Stringnduweni telung cara anyar sing nglengkapi owah-owahan basa iki:
  • formatted(): Format senar nggunakake senar dhewe minangka senar format. Setara karo tantanganformat(this, args)
  • stripIndent(): Mbusak spasi acak saka senar. Iki migunani yen sampeyan maca string multiline lan pengin ngetrapake pengecualian spasi putih sing padha karo deklarasi eksplisit.
  • translateEscapes(): Ngasilake string kanthi urutan uwal (kayata \ r), diterjemahake menyang nilai Unicode sing cocog.
Iku menarik yen cara iki mung katon, nanging wis ditandhani minangka ora digunakake ... kahanan iki nuduhake yen padha bisa dibusak ing versi mangsa saka JDK. Kayane rada eksentrik kanggo nambah cara anyar lan langsung ninggalake. Nanging, elinga yen cara kasebut ana gandhengane karo fitur pratinjau sing bisa diganti utawa dibusak. Mbok ngenalke anotasi @PreviewFeaturebakal mbantu karo kahanan kaya mengkono, nanging durung kalebu ing JDK (sanajan karo jurusan dhuwure kemungkinan bakal katon ing JDK 14).

JEP 354 : Ngalih Ekspresi (Preview)

Jawa 12 ngenalaken proposal kanggo wangun anyar saka ekspresi ekspresi karo statement switch - JEP 325 . Iku dadi fitur pratinjau pisanan lan nasibe mbuktekake manawa ngirim proposal menyang pangguna minangka ide sing apik. Sadurunge JDK 12, switchmung bisa digunakake minangka statement sing nindakake tumindak nanging ora ngasilake asil. Nanging ing Jawa 12 diijini digunakake switchminangka ekspresi sing ngasilake asil sing bisa ditugasake menyang variabel. Ana owah-owahan liyane ing sintaks pratelan kasus ing switch. Ayo goleki conto saka JEP kanggo ngerti cara kerjane.
int numberOfLetters;
switch(dayOfWeek) {
  case MONDAY:
  case FRIDAY:
  case SUNDAY:
    numberOfLetter = 6;
    break;
  case TUESDAY
    numberOfLetter = 7;
    break;
  case THURSDAY
  case SATURDAY
    numberOfLetter = 8;
    break;
  case WEDNESDAY
    numberOfLetter = 9;
    break;
  default:
   throw new IllegalStateException("Huh?: " + day);
}
Ing conto iki, kita nggunakake nilai dayOfWeekkanggo nemtokake nilai kasebut numberOfLetters. Amarga peculiarities saka karya operator switch, kode iki ora paling ayu lan iku gampang kanggo nggawe kesalahane. Pisanan, yen kita lali kanggo aplikasi statement breakkanggo saben klompok label cilik, kita bakal gawan kanggo klompok sabanjuré saka labels. Iki bisa nyebabake kesalahan sing angel ditemokake. Kapindho, kita kudu nemtokake saben klompok label cilik. Yen kita lali, banjur, mesthi, kita bakal njaluk kesalahan compiler, nanging pilihan iki ora becik. Kode kita uga cukup verbose amarga saben nilai dayOfWeekkudu duwe label cilik dhewe. Nggunakake sintaks anyar, kita entuk kode sing luwih resik lan kurang rawan kesalahan:
int numberOfLetters = switch (dayOfWeek) {
   case MONDAY, FRIDAY, SUNDAY -> 6;
   case TUESDAY -> 7;
   case THURSDAY, SATURDAY -> 8;
   case WEDNESDAY -> 9;
   default -> throw new IllegalStateException("Huh?: " + day);
};
Saiki kita mung kudu nggawe tugas sapisan (saka nilai bali ekspresi switch) lan bisa nggunakake dhaptar sing dipisahake koma kanggo label cilik. Lan amarga kita ora nggunakake operator break, kita ngilangi masalah sing ana gandhengane. Sintaks ekspresi switchngidini kita nggunakake sintaks gaya lawas, supaya ing JDK 12 kita bisa nulis kaya iki:
int numberOfLetters = switch (dayOfWeek) {
  case MONDAY:
  case FRIDAY:
  case SUNDAY:
   break 6;
  case TUESDAY
   break 7;
  case THURSDAY
  case SATURDAY
   break 8;
  case WEDNESDAY
   break 9;
  default:
   throw new IllegalStateException("Huh?: " + day);
};
Miturut masyarakat Jawa, nggunakake overloading breakkanggo nemtokake nilai bali bisa mbingungake. Basa Jawa uga ngidini sampeyan nggunakake break( lan continue) kanthi label kaya operator lompat tanpa syarat goto. JEP 354 ngganti panggunaan iki break, dadi ing Jawa 13 kode kita rada owah:
int numberOfLetters = switch (dayOfWeek) {
  case MONDAY:
  case FRIDAY:
  case SUNDAY:
   yield 6;
  case TUESDAY
   yield 7;
  case THURSDAY
  case SATURDAY
   yield 8;
  case WEDNESDAY
   yield 9;
  default:
   throw new IllegalStateException("Huh?: " + day);
};
Telung JEP sabanjure digandhengake karo Java Virtual Machine.

JEP 350 Arsip CDS Dinamis

Ekstensi iki ngidini sampeyan arsip kelas kanthi dinamis ing pungkasan eksekusi aplikasi Java. CDS utawa Class Data Sharing ngidini sampeyan ngemas kabeh kelas sing diluncurake nalika wiwitan dadi arsip khusus class data sharing, nggunakake dhaptar kelas sing padha kanthi standar. Iki ndadékaké kanggo akselerasi pinunjul ing mbukak aplikasi lan nyimpen RAM. Sadurunge, nggunakake AppCDS minangka proses multi-langkah sing melu nggawe dhaptar kelas sing cocog lan nggunakake dhaptar kasebut kanggo nggawe arsip sing bakal digunakake kanggo mlaku sabanjure. Saiki kabeh sing dibutuhake yaiku siji peluncuran aplikasi kanthi -XX: gendera ArchiveClassesAtExitsing nuduhake lokasi ing ngendi arsip bakal ditulis. Kanthi pendekatan iki, kelas kanthi otomatis dikemas menyang arsip sawise aplikasi mandheg normal.

JEP 351 ZGC : Memori sing ora digunakake

Setaun kepungkur, JDK 11 ngenalake ZGC, kolektor sampah eksperimental, skalabel, kurang latensi. Kaping pisanan, ZGC tumindak rada aneh: ora ngidini memori bali menyang sistem operasi, sanajan ora dibutuhake maneh. Kanggo sawetara lingkungan, kayata wadhah, ing ngendi sumber daya digunakake dening macem-macem layanan ing wektu sing padha, iki bisa mbatesi skalabilitas lan efisiensi sistem. Tumpukan ZGC kasusun saka apa sing disebut ZPages. Nalika ZPages dibusak sak siklus koleksi uwuh, padha bali menyang ZPageCache. ZPages ing cache iki diurutake miturut carane bubar digunakake. Ing Java 13, ZGC bakal mbalekake kaca sing wis diidentifikasi wis suwe ora digunakake menyang sistem operasi. Kanthi cara iki bisa digunakake maneh kanggo proses liyane.

JEP 353 Ngleksanakake maneh API Soket warisan

Loro-lorone implementasi API java.net.Socketisih java.net.ServerSocketJDK 1.0. Ing iki, lan kabeh JDK sakteruse, implementasine saka API iki nggunakake sawetara Techniques (kayata nggunakake tumpukan thread minangka buffer I / O) sing nggawe wong ora fleksibel lan angel kanggo njaga. Kanggo ngatasi masalah iki, implementasine anyar diwenehake ing JDK 13 NioSocketImpl. Ora mbutuhake kode asli maneh, dadi luwih gampang port menyang platform sing beda-beda. Kelas iki uga nggunakake mekanisme cache buffer ana (nyingkiri nggunakake tumpukan thread kanggo maksud iki) lan ngunci java.util.concurrenttinimbang cara diselarasake. Iki bakal nyederhanakake integrasi karo serat saka Project Loom .

API anyar

Kita kasebut sadurunge yen Java 13 kalebu 76 API anyar ing perpustakaan kelas dasar. Padha nyakup wilayah ing ngisor iki:
  • Nganyari dhukungan Unicode.
  • Telung cara anyar Stringkanggo ndhukung blok teks (ndeleng katrangan JEP 255 ing ndhuwur).
  • Kelas java.niosaiki duwe absolut (minangka gantos kanggo relatif) getlan nyetel cara. Padha, kaya kelas abstrak dhasar Buffer, kalebu cara slice()kanggo njupuk bagéyan saka buffer.
  • Cara force()kelas MappedByteBuffermeksa bagean buffer ditulis menyang panyimpenan backing.
  • nio.FileSystemnambah telung formulir overloaded anyar newFileSystem()kanggo ngakses isi file minangka sistem file.
  • Cara anyar sing menarik wis javax.annotation.processing.ProcessingEnvironmentmuncul. isPreviewEnabled(). Bakal menehi pitutur marang kowe apa fitur pratinjau diaktifake. Iki menarik amarga anotasi kasebut ing ndhuwur @PreviewFeatureora bakal kasedhiya nganti JDK 14 dirilis.
  • DocumentBuilderFactorylan SAXParserFactoryentuk javax.xml.parserstelung cara anyar kanggo nggawe conto sing ngerti ruang jeneng.
Materi kasebut adhedhasar artikel dening Simon Ritter lan dokumentasi resmi .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION