תוכנית לדוגמה
כעת נתבונן בתוכנית פשוטה המשלבת כל זאת יחד.
הערה: להלן חלק מטקסט של הודעה שנתקבלה מקורא בתאריך 19/3/98. ======================= הרשה לי להציג את עצמי. שמי ז'אן-מארק טיסראנד.
ברצוני להודיע לך שנתקלתי בבעיה בזמן הרצת הדוגמה המופיעה בשיעור חבילות עם jdk v1.1.5. אינני מצליח להריץ את Package00. ההרצה נכשלה יחד עם ההודעה הבאה: Package00 class was not found
הקדשתי זמן רב לקריאת השיעור שוב, אך זה לא עזר.
לאחר זמן, גיליתי את השורות הבאות בתיעוד הנלווה של jdk v.1.1.5:
באג במפענח של Java - בגירסאות קודמות של 1.1 JDK, המפענח של Java התיר להפעיל את קובץ המחלקה, הנמצא ב‑/a/b/c.class, מתוך הספרייה /a/b באמצעות הפקודה "java c",
לכן, על מנת להריץ את Package00, הפקודה תהיה: java Combined.Java.Package00
את הפקודה הנ"ל יש להכניס כאשר הספרייה הנוכחית נמצאת רמה אחת מעל הספרייה Combined
הפקודה עובדת היטב תחת Win95 עם jdk v1.1.5 וגם במערכת Digital Unix עם jdk v1.1.5 ===================== |
האפליקציה מורכבת משלושה קבצי קוד source נפרדים, אשר ממוקמים בשלוש חבילות נפרדות. יחד הם ממחישים את השימוש בחבילות ובציוני import, עם תוכנית javac,
כדי לבנות אפליקציית Java עצמאית, המורכבת ממחלקות הנמצאות בשלוש חבילות שונות.
(אם ברצונך להיווכח שהן אכן נמצאות בחבילות שונות, הפוֹך אחת מהמחלקות, שאליה פונה המחלקה השולטת, ל‑non-public, ונסה להדר את התוכנית.)
במילים אחרות, בתוכנית זו אנו יוצרים מבנה היררכיית חבילות משלנו, ומאכלסים אותה באוסף של קבצי מחלקות אשר משתפים ביניהם פעולה.
המחלקה השולטת Package00 מאוחסנת בחבילה Combined.Java.
המחלקה Package01 מאוחסנת בחבילה Combined.Java.p1.
המחלקה Package02 מאוחסנת בחבילה Combined.Java.p2.
הקוד במתודת ()main של המחלקה השולטת יוצר אובייקטים של שתי המחלקות האחרות,
הנמצאות בחבילות אחרות. הקוד בבנאים של שתי מחלקות אלו מכריז על כך שהאובייקטים נבנים.
שתי המחלקות שאנו יוצרים הן public, אחרת לא ניתן היה ליצור מהן אובייקט מחוץ לחבילה,
שבה כל אחת מהן נמצאת.
התוכנית נבדקה תוך שימוש ב‑1.1.3 JDK תחת Win95 .
הפלט של הרצת התוכנית מובא בהערות שבתחילת התוכנית.
ממחיש את השימוש בחבילות ובציוני import על מנת לבנות אפליקציה, המורכבת ממחלקות הנמצאות בשלוש חבילות שונות.
/*File Package00.java Copyright 1997, R.G.Baldwin Illustrates use of package and import directives to build an application consisting of classes in three separate packages. The output from running the program follows: Starting Package00 Instantiate obj of public classes in different packages Constructing Package01 object in folder p1 Constructing Package02 object in folder p2 Back in main of Package00 **********************************************************/ package Combined.Java; //package directive //Two import directives import Combined.Java.p1.Package01;//specific form import Combined.Java.p2.*; //wildcard form class Package00{ public static void main(String[] args){ //main method System.out.println("Starting Package00"); System.out.println("Instantiate obj of public " + "classes in different packages"); new Package01();//Instantiate objects of two classes new Package02();// in different packages. System.out.println("Back in main of Package00"); }//end main method }//End Package00 class definition. |
/*File Package01.java Copyright 1997, R.G.Baldwin See discussion in file Package00.java **********************************************************/ package Combined.Java.p1; public class Package01 { public Package01(){//constructor System.out.println( "Constructing Package01 object in folder p1"); }//end constructor }//End Package01 class definition. |
/*File Package02.java Copyright 1997, R.G.Baldwin See discussion in file Package00.java **********************************************************/ package Combined.Java.p2; public class Package02 { public Package02(){//constructor System.out.println( "Constructing Package02 object in folder p2"); }//end constructor }//End Package02 class definition. |