שאלות סיכום
ש: ב‑Java מקובל להשתמש במשתני מחלקה יחד עם מילת המפתח ________ על מנת ליצור משתנים שמתנהגים כקבועים. השלם.
ת: final.
ש: ב‑Java מילת המפתח _________ משמשת על מנת להצהיר על משתנה מחלקה. השלם.
ת: static.
ש: ב‑Java מילת המפתח _________ משמשת על מנת להצהיר על מתודת מחלקה. השלם.
ת: static.
ש: כאשר אתה כולל מתודה בהגדרת המחלקה ב‑Java מבלי להשתמש במילת המפתח static, התוצאה תהיה יצירת אובייקטים של אותה מחלקה שיכילו מתודת המופע: אמת או שקר?
אם שקר, הסבר מדוע.
ת: אמת.
ש: בדרך כלל, כל אובייקט מכיל עותק משלו של כל מתודת המופע: אמת או שקר?
ת: שקר, מספר עותקים של אותה מתודה אינם קיימים בדרך כלל בזיכרון.
ש: כאשר אתה מפעיל מתודת מופע באמצעות אובייקט מסוים, אם המתודה מצביעה על משתני המופע של המחלקה, המתודה תצביע על משתני המופע המסוימים של האובייקט המסוים שבאמצעותו הופעלה המתודה: אמת או שקר? אם שקר, הסבר מדוע.
ת: אמת.
ש: מתודות מופע מופעלות ב‑Java באמצעות שם האובייקט, נקודתיים, ושם המתודה,
כמתואר למטה: אמת או שקר? אם שקר, הסבר מדוע.
myObject:myInstaceMethod()
ת: שקר. צריך להשתמש באופרטור הנקודה, ולא בנקודתיים.
ש: ב‑Java, למתודות המופע יש גישה הן למשתני מופע והן למשתני מחלקה: אמת או שקר?
אם שקר, הסבר מדוע.
ת: אמת.
ש: ב‑Java, למתודות מחלקה יש גישה הן למשתני מופע והן למשתני מחלקה: אמת או שקר?
אם שקר, הסבר מדוע.
ת: שקר. מתודות מחלקה מסוגלות לגשת רק לחברים אחרים במחלקה.
ש: מהם שני המאפיינים העיקריים של מתודות מחלקה?
ת: 1. מתודות מחלקה מסוגלות לגשת רק לחברים אחרים במחלקה. 2.
ניתן לגשת למתודות מחלקה רק באמצעות שם המחלקה. אין צורך באובייקט של המחלקה על מנת לגשת אליהן.
ש: ב‑Java ניתן להפעיל מתודת מחלקה באמצעות שם המחלקה, נקודתיים ושם המתודה,
כמתואר למטה: אמת או שקר? אם שקר, הסבר מדוע.
MyClass:myClassMethod()
ת: שקר. צריך להשתמש באופרטור הנקודה, ולא בנקודתיים.
ש: מה הכוונה במושג מתודות מועמסות?
ת: פירוש המונח מתודות מועמסות הוא, ששתי מתודות או יותר עשויים להיות בעלות שמות זהים,
כל עוד לכל אחת תהיה רשימת ארגומנטים שונה.
ש: אם אתה מעמיס שם של מתודה, המהדר קובע בזמן ריצה, על סמך הארגומנטים שסופקו להפעלת המתודה, לאיזו גירסה של המתודה לקרוא במקרה הנתון: אמת או שקר?
אם שקר, הסבר מדוע.
ת: שקר. הקביעה נעשית בזמן ההידור.
ש: הבנאי הוא מתודה מיוחדת המשמשת לבניית אובייקטים. הבנאי נקרא תמיד על שם המחלקה שבה הוא מוגדר, ואין מציינים לגביו את טיפוס המוחזר: אמת או שקר? אם שקר, הסבר מדוע.
ת: אמת.
ש: ניתן להעמיס בנאים, וכך במחלקה אחת עשויים להיות מספר בנאים, שלכולם שמות זהים,
אך לכל אחד מהם רשימת ארגומנטים שונה: אמת או שקר? אם שקר, הסבר מדוע.
ת: אמת.
ש: למה נועד בנאי פרמטרי?
ת: בנאי פרמטרי נועד כדי לאתחל את משתני המופע של אובייקט בזמן שיוצרים את אותו אובייקט.
ש: אוסף מסוים של משתני המופע ניתן לאתחל בכמה דרכים, תוך שימוש בבנאים מועמסים:
אמת או שקר? אם שקר, הסבר מדוע.
ת: אמת.
ש: אין זה הכרחי לספק בנאי ב‑Java: אמת או שקר? אם שקר, הסבר מדוע.
ת: אמת.
ש: ניתן לראות את בנאי ברירת המחדל כבנאי שאינו מקבל פרמטרים כלשהם: אמת או שקר?
אם שקר, הסבר מדוע.
ת: אמת.
ש: ב‑Java, אם סיפקת בנאי כלשהו, יותר לא יסופק עבורך בנאי ברירת המחדל: אמת או שקר?
אם שקר, הסבר מדוע.
ת: אמת.
ש: ב‑Java, אם אתה זקוק לבנאי פרמטרי וגם לבנאי שאינו מקבל פרמטרים
(שנהוג לכנותו בנאי ברירת המחדל), עליך לספק את שניהם: אמת או שקר? אם שקר, הסבר מדוע.
ת: אמת.
ש: ב‑Java ניתן ליצור אובייקטים בזיכרון הסטטי בזמן הידור, או להשתמש באופרטור new על מנת לבקש זיכרון ממערכת ההפעלה בזמן ריצה ולהשתמש בבנאי כדי ליצור את האובייקט באותו זיכרון: אמת או שקר? אם שקר, הסבר מדוע.
ת: שקר. ב‑Java ניתן ליצור אובייקטים רק על ה‑ ערימה בזמן ריצה.
ש: הבא קטע קוד המכיל הוראה בודדת, שממחיש את השימוש האופייני בבנאי כדי להצהיר,
ליצור ולאתחל אובייקט ב‑Java. השתמש בבנאי פרמטרי המקבל שלושה פרמטרים מטיפוס int.
ת:
MyClass myObject = new MyClass(1,2,3);
ש: הבא קטע קוד המכיל הוראה בודדת, שממחיש את השימוש האופייני בבנאי ברירת המחדל כדי להצהיר וליצור אובייקט ב‑Java.
ת:
MyClass myObject = new MyClass();
ש: אילו שלוש פעולות מבצעת ההוראה הבאה?
MyClass myObject = new MyClass(1,2,3);
ת: ההוראה מבצעת שלוש פעולות יחד:
· מצהירה על אובייקט באמצעות הודעה למהדר על שמו של האובייקט.
· יוצרת את האובייקט באמצעות האופרטור new כדי להקצות זיכרון שיכיל את האובייקט החדש.
· מאתחלת את האובייקט באמצעות קריאה לבנאי בשם MyClass.
ש: ב‑Java, אם תנסה ליצור אובייקט וה‑JVM אינו מסוגל להקצות את הזיכרון הדרוש,
המערכת _______________________________. השלם.
ת: תזרוק OutOfMemoryError.
ש: קטע הקוד הבא הוא קריאה חוקית למתודה: אמת או שקר? אם שקר, הסבר מדוע.
obj.myFunction(new myClassConstructor(1,2,3) );//Java version |
ת: אמת.
ש: ב‑Java, כאשר מתחיל ביצוע של מתודה, כל הפרמטרים נוצרים כמשתנים מקומיים מטיפוס automatic: אמת או שקר? אם שקר, הסבר מדוע.
ת: אמת.
ש: בהוראה הבאה נוצר אובייקט, מאותחל ומועבר כפרמטר לפונקציה. מה יקרה לאובייקט עם סיום הפונקציה?
obj.myFunction(new myClassConstructor(1,2,3);//Java version
ת: הוא יהיה מוּעָד לאיסוף אשפה.
ש: ב‑Java מצהירים על בנאי ומשתמשים בו בדיוק כמו בכל מתודה אחרת במחלקה שלך,
מלבד העובדה ש______________________. השלם.
ת: לא מציינים את הטיפוס המוחזר ולא כוללים בו הוראת return .
ש: שמו של הבנאי חייב להיות זהה לשם של ה_________. השלם.
ת: מחלקה.
ש: בדרך כלל במקרים של הורשה, תרצה שתת-המחלקה תפעיל את הבנאי של מחלקת-העל בסוף, על מנת לאתחל את משתני המופע הנגזרים ממחלקת-העל: אמת או שקר? אם שקר, הסבר מדוע.
ת: בדרך כלל, תרצה שתת-המחלקה תפעיל את הבנאי של מחלקת-העל בתחילה.
ש: הבא קטע קוד, שאותו היית מציב בתחילת הבנאי כדי לגרום לתת-מחלקה להפעיל את הבנאי של מחלקת-העל לפני הביצוע של גוף הבנאי.
ת: super(optional parameters);
ש: לכל אובייקט יש מתודת finalize היורשת מהמחלקה _________. השלם.
ת: Object.
ש: לפני שאובייקט נתבע על ידי אוסף האשפה, נקראת עבורו מתודת ________. השלם.
ת: finalize.
ש: ב‑Java ההורס נקרא תמיד כאשר אובייקט חורג מהטווח: אמת או שקר? אם שקר, הסבר מדוע.
ת: שקר. Java אינה תומכת במושג ההורס.
ש: כתוב תוכנית Java העונה על הדרישות ההבאות.
מבלי להיעזר בפתרון הניתן בהמשך, כתוב אפליקציית Java אשר ממחישה:
1. יצירת אובייקט באמצעות קריאה לבנאי ברירת המחדל.
2. יצירת אובייקט באמצעות קריאה לבנאי פרמטרי כפרמטר בקריאה לפונקציה.
/*File SampProg18.java from lesson 42 Copyright 1997, R.G.Baldwin Without viewing the solution that follows, write a Java application that illustrates: 1. Instantiating an object by calling the default constructor. 2. Instantiating an object by calling a parameterized constructor as a parameter to a function call. The program should display the following output: Starting Program Object contains 100 Terminating, Baldwin **********************************************************/ class TestClass{ int instanceVar; TestClass(int inData){//parameterized constructor instanceVar = inData;//put inData in instance variable }//end parameterized constructor void showInstanceVar(){ System.out.println( "Object contains " + instanceVar); }//end showInstanceVar }//end TestClass class SampProg18 { //define the controlling class public static void main(String[] args){ //main method System.out.println("Starting Program"); //Instantiate obj of this type by calling default // constructor SampProg18 obj = new SampProg18(); //Call function with call to parameterized constructor // as a parameter obj.myFunction(new TestClass(100)); System.out.println("Terminating, Baldwin"); }//end main //The following function receives an object and calls // one of its methods to display the data contained in // the object. void myFunction(TestClass objIn){ objIn.showInstanceVar(); }//end myFunction }//End SampProg18 class. |
ש: כתוב תוכנית Java העונה על הדרישות ההבאות.
מבלי להיעזר בפתרון הניתן בהמשך, כתוב אפליקציית Java אשר ממחישה את השימוש ב‑ java.lang.system.runFinalizersOnExit() .
/*File SampProg19.java from lesson 42 Copyright 1997, R.G.Baldwin Without viewing the solution which follows, write a Java application that illustrates the use of java.lang.system.runFinalizersOnExit(). The output from the program should be: Terminating, Baldwin Finalizing TestClassA object Finalizing TestClassB object **********************************************************/ class TestClassA{ protected void finalize(){//override finalization method System.out.println("Finalizing TestClassA object"); }//end overridden finalize() method }//end TestClassA class TestClassB{ protected void finalize(){//override finalization method System.out.println("Finalizing TestClassB object"); }//end overridden finalize() method }//end TestClassB class SampProg19{//controlling class public static void main(String[] args){//main method //Guarantee finalization of all objects on exit System.runFinalizersOnExit(true); //Instantiate two objects to be finalized TestClassA objA = new TestClassA(); TestClassB objB = new TestClassB(); System.out.println("Terminating, Baldwin"); }//end main }//end class SampProg19 |