Рівень складності : Середній
Передбачте вихід наступних програм 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 bool до рядка
Програма 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 є остаточним, тому його не можна змінити.
отримати поточну дату в java
Програма 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.