Java 9 - كل ما تحتاج لمعرفته حول ميزات Java الجديدة

نشرت: 2018-04-24

جافا ، لغة البرمجة التي يسهل الوصول إليها بشكل كبير ، كانت سهلة بالنسبة للمطورين في جميع أنحاء العالم. منذ إنشائها في عام 1995 ، شهدت اللغة استخدامًا واسعًا في مختلف الصناعات.

اليوم ، ستجد Java على هواتفك. تشغيل نظام التشغيل Android ومجموعة التطبيقات التي لا تعد ولا تحصى التي يقدمها Android. يتم استخدامه لتطوير ألعاب مثل Minecraft التي لديها قاعدة ضخمة للاعبين. يجد أيضًا استخدامه في تطبيقات الأعمال مثل قراءة معلومات بطاقة الائتمان في حراثة المتجر وتغذية المعلومات بين الأنظمة والبنوك.

بعد فجوة استمرت 3 سنوات ، طرحت Java نسختها الجديدة - Java SE 9. مع العديد من التغييرات الهيكلية الرئيسية والميزات الإضافية ، تقدم Java SE 9 حلاً قويًا كان المطورون يتوقون إليه.

أضاف Java 7 تجربة الموارد في عام 2011 ، مما يوفر وظائف أفضل لإدارة الموارد.
أضافت Java 8 تعبيرات lambda ، وهي حركة جيدة ولكنها معيبة قليلاً في ظل نموذج OOP.

الآن تسمح Java Solutions للمبرمجين بالحصول على طرق خاصة. طرق ثابتة خاصة! نعم ، لقد قرأت ذلك بشكل صحيح!

قدمت Java SE 8 العديد من التغييرات الهيكلية التي استقبلها المطورون بمشاعر مختلطة. بشكل رئيسي ، هذه هي أوجه القصور في Java SE 8 التي حاولت Java SE 9 التغلب عليها:

  1. لم يكن JDK قابلاً للملاحة لجهاز الحوسبة الصغيرة
  2. لم يكن هناك تحسن شامل في أداء التطبيق
  3. لم يكن هناك أمان شامل وصيانة JDK
  4. واجه مطورو Java صعوبة في بناء ودعم مكتبات الرموز والتطبيقات الأكبر حجمًا

لذلك ، دعونا نلقي نظرة على التغييرات والتحسينات الرئيسية التي تقدمها Java 9 على سابقاتها

تحديثات API العملية في Java 9

تقليديا ، كانت واجهة برمجة تطبيقات Java بدائية بطبيعتها. هذا الدعم لإطلاق عمليات جديدة ، وإعادة توجيه الإخراج وتدفقات الخطأ. في Java 9 ، تم تمكين التحديثات الجديدة لـ Process API:

  1. الحصول على PID للعملية الحالية وأي عملية JVM أخرى
  2. إدارة العمليات الفرعية
  3. إدارة العمليات الفرعية
  4. احصل على معلومات مثل PID والاسم واستخدام الموارد للعمليات الجارية في النظام.

هذا نموذج من التعليمات البرمجية ، والذي يقوم بطباعة معرف المنتج الحالي بالإضافة إلى معلومات العملية الحالية:

public class NewFeatures
{
public static void main(String [] args)
{
ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("PID:"+ currentProcess.getPid());
ProcessHandle.Info currentProcessInfo = currentProcess.info();
System.out.println("Info:" + currentProcessInfo);
}
}

عميل HTTP / 2 في Java 9

من المتوقع أن يتم إصلاح هذه الميزة في الإصدارات اللاحقة أو قد يتم إزالتها بالكامل.
في السابق ، كان المطورون يعتمدون على مكتبات الطرف الثالث ، في اختبارات Apache HTTP و Jersey وغيرها الكثير. تسبق واجهة برمجة تطبيقات HTTP الخاصة بـ Java مواصفات HTTP / 1.1 وهي متزامنة ويصعب صيانتها. دعت هذه القيود إلى الحاجة إلى إضافة واجهة برمجة تطبيقات جديدة. توفر واجهة برمجة تطبيقات عميل HTTP الجديدة ما يلي:

  1. واجهة برمجة تطبيقات بسيطة وموجزة للتعامل مع معظم طلبات HTTP
  2. دعم مواصفات HTTP / 2
  3. أداء أفضل
  4. أمن أفضل
  5. عدد قليل من التحسينات

فيما يلي مقتطف رمز لإنشاء طلب HTTP GET باستخدام واجهات برمجة التطبيقات الجديدة. هذه هي الوحدة النمطية على النحو المحدد في وحدة الملف info-info.java:

module newfeatures{
requires jdk.incubator.httpclient;
}

يستخدم الكود التالي واجهة برمجة تطبيقات عميل HTTP. هذا جزء من الوحدة النمطية jdk.incubator.httpclient :

import jdk.incubator.http.*;
import java.net.URI;
public class Http2Feature{
public static void main(String[] args) throws Exception{
HttpClient client = HttpClient.newBuilder().build();
HttpRequest request = HttpRequest
.newBuilder(new URI(http://httpbin.org/get;))
.GET()
.version(HttpClient.Version.HTTP_1_1)
.build();
HttpResponse.String response = client.send(request,
HttpResponse.BodyHandler.asString());
System.out.println("Status code:" + response.statusCode());
System.out.println("Response Body:" + response.body());
}
}
}

ميزة المزيد من تحديثات التزامن في Java 9

باستخدام Java 9 ، تم تقديم فئة جديدة تسمى - java.util.concurrent.Flow ، والتي تدعم تنفيذ إطار عمل النشر والاشتراك. يتيح هذا الإطار للمطورين بناء المكونات. يمكن أن تستهلك هذه المكونات دفقًا مباشرًا للبيانات بشكل غير متزامن من خلال إعداد الناشرين الذين ينتجون البيانات والمشتركين الذين يستهلكون البيانات. هذه هي الواجهات الجديدة:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (الذي يعمل كناشر ومشترك).

Java Shell Scripting (Read-Eval-Print-Loop) في Java 9

كان الهدف من Project Kulla هو التحقق من إضافة أداة REPL (Read-Eval-Print-Loop) إلى Java 9. يتميز هذا الإصدار من Java بأداة سطر أوامر خاصة تسمى JShell. الهدف هنا هو تعميم وتعظيم استخدام REPL. فماذا يعني ذلك؟ الآن ، لا تحتاج إلى التفاف بضعة أسطر من التعليمات البرمجية بطريقة منفصلة لتشغيلها. فعال؟ أقول نعم.
على سبيل المثال ، في Scala ، تتم كتابة برنامج Hello World بسيط كـ scala> println (“Hello World”) ؛
لنقم بتشغيل الأمر JShell ، كما هو موضح في الصورة التالية:

لغة البرمجة جافا 9

مشروع Jigsaw في Java 9

البطاقة الرابحة للميزات الجديدة في Java 9 هي نظام aall-newmodule. غالبًا ما يتضمن إنشاء أنظمة معقدة رموزًا معقدة عالية المستوى تؤدي إلى الغموض. مع تعقيد الكود ، تواجه مشكلتان أساسيتان: يصعب تغليف الكود ، ولا توجد فكرة عن التبعيات الصريحة بين ملفات JAR المختلفة للنظام. يمكن الوصول إلى كل فصل عام من قبل أي فصل عام آخر في مسار الفصل. يؤدي هذا إلى استخدام غير ضروري للفئات التي لم يُقصد بها أن تكون واجهة برمجة تطبيقات عامة. علاوة على ذلك ، فإن classpath نفسه يمثل مشكلة: كيف تعرف ما إذا كانت جميع JARs المطلوبة موجودة ، وماذا عن الإدخالات المكررة؟ نظام الوحدة النمطية يحل كلتا المشكلتين.
هذا هو المكان الذي تظهر فيه الطبيعة القوية لـ Java 9. تحتوي ملفات JAR المعيارية على واصف وحدة إضافية. في واصف الوحدة النمطية هذه ، تُستخدم عبارات "تتطلب" للتعبير عن التبعيات على الوحدات النمطية الأخرى. بالإضافة إلى ذلك ، تتحكم عبارات "الصادرات" في الحزم التي يمكن الوصول إليها من خلال وحدات مختلفة. بشكل افتراضي ، يتم تغليف كل الحزم غير المُصدرة في الوحدة النمطية.

هناك العديد من JEPs ، والتي تشكل جزءًا من هذا المشروع ، على النحو التالي:

JEP 200 - JDK المعياري: يطبق هذا نظام وحدة منصة Java لتكوين وحدات JDK التي يمكن دمجها في وقت الترجمة أو وقت الإنشاء أو وقت التشغيل.
JEP 201 - شفرة مصدر معيارية: تُستخدم لإنشاء وحدات وتسمح لأدوات البناء بتجميع الوحدات التي تم إنشاؤها
JEP 220 - صور وقت التشغيل المعيارية: تعمل JEP على تحسين الأداء والأمان وقابلية الصيانة من خلال إعادة هيكلة صور وقت تشغيل JDK و JRE لاستيعاب الوحدات النمطية
JEP 282 - Jlink ، المعروف باسم Java linker: يستخدم كوحدات تجميع وتبعيات في أوقات تشغيل أقل.

ملفات JAR متعددة الإصدارات

للاستفادة من الميزات الجديدة لمنصة Java في الإصدارات الأحدث ، يجب على مطوري المكتبة إصدار إصدار أحدث من مكتبتهم. قريباً ، سيكون هناك إصدارات متعددة من المكتبة يتم صيانتها من قبل المطورين ، والتي يمكن أن تكون كارثية. للتغلب على هذا القيد ، يتميز Java 9 بإصدارات متعددة من ملفات JAR مما يسمح للمطورين بإنشاء ملفات JAR بإصدارات مختلفة من ملفات الفئات لإصدارات Java مختلفة. الق نظرة على هذا المثال.

رسم توضيحي لملفات JAR الحالية على النحو التالي:

جذر الجرة
- صف
- فئة ب
- فئة C.

إليك كيف تبدو ملفات JAR متعددة الإصدارات:

جذر الجرة

- صف
- فئة ب
- فئة C.
- معلومات التعريف الفوقية
- الإصدارات
- - 9
- - - - صف
- - 10
- - - - فئة ب

في الرسم التوضيحي السابق ، دعمت ملفات JAR ملفات الفئات لإصداري Java 9 و 10. لذلك ، عند تنفيذ JAR على الإصدار 9 من Java ، يتم اختيار فئة A. ضمن الإصدارات - 9 مجلدات للتنفيذ.

الإصدارات السابقة من Java التي لا تدعم ملفات JAR متعددة الإصدارات ، لا يتم استخدام الفئات الموجودة ضمن دليل الإصدارات أبدًا. لذلك ، إذا قمت بتشغيل ملف JAR متعدد الإصدارات على Java 8 ، فسيكون ذلك جيدًا مثل تشغيل ملف JAR بسيط.

في رأيي ، بدأت الأمور تتغير مع Java. وهذا اتجاه متزايد. هل هذا يعني أن شعبية جافا وكيفية استخدامها سوف تتأثر؟ مُطْلَقاً. كانت Java ولا تزال لغة برمجة قوية وقوية بشكل لا يصدق في صناعة التكنولوجيا اليوم. ابدأ في تعلم Java وشاهدها تحدث فرقًا في حياتك المهنية. حظا طيبا وفقك الله!

مفكرة:
هذه المقالة التقنية ساهمت بها شركة Sumit التي تعمل على تقنيات رائجة مثل DevOps و Big Data و Python. وفي فريق التسويق الرقمي في Edureka.