JavaRush /جاوا بلاگ /Random-SD /جاوا 13: نيون خاصيتون

جاوا 13: نيون خاصيتون

گروپ ۾ شايع ٿيل
اسان اڳ ۾ ئي استعمال ڪيو آهي حقيقت اها آهي ته نئين JDK رليز هر ڇهن مهينن ۾ ظاهر ٿئي ٿي. هينئر تائين، هن طريقي سان پاڻ کي صحيح ثابت ڪيو آهي، ۽ ڪجهه ڊولپرز جي پريشاني آهي ته اهي تازه ڪاري سان گڏ نه رهندا، بيڪار ٿي ويا آهن: اتي ڪجھ ڇهه مهينا تبديليون آهن ۽ اهي اڳ وانگر عالمي طور تي نه آهن. خير، نوان پروگرامر شايد جدت کي محسوس نه ڪن. جاوا 13: نيون خاصيتون - 1بهرحال، اهو بهتر آهي ته مستقبل جي سافٽ ويئر ڊولپرز لاء جدت جي برابر رکڻ لاء. هن آرٽيڪل ۾، اسان روايتي طور تي قبول ٿيل واڌ جي تجويز (JEPs) کي بيان ڪنداسين. جاوا 13 ۾ صرف پنج JEPs ۽ 76 نيون بنيادي لائبريري عناصر شامل آھن (جن مان لڳ ڀڳ اڌ java.io پيڪيج ۾ سادو اضافو آھن).

JEP 355 : ٽيڪسٽ بلاڪ (پريويو)

اچو ته ٻولي جي نحو کي تبديل ڪندي شروع ڪريون. انهن مان سڀ کان اهم آهن ٽيڪسٽ بلاڪ. اهي توهان کي ڀڄڻ جي ڪردارن کان بچڻ جي اجازت ڏين ٿا ۽ ڄاڻو ته ڪئين فارميٽ ڪيئن ڪجي. توهان کي ياد هوندو ته JDK 12 ۾ اسٽرنگ لٽرلز سان ڪم ڪرڻ لاءِ متوقع Raw String Literals (JEP 326) خصوصيت شامل نه هئي. جاوا 13 ۾، ان کي تبديل ڪيو ويو JEP 355 ان جي ٽيڪسٽ بلاڪ سان. توهان کي شايد ياد هوندو ته جاوا ۾، هڪ تار ٻه حوالن ۾ لپي ويو آهي. اهو سٺو آهي، پر مسئلو اهو آهي ته هڪ لڪير ماخذ فائل جي هڪ کان وڌيڪ لڪير تي قبضو نٿو ڪري سگهي (جاوا لائن سان مونجهاري کان بچڻ لاء، هتي اسان هڪ فائيل لائن کي "لائن" سڏين ٿا). خير، اچو ته چوڌاري وڃو ۽ استعمال ڪريون، مثال طور، علامت \nجيڪڏهن وقفو گهربل هجي، يا ملٽي لائن ايڪسپريس جي ڪنٽينيشن. اهو تمام سٺو نه نڪرندو آهي! شامل ٿيل HTML، XML، SQL، يا JSON ٽڪرن سان گڏ متن جا لفظ خاص طور تي منجهيل آهن. هي سڀ فرار، ٺاهه، ۽ دستي ايڊيٽنگ ڪوڊ کي لکڻ ۾ تڪليف ۽ پڙهڻ ۾ مشڪل بڻائي ٿو. ٽيڪسٽ بلاڪ هن مسئلي کي حل ڪرڻ جي ڪوشش ڪريو. اهي شروع ڪن ٿا ... ٽرپل ڊبل حوالن سان ۽ انهن سان ختم ڪريو (مون کي خبر آهي، اهو تمام سٺو نٿو لڳي). حوالن جي وچ ۾ هر شي کي لڪير جي حصي جي طور تي تفسير ڪيو ويو آهي، بشمول نيو لائنون. ٽيڪسٽ بلاڪ استعمال ڪري سگھجن ٿا بلڪل ساڳي طرح معياري ٽيڪسٽ لٽرلز، ۽ جاوا ڪوڊ گڏ ڪندو ساڳي طرح. افتتاحي اقتباس لازمي طور تي ليڪ ڊيليميٽر جي پٺيان ھجن؛ ٽيڪسٽ بلاڪ هڪ لڪير ۾ استعمال نٿا ڪري سگهن، تنهنڪري ڪوڊ
String smallBlock = """Only one line""";
هيٺ ڏنل غلطين جي اڳواڻي ڪندو:
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""";
                                   	^
ھڪڙو سادو HTML ٽڪرو ھاڻي ھن طرح لکي سگھجي ٿو:
String htmlBlock = """
               	<html>
                 	<body>
                   	<p>CodeGym Web page</p>
                 	</body>
               	<html>
         	     """;
اچو ته ڪجھ ذيلي ذخيري جو ذڪر ڪريون جيڪي متن بلاڪ استعمال ڪرڻ وقت باخبر رھڻ لاءِ بھتر آھن. بند ڪرڻ جي حوالن جي جڳهه کي اهم قرار ڏئي ٿو: اهو طئي ڪري ٿو ته ڪڏهن ڪڏهن سفيد جاء ڪيئن سنڀاليو ويندو آهي. مٿي ڏنل مثال ۾، بند ڪرڻ جا حوالا HTML ٽيڪسٽ جي انڊينٽيشن سان جڙيل آهن. انهي صورت ۾، مرتب ڪندڙ انڊينٽيشن اسپيس کي هٽائي ڇڏيندو، ۽ نتيجي ۾ اسان کي هن طرح هڪ لائن ملندي:
<html>
  <body>
    <p>My web page</p>
  </body>
</html>
نوٽ:اهڙي ليڪ لائن جي آخر ۾ هڪ نئين لائن تي مشتمل هوندي. جيڪڏهن ضرورت نه آهي ته، بند ڪرڻ جي اقتباس """ کي سڌو </html> ٽيگ کان پوء رکي سگهجي ٿو. جيڪڏهن اسان بند ڪرڻ جي حوالن کي کاٻي پاسي واري مارجن جي ويجهو منتقل ڪريون ٿا، اهو هٽايو ويو انڊينٽيشن جي مقدار کي تبديل ڪندو. جيڪڏهن اسان انهن کي کاٻي طرف ٻه اسپيس منتقل ڪريون ٿا، ته اسان هر ليڪ لائن ۾ انڊينٽيشن لاءِ ٻه اسپيس شامل ڪنداسين. کاٻي ڪنڊ ڏانهن منتقل ٿيڻ سبب سڀني پيڊنگ کي محفوظ ڪيو ويندو. حوالن کي وڌيڪ ساڄي طرف منتقل ڪرڻ سان ڪو به اثر نه ٿيندو ۽ نه ئي وڌيڪ انڊينٽيشن شامل ٿيندي. ٽيڪسٽ بلاڪ شامل ڪيا ويا JDK 13 ۾ هڪ ڏيک خصوصيت جي طور تي. هن جو مطلب آهي ته اهي اڃا تائين لاڳاپيل جاوا ٻولي جي وضاحت ۾ شامل نه آهن. اهو آهي، اهو واضح ناهي ته ڇا اها خاصيت ٻولي جو مستقل حصو بڻجي ويندي يا ڇا اهو صرف هتي مهمان آهي. في الحال، ڊولپرز فيچر کي جانچي سگھن ٿا ۽ ان تي پنھنجي راءِ ڏئي سگھن ٿا. ٽيڪسٽ بلاڪ جي قسمت ان تي منحصر هوندي: خاصيت بهتر ٿي سگهي ٿي، ۽ جيڪڏهن توهان اهو پسند نه ڪيو، ته پوء ان کي ختم ڪري سگهجي ٿو. جيڪڏھن توھان ڪوشش ڪرڻ چاھيو ٿا ٽيڪسٽ بلاڪ کي عملي طور تي، ياد رکو ته ڏيکاءَ جون خاصيتون لازمي طور تي شامل ٿيڻ گهرجن مرتب ڪرڻ ۽ هلائڻ لاءِ. تاليف:

javac --enable-preview --release 13 TextBlock.java
ايپليڪيشن کي هلائڻ لاء، توهان کي پريويو خاصيتون فعال ڪرڻ جي ضرورت آهي:

java --enable-preview TextBlock
ڪلاس String۾ ٽي نوان طريقا آھن جيڪي ھن ٻولي جي تبديلي کي پورو ڪن ٿا:
  • formatted(): هڪ اسٽرنگ کي فارميٽ ڪريو پاڻ کي اسٽرنگ استعمال ڪندي فارميٽ اسٽرنگ طور. چيلنج جي برابرformat(this, args)
  • stripIndent(): هڪ تار مان بي ترتيب واري جاءِ کي هٽائي ٿو. اھو ڪارائتو آھي جيڪڏھن توھان پڙھي رھيا آھيو ملٽي لائن اسٽرنگ ۽ لاڳو ڪرڻ چاھيو ٿا ساڳيو وائيٽ اسپيس خارج ڪرڻ جيئن توھان واضح بيان سان ڪندا.
  • translateEscapes(): هڪ اسٽرنگ ڏي ٿو فرار جي ترتيب سان (جهڙوڪ \ r)، ترجمو ڪيل مناسب يونيڪوڊ قدر.
اها دلچسپ ڳالهه آهي ته اهي طريقا صرف ظاهر ٿيا، پر اڳ ۾ ئي نشان لڳل آهن جيئن ختم ٿيل ... معاملن جي هن حالت جو مشورو ڏئي ٿو ته اهي JDK جي مستقبل جي نسخي ۾ هٽائي سگهجن ٿيون. اهو ٿورڙو سنسڪرت لڳي ٿو هڪ نئون طريقو شامل ڪرڻ ۽ فوري طور تي ان کي ڇڏي ڏيو. بهرحال، مهرباني ڪري نوٽ ڪريو ته اهي طريقا هڪ ڏيک خصوصيت سان لاڳاپيل آهن جيڪي تبديل يا ختم ڪري سگھجن ٿيون. شايد هڪ تشريح متعارف ڪرائڻ @PreviewFeatureاهڙين حالتن ۾ مدد ڪندي، پر اهو اڃا تائين JDK ۾ شامل نه ڪيو ويو آهي (جيتوڻيڪ اهو تمام گهڻو امڪان آهي ته اهو JDK 14 ۾ ظاهر ٿيندو).

JEP 354 : مٽائي ايڪسپريس (پريو ڏسو)

جاوا 12 هڪ تجويز متعارف ڪرايو آهي لکڻ جي اظهار جي نئين شڪل لاءِ هڪ سوئچ بيان سان - JEP 325 . اهو سڀ کان پهريون پريويو فيچر ثابت ٿيو ۽ ان جي قسمت ثابت ڪري ٿي ته صارفين لاءِ تجويزون جمع ڪرائڻ هڪ بهترين خيال آهي. JDK 12 کان اڳ، switchاهو صرف هڪ بيان جي طور تي استعمال ڪري سگهجي ٿو جيڪو عمل ڪري ٿو پر نتيجو واپس نٿو ڪري. پر جاوا 12 ۾ ان کي استعمال ڪرڻ جي اجازت ڏني وئي switchهڪ اظهار جي طور تي جيڪو نتيجو ڏئي ٿو جيڪو متغير کي تفويض ڪري سگهجي ٿو. اندر ڪيس بيانن جي نحو ۾ ٻيون تبديليون هيون switch. اچو ته ڏسو JEP مان هڪ مثال اهو سمجهڻ لاءِ ته اهو ڪيئن ڪم ڪري ٿو.
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);
}
هن مثال ۾، اسان dayOfWeekقدر کي تفويض ڪرڻ لاء قدر استعمال ڪندا آهيون numberOfLetters. آپريٽر جي ڪم جي خاصيتن جي ڪري switch، هي ڪوڊ تمام خوبصورت نه آهي ۽ غلطي ڪرڻ آسان آهي. پهرين، جيڪڏهن اسان ڪيس ليبلز جي هر گروپ تي هڪ بيان لاڳو ڪرڻ وساريندا آهيون break، ته اسان ڪيس ليبلز جي ايندڙ گروپ ڏانهن ڊفالٽ ڪنداسين. اهو ٿي سگهي ٿو غلطيون جيڪي ڳولڻ ڏکيو آهن. ٻيو، اسان کي هر گروپ جي ڪيس ليبل جي وضاحت ڪرڻ گهرجي. جيڪڏهن اسان وساري ويٺاسين، ته، يقيناً، اسان کي گڏ ڪرڻ واري غلطي ملندي، جڏهن ته، هي اختيار مثالي نه آهي. اسان جو ڪوڊ پڻ ڪافي لفظي آهي ڇو ته هر قيمت کي dayOfWeekپنهنجو ڪيس ليبل هجڻ گهرجي. نئين نحو کي استعمال ڪندي، اسان کي تمام گهڻو صاف ۽ گهٽ غلطي وارو ڪوڊ ملي ٿو:
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);
};
هاڻي اسان کي صرف هڪ ڀيرو اسائنمينٽ ٺاهڻ جي ضرورت آهي (اظهار جي واپسي جي switchقيمت کان) ۽ ڪيس ليبلز لاءِ ڪاما کان الڳ ٿيل فهرست استعمال ڪري سگهون ٿا. ۽، جيئن ته اسان آپريٽر استعمال نٿا ڪريون break، اسان ان سان لاڳاپيل مسئلا ختم ڪريون ٿا. ايڪسپريس نحو switchاسان کي پراڻي انداز جي نحو کي استعمال ڪرڻ جي اجازت ڏئي ٿو، تنهنڪري JDK 12 ۾ اسين ان کي هن طرح لکي سگهون ٿا:
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);
};
جاوا ڪميونٽي جي مطابق، breakواپسي جي قيمت کي بيان ڪرڻ لاء اوورلوڊنگ استعمال ڪندي مونجهارو ٿي سگهي ٿو. جاوا ٻولي پڻ اجازت ڏئي ٿي توهان کي استعمال ڪرڻ جي breakcontinue) هڪ ليبل سان جيئن غير مشروط جمپ آپريٽر goto. JEP 354 ھن استعمال کي تبديل ڪيو break، تنھنڪري جاوا 13 ۾ اسان جو ڪوڊ ٿورڙو تبديل ٿئي ٿو:
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);
};
ايندڙ ٽي JEPs جاوا ورچوئل مشين سان لاڳاپيل آهن.

JEP 350 متحرڪ سي ڊي ايس آرڪائيو

هي واڌارو توهان کي اجازت ڏئي ٿو متحرڪ طور تي آرڪائيو ڪلاسز جاوا ايپليڪيشن جي عمل جي آخر ۾. سي ڊي ايس يا ڪلاس ڊيٽا شيئرنگ توهان کي اجازت ڏئي ٿي ته شروع ٿيندڙ سڀني ڪلاسن کي هڪ خاص آرڪائيو ۾ پيڪ ڪري class data sharing، انهن ساڳين ڪلاسن جي لسٽ کي ڊفالٽ طور استعمال ڪندي. هي ايپليڪيشنن کي لانچ ڪرڻ ۽ رام کي بچائڻ ۾ هڪ اهم تيز رفتار جي ڪري ٿي. اڳي، ايپ سي ڊي ايس استعمال ڪرڻ هڪ گھڻن قدمن وارو عمل هو جنهن ۾ لاڳاپيل طبقن جي هڪ فهرست ٺاهڻ ۽ انهي فهرست کي استعمال ڪندي هڪ آرڪائيو ٺاهڻ لاءِ استعمال ڪيو ويندو جيڪو ايندڙ رن لاءِ استعمال ڪيو ويندو. ھاڻي اھو سڀ گھربل آھي ايپليڪيشن جي ھڪڙي لانچ سان -XX: جھنڊو ArchiveClassesAtExitجڳھ کي ظاھر ڪري ٿو جتي آرڪائيو لکيو ويندو. هن طريقي سان، ڪلاس خودڪار طريقي سان هڪ آرڪائيو ۾ پيڪيج ٿيل آهن ايپليڪيشن کي عام طور تي بند ٿيڻ کان پوء.

JEP 351 ZGC : غير استعمال ٿيل ياداشت کي ختم ڪريو

هڪ سال اڳ، JDK 11 متعارف ڪرايو ZGC، هڪ تجرباتي، اسپيبلبل، گهٽ ويڪرائي وارو گند ڪچرو ڪليڪٽر. پهرين ۾، ZGC بلڪه عجيب طريقي سان ڪم ڪيو: اهو ميموري کي آپريٽنگ سسٽم ڏانهن موٽڻ جي اجازت نه ڏني وئي، جيتوڻيڪ اها ضرورت نه هئي. ڪجھ ماحولن لاءِ، جھڙوڪ ڪنٽينر، جتي وسيلا ھڪ ئي وقت گھڻن خدمتن پاران استعمال ڪيا ويندا آھن، اھو ٿي سگھي ٿو سسٽم جي اسپيبلٽي ۽ ڪارڪردگي کي محدود ڪري. ZGC هيپ تي مشتمل آهي نام نهاد ZPages. جڏهن ZPages کي ڪچرو گڏ ڪرڻ واري چڪر دوران صاف ڪيو وڃي ٿو، اهي ZPageCache ڏانهن واپس ڪيا ويندا آهن. هن ڪيش ۾ ZPages ترتيب ڏنل آهن ته اهي ڪيئن تازو استعمال ڪيا ويا. جاوا 13 ۾، ZGC اهي صفحا واپس ڪندو جن جي نشاندهي ڪئي وئي آهي ته آپريٽنگ سسٽم لاءِ گهڻي وقت کان استعمال نه ٿي رهيو آهي. هن طريقي سان انهن کي ٻين عملن لاء ٻيهر استعمال ڪري سگهجي ٿو.

JEP 353 ورثي ساکٽ API کي ٻيهر لاڳو ڪريو

ٻئي API تي عملدرآمد اڃا تائين JDK 1.0 java.net.Socketآهن . java.net.ServerSocketان ۾، ۽ سڀني بعد ۾ JDKs، انهن APIs جو عمل ڪيترن ئي ٽيڪنالاجي استعمال ڪري ٿو (جهڙوڪ I/O بفر جي طور تي ٿريڊ اسٽيڪ استعمال ڪندي) جيڪي انهن کي لچڪدار ۽ برقرار رکڻ ڏکيو بڻائي ٿو. هن مسئلي کي حل ڪرڻ لاء، JDK 13 ۾ هڪ نئون عمل مهيا ڪيو ويو NioSocketImpl. ان کي هاڻي اصلي ڪوڊ جي ضرورت ناهي، انهي کي آسان بڻائي ٿي مختلف پليٽ فارمن تي پورٽ ڪرڻ. هي طبقو موجوده بفر ڪيش ميڪانيزم کي پڻ استعمال ڪري ٿو (هن مقصد لاءِ ٿريڊ اسٽيڪ استعمال ڪرڻ کان پاسو ڪرڻ) ۽ java.util.concurrentهم وقت سازي جي طريقن جي بجاءِ لاڪ ڪرڻ. هي پروجيڪٽ لوم مان فائبر سان انضمام کي آسان بڻائي ڇڏيندو .

نئون APIs

اسان اڳ ۾ ذڪر ڪيو آهي ته جاوا 13 شامل آهن 76 نوان APIs بنيادي ڪلاس لائبريرين ۾. اهي هيٺيان علائقن کي ڍڪيندا آهن:
  • يونيڪوڊ سپورٽ اپڊيٽ.
  • ٽي نوان طريقا Stringٽيڪسٽ بلاڪ کي سپورٽ ڪرڻ لاءِ (ڏسو JEP 255 تفصيل مٿي).
  • ڪلاسز وٽ java.nioھاڻي مطلق آھي (جيئن نسبتي جي مخالفت) get۽ طريقا مقرر ڪريو. اهي، بنيادي خلاصي طبقي وانگر ، بفر جو حصو ٻيهر حاصل ڪرڻ لاء Bufferهڪ طريقو شامل آهن . slice()
  • force()ڪلاس جو طريقو MappedByteBufferبفر سيڪشن کي ان جي پٺڀرائي واري اسٽوريج تي لکڻ لاءِ مجبور ڪري ٿو.
  • nio.FileSystemnewFileSystem()فائل سسٽم جي طور تي فائل جي مواد تائين رسائي لاءِ ٽي نوان اوور لوڊ ٿيل فارم شامل ڪري ٿو .
  • هڪ نئون دلچسپ طريقو ظاهر ٿيو آهي javax.annotation.processing.ProcessingEnvironment. isPreviewEnabled(). اهو توهان کي ٻڌائيندو ته ڇا پريويو خاصيتون فعال آهن. اهو دلچسپ آهي ڇو ته مٿي ذڪر ڪيل تشريح @PreviewFeatureموجود نه هوندي جيستائين JDK 14 جاري نه ڪيو وڃي.
  • DocumentBuilderFactory۽ SAXParserFactoryحاصل ڪريو javax.xml.parsersٽي نوان طريقا namespace-aware instances ٺاهڻ لاءِ.
مواد سائمن رائٽر جي هڪ مضمون ۽ سرڪاري دستاويزن تي ٻڌل آهي .
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION