logo

حزم جافا

الحزم في Java هي آلية تقوم بتغليف مجموعة من الحزم الفرعية والواجهات للفئات. تستخدم الحزم من أجل:

  • منع تعارض الأسماء من خلال السماح للفصول الدراسية التي تحمل نفس الاسم بالتواجد في حزم مختلفة مثل College.staff.cse.Employee وcollege.staff.ee.Employee.
  • تسهيل تنظيم تحديد موقع واستخدام واجهات الفئات والمكونات الأخرى.
  • توفير وصول متحكم فيه للأعضاء المحميين الذين يمكن الوصول إليهم داخل نفس الحزمة ومن خلال الفئات الفرعية. لا يمكن الوصول إلى الأعضاء الافتراضيين (بدون محدد وصول) إلا داخل نفس الحزمة.

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



إنشاء حزم مخصصة

الخطوة 1: قم بإنشاء دليل نقوم فيه بإنشاء حزمنا وملفات Java.

برمجة مكدير

سلسلة إلى كائن json

الخطوة 2: الآن قم بتغيير الدليل وإنشاء مجلد آخر داخل المجلد الرئيسي



برمجة القرص المضغوط
برمجة جافا mkdir
برمجة جافا القرص المضغوط
صفائف مكدير

الخطوة 3: الآن قم بإنشاء ملف نصي فارغ واكتب كود Java أدناه ولا تنس حفظه بنفس اسم الفئة ذات ملحق .java (TwoPointers.java)

فئة توبوينترز.



Java
package JavaProgramming.arrays; // Main class present inside the package  public class TwoPointers {  public static void main(String[] args) {  System.out.println('Inside the package');  } } 


ملحوظة: ولا تنس إضافة اسم الحزمة داخل ملف البرنامج.

الخطوة 4: الآن قم بتشغيل البرنامج باستخدام مسار المجلد المحدد

javac srcJavaProgrammingarraysTwoPointers.java

java srcJavaProgrammingarraysTwoPointers.java

الإخراج:

OutputJavaPackages' title=تشغيل البرنامج مع مسار المجلد

هيكل المجلد:

هذا هو التمثيل المرئي لحزمة مخصصة في Java في الصورة أدناه. أولا نقوم بإنشاء مجلد اسمه Progamming ونقوم بداخله بإنشاء حزمة Javaprogramming ثم نقوم بإنشاء حزمة فرعية أخرى تسمى صفائف . ثم نقوم بإنشاء ملف فئة Java بداخله كما هو موضح في الصورة أدناه:

PackageInJava1' loading='lazy' title=هيكل المجلد

عمل حزم جافا

هيكل الدليل: ترتبط أسماء الحزم وهياكل الدليل ارتباطًا وثيقًا. على سبيل المثال، إذا كان اسم الحزمة هو College.staff.cse، فإن هناك ثلاثة أدلة هي موظفي الكلية وcse حيث يكون cse داخل الموظفين والموظفين داخل الكلية.

اتفاقيات التسمية : تتم كتابة أسماء الحزم بترتيب عكسي لأسماء النطاقات، على سبيل المثال. org.geeksforgeeks.practice. في الكلية قد يكون المؤتمر:

  • College.tech.cse
  • College.tech.ee
  • College.art.history

مثال:

سونو نيغام

import java.util.*;

هنا util عبارة عن حزمة فرعية تم إنشاؤها داخل حزمة Java.  

الوصول إلى الفصول الدراسية داخل الحزمة

في Java يمكننا استيراد الفئات من الحزمة باستخدام إحدى الطرق التالية:

1. استيراد فئة معينة :

import java.util.Vector;

يؤدي هذا إلى استيراد فئة Vector فقط من الحزمة java.util.

2. قم باستيراد كافة الفئات من الحزمة :

import java.util.*;

يؤدي هذا إلى استيراد كافة الفئات والواجهات من الحزمة java.util ولكنه لا يتضمن الحزم الفرعية.

مثال: استيراد فئة المتجهات

Java
import java.util.Vector; public class Geeks {    public Geeks() {    // java.util.Vector is imported We are able to access it directly in our code.  Vector v = new Vector();    java.util.ArrayList l = new java.util.ArrayList();  l.add(3);  l.add(5);  l.add(7);    System.out.println(l);  }  public static void main(String[] args) {      new Geeks();  } } 

الإخراج
[3 5 7] 

ملحوظة:

  • باستخدام حزمة الاستيراد.*; يستورد جميع الفئات الموجودة في الحزمة ولكن ليس الفئات من حزمها الفرعية.
  • عندما تحتوي حزمتان على فئات بنفس الاسم (على سبيل المثال، java.util.Date وmy.package.Date)، استخدم الاسم المؤهل بالكامل لتجنب التعارضات:

import java.util.Date;

import my.package.Date;

أنواع حزم جافا

  • الحزم المضمنة
  • الحزم المعرفة من قبل المستخدم

1. الحزم المدمجة

تتكون هذه الحزم من عدد كبير من الفئات التي تعد جزءًا من Java واجهة برمجة التطبيقات بعض الحزم المضمنة شائعة الاستخدام هي:

  • java.lang : يحتوي على فئات دعم اللغة (مثل الفئات التي تحدد عمليات الرياضيات لأنواع البيانات البدائية). يتم استيراد هذه الحزمة تلقائيًا.
  • جافا.io: يحتوي على فئات لدعم عمليات الإدخال / الإخراج.
  • java.util : يحتوي على فئات المرافق التي تنفذ هياكل البيانات مثل قاموس القائمة المرتبطة والدعم؛ لعمليات التاريخ/الوقت.
  • جافا.التطبيق الصغير: يحتوي على فئات لإنشاء التطبيقات الصغيرة.
  • جافا.aut: تحتوي على فئات لتنفيذ مكونات واجهات المستخدم الرسومية (مثل الزر والقوائم وما إلى ذلك). 6)
  • جافا.نت: تحتوي على فئات لدعم عمليات الشبكات.

2. الحزم المحددة من قبل المستخدم

هذه هي الحزم التي يحددها المستخدم.

1. إنشاء الحزمة:

أولاً نقوم بإنشاء دليل myPackage (يجب أن يكون الاسم هو نفس اسم الحزمة). ثم قم بإنشاء MyClass داخل الدليل بحيث تكون العبارة الأولى هي أسماء الحزم.

مثال:

عقدة القائمة في جافا
Java
package myPackage; public class MyClass {  public void getNames(String s)  {   System.out.println(s);   } } 


2. استخدم الفصل في البرنامج:

الآن سوف نستخدم ماي كلاس فئة في برنامجنا.

Java
 import myPackage.MyClass; public class Geeks {  public static void main(String args[]) {     // Initializing the String variable with a value   String s = 'GeeksforGeeks';    // Creating an instance of class MyClass in the package.  MyClass o = new MyClass();    o.getNames(s);  } } 


ملحوظة: يجب حفظ MyClass.java داخل دليل myPackage لأنه جزء من الحزمة.  

استيراد ثابت في جافا

يهدف الاستيراد الثابت في Java إلى تبسيط الوصول إلى الأعضاء الثابتين وفصله عن المناقشة الأوسع للحزم المعرفة من قبل المستخدم.

استيراد ثابت هي ميزة مقدمة في لغة برمجة Java (الإصدارات 5 وما فوق) تسمح للأعضاء (الحقول والأساليب) المحددة في الفصل على أنها عامة ثابت ليتم استخدامه في كود Java دون تحديد الفئة التي يتم تعريف الحقل فيها.

مثال:

Java
import static java.lang.System.*; class Geeks {  public static void main(String args[]) {    // We don't need to use 'System.out' as imported using static.  out.println('GeeksforGeeks');  } } 

الإخراج
GeeksforGeeks 

التعامل مع تعارضات الأسماء

عندما تحتوي حزمتان على فئة بنفس الاسم (على سبيل المثال، java.util.Date وjava.sql.Date)، حدد اسم الحزمة بالكامل لتجنب التعارضات.

import java.util.*;
استيراد java.sql.*;
// ثم استخدم فئة التاريخ، فسنحصل على خطأ في وقت الترجمة:
تاريخ اليوم ; // خطأ-- java.util.Date أو java.sql.Date؟

لن يتمكن المترجم من معرفة فئة التاريخ التي نريدها. يمكن حل هذه المشكلة باستخدام عبارة استيراد محددة:

import java.util.Date;
استيراد java.sql.*;

إذا كنا بحاجة إلى كلا فئتي التاريخ، فسنحتاج إلى استخدام اسم الحزمة الكامل في كل مرة نعلن فيها عن كائن جديد من تلك الفئة. على سبيل المثال:

java.util.Date deadLine = new java.util.Date();
java.sql.Date today = new java.sql.Date();

جافا النوم

هيكل الدليل وCLASSPATH

تتوافق أسماء الحزم مع بنية الدليل. على سبيل المثال، يتم تخزين فئة الدائرة في الحزمة com.zzz.project1.subproject2 على النحو التالي:

$BASE_DIR/com/zzz/project1/subproject2/Circle.class

  • هنا $BASE_DIR يمثل الدليل الأساسي للحزمة.
  • تتوافق "النقطة" الموجودة في اسم الحزمة مع دليل فرعي لنظام الملفات.
  • الدليل الأساسي ( $BASE_DIR ) يمكن أن يكون موجودا في أي مكان في نظام الملفات.
  • ومن ثم يجب إعلام مترجم Java ووقت التشغيل بموقع $BASE_DIR لتحديد موقع الفئات.
  • يتم إنجازه بواسطة متغير بيئة يسمى كلاس باث .
  • يشبه CLASSPATH متغير بيئة آخر PATH والذي تستخدمه واجهة الأوامر للبحث عن البرامج القابلة للتنفيذ.

إعداد مسار الفصل

يمكن تعيين CLASSPATH بأي من الطرق التالية:

  • يمكن تعيين CLASSPATH بشكل دائم في البيئة بالخطوات الموجودة في Windows

انتقل إلى لوحة التحكم -> النظام -> خيارات متقدمة -> متغيرات البيئة.

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

.c:javaprojectclasses;d:tomcatlibservlet-api.jar

  • النقطة (.) يمثل دليل العمل الحالي.
  • للتحقق من الإعداد الحالي لـ CLASSPATH، قم بإصدار الأمر التالي:

> تعيين مسار الفصل الدراسي

يمكن تعيين CLASSPATH مؤقتًا لجلسة CMD Shell المحددة عن طريق إصدار الأمر التالي:

> تعيين CLASSPATH=.;c:javaprojectclasses;d:tomcatlibservlet-api.jar

بدلاً من استخدام متغير البيئة CLASSPATH، يمكنك أيضًا استخدام خيار سطر الأوامر -classpath أو -cp لأوامر javac وjava على سبيل المثال

> جافا –classpath ج:javaprojectclasses com.abc.project1.subproject2.MyClass3

رسم توضيحي للحزم المعرفة من قبل المستخدم:  إنشاء الحزمة الأولى لدينا: اسم الملف - ClassOne.java

Java
package package_name; public class ClassOne {  public void methodClassOne()  {  System.out.println('Hello there its ClassOne');  } } 

إنشاء الحزمة الثانية لدينا: اسم الملف - ClassTwo.java

Java
package package_one; public class ClassTwo {  public void methodClassTwo()  {  System.out.println('Hello there i am ClassTwo');  } } 

الاستفادة من الحزمتين اللتين تم إنشاؤهما: اسم الملف – Testing.java

Java
import package_name.ClassOne; import package_one.ClassTwo; public class Testing {  public static void main(String[] args)  {  ClassTwo a = new ClassTwo();  ClassOne b = new ClassOne();  a.methodClassTwo();  b.methodClassOne();  } } 

الآن ألق نظرة على بنية الدليل لكل من الحزم وملف فئة الاختبار:

هيكل الدليل' loading='lazy' title=

معدّلات الوصول في سياق الحزم

  • عام: الأعضاء معpublicيمكن الوصول إلى المعدل من أي مكان بغض النظر عما إذا كانت فئة الوصول موجودة في نفس الحزمة أم لا .
  • محمي: يمكن الوصول إلى الأعضاء ذوي المعدل المحمي ضمن نفس الحزمة في الفئات الفرعية
  • تقصير: لا يمكن الوصول إلى الأعضاء الذين ليس لديهم أي مُعدِّل إلا داخل نفس الحزمة
  • خاص: الأعضاء معprivateلا يمكن الوصول إلى المعدل إلا داخل نفس الفئة. لا يمكن الوصول إليها عن طريق الفئات الموجودة في نفس الفئات الفرعية للحزمة أو الحزم المختلفة.