Ниво тежине : Интермедиате
Предвидите излаз следећих Јава програма:
Програм 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 резултира креирањем објекта који поново позива конструктор и 'Геексфоргеекс' се штампа други пут. Да у реду 8 статичка променљива не би била коришћена, објекат би се позивао рекурзивно бесконачно што би довело до грешке СтацкОверФлов.
питхон тупле сортиран
Програм 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. Објашњење:
Метод цалц() у класи суперЦласс је коначан и стога се не може заменити.
Програм 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
Објашњење:
У изворном коду Интегер објекта наћи ћемо метод 'валуеОф' у коме можемо видети да опсег Интегер објекта лежи од ИнтегерЦацхе.лов(-128) до ИнтегерЦацхе.хигх(127). Стога бројеви изнад 127 неће дати очекивани резултат. Опсег ИнтегерЦацхе-а се може посматрати из изворног кода класе ИнтегерЦацхе.
ц# датум и време