Ниво на трудност : Средно ниво
Предскажете изхода на следните 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.
centos срещу redhat
Програма 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 е окончателен и затова не може да бъде заменен.
mit пълна форма
Програма 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.