تستخدم الرزم / الحزم packages لتنظيم وحماية برامج الجافا حيث يتم تقسيم الاصناف المتعلقة ببعضها في حزم. نستطيع ان نتخيل الرزم وكأنها مثل المجلدات folders في نظم التشغيل. فمثلا ننشأ مجلد لتخزين الافلام و مجلد اخر لتخزين الالعاب. وقد نقسم مجلد الافلام الى مجموعة من المجلدات على حسب التصنيف.
اذا اردنا ان ننشأ حزمة (package) متكونة من 3 مراحل (تصنيفات تحت بعضها) سيكون اسمها مثلا com.arabituts.example وبداخلها صنف اسمه Main.java.
يتم تمثيل الرزم في نظم التشغيل بمجموعة من المجلدات داخل بعضهاعلى حسب الحاجة الى التقسيم. اسم الرزمة هو اسم المجلدات (folders) ويفصل ما بين كل مرحلة وبعضها بالنقطة ".".
يتم تسمية مراحل المجلد عكس تسمية الروابط (URL): فنبدأ ب com ثم اسم الشركة arabituts ثم التقسيم الداخلي
يوجد نوعين من الحزم في الجافا:
- رزم معرفة مسبقا (predefined packages): وهي مجموعة من الرزم تحتوي على اصناف (classes) و واجهات (interfaces) موجودة في الجافا مسبقا واشهرها: java.util و java.io و java.lang
- رزم يعرفها المستخدم (User Defined Packages): وهي الرزم التي نقوم بتعريفها اثناء كتابة البرامج ونجمع فيها الاصناف و الواجهات التي نعرفها.
package
عند تعريف صنف جديد اذا اردنا ان نضعه في رزمة، يجب ان يكون او شئ في ملف الكود (source file) هو اسم ال package ويجب ان تتوافق مع تقسيمة المجلدات فمثلا عند تعريف الصنف Main كما بالمثال بالاعلى يكون كالاتي:
package com.arabituts.example; class Main{ public static void main(String[] args){ } }
import
لكي نستطيع استخدام اصناف من رزم (packages) اخرى، نحتاج الى ان نشير اسمها كاملا او نعتبره عنوانها، مثلا اذا اردنا ان نستخدم الصنف Main في صنف اخر سوف نقوم باستخدامه كالاتي :
com.arabituts.example.Main main = new com.arabituts.example.Main();
بالطبع سنضطر الى كتابة الاسم كاملا وهذا سيجعل الكود غير مقروء جيدا، تتيح لنا الجافا كلمة استورد (import) و هي احد الكلمات الخاصة (keywords) في الجافا، ونستطيع بواسطتها ان نستورد صنف (class) او رزمة (package).
استيراد الصنف (importing class): نستطيع ان نستورد صنف (class) او واجهة (interface) بعينه من احد الرزم.
استيراد الرزمة (importing package): نستطيع ان نستورد كل الاصناف او الواجهات بداخل رزمة معينة ونستخدما عند استخدام اكثر من صنف في نفس الرزمة
import java.util.*; // و غيرها Date & Random الرزمة تحتوي على import java.lang.Math; class Main { public static void main(String[] args) { Random rand = new Random(); // صنف يستخدم لانشاء ارقام عشوائية double randNumber = rand.nextDouble(); // ينتج رقم عشوائي عشري System.out.println(randNumber); System.out.println(Math.round(randNumber));// نستخد احد طرق الصنف وهي تقوم بالعملية الحسابية => التقريب Date currentDate = new Date(); System.out.println(currentDate); } }
في المثال السابق استطعنا ان نستورد (import) مجموعة من الرزم و الاصناف المعرفة مسبقا في الجافا.