Menu
flag Ar iconالعربيةdown icon

ما هي جافا؟ اللغة و JVM وأين تعمل

ما هي جافا فعليًا، وكيف تتيح آلة JVM لبرنامج واحد مُصرَّف أن يعمل في أي مكان، وأنواع البرمجيات التي تُبنى بجافا.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

جافا في جملة واحدة

جافا لغة برمجة كائنية التوجه ذات أنواع ساكنة، تُصرَّف إلى bytecode وتعمل على آلة جافا الافتراضية (JVM). هذا الخيار التصميمي الواحد -التصريف إلى صيغة وسيطة محايدة ثم تشغيلها على آلة افتراضية- هو السبب في أن برنامج جافا المُصرَّف نفسه يعمل دون تغيير على Windows و macOS و Linux وما بعدها.

وها هو البرنامج الأول الذي لا غنى عنه. يمكنك تشغيله هنا مباشرة:

هناك من المراسم الشكلية هنا أكثر مما في لغة برمجة نصية، وذلك عن قصد؛ فجافا تفضّل البنية الصريحة. سنفكّك كل جزء من هذا على مدى الصفحات القليلة القادمة.

لماذا تهمّ JVM

تحوّل معظم اللغات المُصرَّفة الشفرة المصدرية مباشرةً إلى شفرة آلة لمعالج ونظام تشغيل محدَّدين. البرنامج المُصرَّف لـ Windows لن يعمل على جهاز Mac. أما جافا فتسلك طريقًا غير مباشر:

  1. يُصرّف javac مصدرك .java إلى ملفات .class تحتوي على bytecode -تعليمات لآلة متخيَّلة، لا لأي معالج حقيقي.
  2. تقرأ JVM الخاصة بمنصّتك ذلك الـ bytecode وتنفّذه، مترجِمةً إياه إلى تعليمات آلة أصلية أثناء تقدّمها.

ولأن لكل منصّة JVM خاصة بها، لكنها جميعًا تفهم الـ bytecode نفسه، فإنك تُصرّف مرة واحدة وتُشغّل النتيجة في أي مكان توجد فيه JVM. هذا هو الشعار الشهير: اكتب مرة واحدة، شغّل في أي مكان.

لا تكتفي JVM بالتفسير الأعمى. إذ يراقب مُصرِّف اللحظي (JIT) أيَّ الشفرات تعمل أكثر، ثم يُصرّف تلك المسارات الساخنة إلى شفرة أصلية مُحسَّنة، بحيث تقترب برامج جافا طويلة التشغيل من سرعة اللغات المُصرَّفة بالكامل.

ذات أنواع ساكنة وكائنية التوجه

تُشكّل خاصيّتان مظهر شفرة جافا وإحساسها.

الأنواع الساكنة تعني أن لكل متغيّر نوعًا معروفًا في وقت التصريف، وأن المُصرِّف يفحص أنواعك حتى قبل أن يعمل البرنامج:

يبقى count من النوع int إلى الأبد؛ وإسناد "hello" إليه لن يُصرَّف. هذا يلتقط فئة كاملة من الأخطاء مبكرًا، مقابل كتابة أكثر في البداية.

كائنية التوجه تعني أن جافا تنظّم الشفرة في أصناف (classes) -مخططات تجمع البيانات والدوال (methods) التي تعمل عليها. حتى نقطة الدخول أعلاه تعيش داخل class Main. وكل شيء تقريبًا تكتبه في جافا يعيش داخل صنف.

فيمَ تُستخدم جافا

جافا واحدة من أكثر اللغات انتشارًا في العالم. ستجدها في:

  • الأنظمة الخلفية وأنظمة المؤسسات -المصارف والتأمين وخدمات الويب الكبرى وكل ما يحتاج إلى العمل بموثوقية لسنوات.
  • أندرويد -اللغة الأصلية للمنصّة، وما زالت محورية في بيئة تشغيل أندرويد حتى إلى جانب Kotlin.
  • البيانات الضخمة -يعمل Hadoop و Spark و Kafka وجزء كبير من منظومة هندسة البيانات على JVM.
  • سطح المكتب والأنظمة المضمَّنة -من بيئات التطوير (IntelliJ و Eclipse) إلى أجهزة نقاط البيع والبطاقات الذكية.

سمعتها قائمة على الاستقرار والتوافق مع الإصدارات السابقة ومكتبة قياسية هائلة، أكثر من كونها أكثر اللغات إيجازًا. والشفرة التي كُتبت لجافا قبل سنوات لا تزال تعمل اليوم في الغالب.

جافا ليست جافاسكريبت

يجدر قول هذا صراحةً لأن الاسمين يسبّبان لبسًا لا ينتهي: جافا وجافاسكريبت لغتان مختلفتان لا صلة بينهما. تتشاركان أربعة أحرف لأسباب تسويقية تاريخية ولا شيء آخر ذا أهمية. جافا مُصرَّفة وذات أنواع ساكنة وتعمل على JVM؛ وجافاسكريبت ذات أنواع ديناميكية وتعمل في المتصفحات وفي Node.js. تعلُّم إحداهما لا يُكسبك الأخرى.

التالي: تثبيت جافا

لتكتب جافا وتُشغّلها على جهازك الخاص تحتاج إلى JDK (مجموعة تطوير جافا) -المُصرِّف إلى جانب JVM إلى جانب المكتبة القياسية. تشرح الصفحة التالية خطوة بخطوة كيفية تثبيتها والتأكد من أنها تعمل.

الأسئلة الشائعة

فيمَ تُستخدم جافا؟

تُشغّل جافا أنظمة خوادم ومؤسسات ضخمة، وتطبيقات أندرويد (عبر Android SDK وبيئة التشغيل المشتركة مع Kotlin)، وأدوات البيانات الضخمة مثل Hadoop و Spark، وعددًا لا يُحصى من تطبيقات سطح المكتب والأنظمة المضمَّنة. نقاط قوتها هي الاستقرار، ومكتبة قياسية هائلة، و JVM التي تُشغّل البرنامج المُصرَّف نفسه على أي نظام تشغيل.

هل جافا لغة مُصرَّفة أم مُفسَّرة؟

كلاهما. يحوّل مُصرِّف جافا (javac) شفرتك المصدرية إلى bytecode مستقل عن المنصة، ثم تُشغّل JVM هذا الـ bytecode: تُفسّره في البداية، ثم تُصرّف المسارات الأكثر استخدامًا إلى شفرة آلة أصلية باستخدام مُصرِّف اللحظي (JIT). إذن جافا تُصرَّف إلى bytecode، ثم تُفسَّر وتُصرَّف عبر JIT في وقت التشغيل.

هل جافا هي نفسها جافاسكريبت؟

لا؛ فهما لغتان لا صلة بينهما تتشاركان الاسم لأسباب تسويقية تاريخية. جافا لغة مُصرَّفة ذات أنواع ساكنة تعمل على JVM؛ أما جافاسكريبت فلغة ذات أنواع ديناميكية تعمل في المتصفحات وفي Node.js. معرفة إحداهما لا تعني معرفة الأخرى.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن