רמת קושי : בינוני
חזה את הפלט של תוכניות Java הבאות:
תוכנית 1:
Javaclass Gfg { // constructor Gfg() { System.out.println('Geeksforgeeks'); } static Gfg a = new Gfg(); //line 8 public static void main(String args[]) { Gfg b; //line 12 b = new Gfg(); } }
תְפוּקָה:
Geeksforgeeks
Geeksforgeeks
הֶסבֵּר:
אנו יודעים שמשתנים סטטיים נקראים כאשר מחלקה נטענת ומשתנים סטטיים נקראים פעם אחת בלבד. כעת שורה 13 תוצאות ליצירת אובייקט אשר קורא לקונסטרוקטור ו'Geeksforgeeks' מודפס בפעם השנייה. אם בשורה 8 לא היה נעשה שימוש במשתנה סטטי, האובייקט היה נקרא באופן רקורסיבי באופן אינסופי המוביל לשגיאת StackOverFlow.
מערך דינמי ב-java
תוכנית 2:
Javaclass Gfg { static int num; static String mystr; // constructor Gfg() { num = 100; mystr = 'Constructor'; } // First Static block static { System.out.println('Static Block 1'); num = 68; mystr = 'Block1'; } // Second static block static { System.out.println('Static Block 2'); num = 98; mystr = 'Block2'; } public static void main(String args[]) { Gfg a = new Gfg(); System.out.println('Value of num = ' + a.num); System.out.println('Value of mystr = ' + a.mystr); } }
תְפוּקָה:
Static Block 1
Static Block 2
Value of num = 100
Value of mystr = Constructor
הֶסבֵּר:
בלוק סטטי מבוצע כאשר המחלקה נטענת בזיכרון. למחלקה יכולים להיות מספר בלוקים סטטיים אשר מבוצעים באותו רצף שבו הם נכתבו לתוכנית.
פֶּתֶק : שיטות סטטיות יכולות לגשת למשתני מחלקה מבלי להשתמש באובייקט של המחלקה. מכיוון שבנאי נקרא כאשר נוצר מופע חדש אז קודם כל נקראים הבלוקים הסטטיים ואחרי זה נקרא הבנאי. אם היינו מריצים את אותה תוכנית ללא שימוש באובייקט הבנאי לא היה נקרא.
תוכנית 3:
Javaclass superClass { final public int calc(int a int b) { return 0; } } class subClass extends superClass { public int calc(int a int b) { return 1; } } public class Gfg { public static void main(String args[]) { subClass get = new subClass(); System.out.println('x = ' + get.calc(0 1)); } }
תְפוּקָה:
Compilation fails. הֶסבֵּר:
השיטה calc() במחלקה superClass היא סופית ולכן לא ניתן לעקוף אותה.
תוכנית 4:
Javapublic class Gfg { public static void main(String[] args) { Integer a = 128 b = 128; System.out.println(a == b); Integer c = 100 d = 100; System.out.println(c == d); } }
תְפוּקָה:
false
true
הֶסבֵּר:
בקוד המקור של אובייקט Integer נמצא מתודה 'valueOf' שבה נוכל לראות שהטווח של האובייקט Integer נע בין IntegerCache.low(-128) ל-IntegerCache.high(127). לכן המספרים מעל 127 לא יתנו את התפוקה הצפויה. ניתן לראות את הטווח של IntegerCache מקוד המקור של מחלקת IntegerCache.
Java להחליף תו במחרוזת