لقد كتبنا بعض برامج جافا. تم حفظ كل برنامج Java سابق كملف، مثل Test.java. وبعد ذلك، يتم تصنيف البرنامج إلى Test.class. انتهى بنا الأمر باستخدام $java Test لتشغيل البرنامج.
ومع ذلك، في مشروع Java عادي، غالبًا ما نحتاج إلى كتابة أكثر من برنامج .java، ويتضمن منتج Java النهائي جميع برامج Java. لذلك، تحتاج Java إلى حل مشكلة تنظيم برامج Java. الغرض من الحزمة هو تنظيم برامج Java بشكل أفضل.
إنشاء الحزمة
إنشاء الحزمة بسيط للغاية. نحتاج فقط إلى إضافة الحزمة في بداية برنامج Java. لنأخذ الطبقة البشرية كمثال ونضعها في الحزمة:
انسخ رمز الكود كما يلي:
package com.vamei.society;
الطبقة العامة الإنسان
{
/**
* منشئ
*/
الإنسان العام (كثافة العمليات ح)
{
this.height = h;
System.out.println("لقد ولدت");
}
/**
*الملحقات
*/
كثافة العمليات العامة getHeight()
{
إرجاع هذا الارتفاع؛
}
/**
* متحور
*/
نمو الفراغ العام (int h)
{
this.height = this.height + h;
}
ارتفاع كثافة العمليات الخاصة؛
}
رمز نسخ السطر الأول من البيانات أعلاه هو كما يلي:
package com.vamei.society;
يشير إلى أن البرنامج موجود في حزمة com.vamei.society. يمثل com.vamei (عكس vamei.com) اسم المجال لمؤلف الحزمة (لسوء الحظ، تم تسجيل اسم المجال هذا من قبل شخص آخر، لذلك يتم استخدامه فقط لأغراض العرض التوضيحي). تتطلب Java أن تحتوي الحزم على بادئات اسم المجال للتمييز بين المؤلفين المختلفين. المجتمع هو اسم مسار محلي آخر. com.vamei.society معًا يشكلان اسم الحزمة.
توفر الحزم مساحة اسم لبرامج Java. يتكون المسار الكامل لفئة Java من الحزمة الخاصة بها واسم الفئة، مثل com.vamei.society.Human. يجب وضع برنامج Human.java المقابل ضمن com/vamei/society/. يتم تحديد الفئات من خلال مساراتها الكاملة، بحيث يمكنك الحصول على فئات بنفس الاسم في حزم مختلفة دون الخلط بين Java. على سبيل المثال، com.vamei.society.Human وcom.vamei.creature.Human هما فئتان مختلفتان.
دعونا نلقي نظرة على مزيد من التفاصيل. الفئة البشرية عامة، ومنشئها عام أيضًا، لذا يمكن لأي كائن آخر استدعاء هذه الفئة. كما قلنا من قبل، يمكن أن يكون هناك فئة عامة واحدة فقط في ملف Java، ويجب أن يكون للفئة نفس اسم ملف .java. لا يحتاج الفصل إلى الكلمة الأساسية العامة، والتي تمثل في الواقع إذنًا: الفصل مرئي في الحزمة التي يوجد بها. أي أن برامج Java الأخرى الموجودة في الحزمة يمكنها الوصول إلى الفصل. هذا هو الوصول الافتراضي في Java.
وبالمثل، يمكن أن يكون لأعضاء الكائن أيضًا أذونات افتراضية (مرئية في الحزم). على سبيل المثال، نقوم بإزالة الكلمة الأساسية العامة أمام طريقة getHeight().
مكالمة الحزمة
نحتاج فقط إلى وضع Human.class الذي تم تجميعه بواسطة Human.java في المجلد المقابل. على سبيل المثال، قمت بوضع Human.class في com/vamei/society/. في الواقع، يمكنك أيضًا وضع ملف .java في المسار المقابل، وسيتم تجميع Java تلقائيًا عند استخدامه.
إذا كانت الحزمة بأكملها (أي مجلد com) موجودة في مسار العمل الحالي، فلن تكون هناك حاجة إلى إعدادات خاصة لاستخدام الحزمة، مثل TestAgain.java التالي:
انسخ رمز الكود كما يلي:
import com.vamei.society.*;
اختبار الطبقة العامة مرة أخرى
{
الفراغ العام الثابت الرئيسي (String[] args)
{
الإنسان aPerson = الإنسان الجديد (180)؛
System.out.println(aPerson.getHeight());
}
}
يتم استخدام الاستيراد لتحديد المسارات. باستخدام عبارة الاستيراد، يمكننا تقديم الفئات ضمن المسار المقابل. * يشير إلى إدخال جميع الفئات في مجلد المجتمع. في TestAgain، نستخدم الفئة Human مباشرة.
يمكننا أيضًا توفير المسار الكامل للفصل. يمكن أن يميز هذا بين الفئات التي لها نفس الاسم ولكن بمسارات مختلفة، مثل:
انسخ رمز الكود كما يلي:
اختبار الطبقة العامة مرة أخرى
{
الفراغ العام الثابت الرئيسي (String[] args)
{
com.vamei.society.Human aPerson =
جديد com.vamei.society.Human(180);
System.out.println(aPerson.getHeight());
}
}
وبما أننا نقدم مسار الفصل الكامل، ليست هناك حاجة لاستخدام عبارة الاستيراد.
إذا لم يتم وضع الحزمة في مسار العمل الحالي، فسنحتاج إلى إخطار Java عند استخدام الحزمة. على سبيل المثال، وضعنا الحزمة في /home/vamei/javapackage، بحيث يقع Human.class في /home/vamei/javapackage/com/vamei/society/Human.class، ومسار العمل لدينا هو /home/vamei. بهذه الطريقة، لا يمكن العثور على الحزمة. تتمثل إحدى الطرق في استخدام -classpath لتحديد مسار المجلد حيث توجد الحزمة عند استخدام javac وjava، على سبيل المثال:
انسخ رمز الكود كما يلي:
$javac -classpath /home/vamei/javapackage: TestAgain.java
$java -classpath /home/vamei/javapackage:
ما عليك سوى البحث عن الحزمة من /home/vamei/javapackage ومسار العمل (.). يمكن لـ Java العثور على فئة Human من /home/vamei/javapackage وفئة TestAgain من .
بالإضافة إلى ذلك، يمكنك أيضًا تعيين متغير بيئة CLASSPATH الخاص بالنظام وإضافة المسار أعلاه إلى المتغير دون كتابة خيار -classpath في كل مرة.
الآليات المشابهة للحزم شائعة أيضًا في لغات أخرى، مثل آلية الاستيراد في بايثون. إنهم جميعًا يدورون حول تنظيم واستخدام البرامج الحالية بشكل أفضل. باستخدام الحزم، يمكننا بسهولة توسيع برامج Java واستخدام مكتبات برامج Java الموجودة. لاحظ أن الحزمة تدير ملفات .class. تُعرف Java باسم "الترجمة مرة واحدة، والتشغيل في أي مكان" (الترجمة مرة واحدة، والتشغيل في أي مكان). يمكن تشغيل ملفات .class على أي نظام أساسي مزود بجهاز Java Virtual Machine (JVM، Java Virtual Machine)، مما يساعدنا في التغلب على صعوبات نقل البرامج الناتجة عن اختلافات النظام.
يمكن أن تكون الاختلافات بين الأنظمة كبيرة جدًا. إذا كتبنا برنامجًا بلغة C، فيجب إعادة ترجمة البرنامج المصدر على كل منصة للتكيف مع ظروف الأجهزة المختلفة. تربط آلة Java الافتراضية النظام الأساسي وعالم Java، وتشكل الطبقة الوسطى بين الأجهزة ومنطق البرمجة. يخفي JVM اختلافات الأجهزة ويوفر للمبرمجين عالم Java "قياسي". يمكن اعتبار ملف .class بمثابة العملة المتداولة في عالم Java هذا. بفضل البنية التحتية لـ JVM ومساعدة إدارة الحزم، تحقق برامج Java قابلية نقل جيدة.
تلخيص
حزمة، استيراد
الأذونات الافتراضية: مرئية في الحزمة
-classpath، CLASSPATH