logo

פלט של תוכנית Java | סט 9

רמת קושי : בינוני

חזה את הפלט של תוכניות Java הבאות:

תוכנית 1:

Java
class 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:

Java
class 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:

Java
class 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:

Java
public 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 להחליף תו במחרוזת