logo

إخراج برنامج جافا | مجموعة 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.

slf4j مقابل log4j

البرنامج 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.