Poziom trudności : Mediator
Przewiduj wyjście następujących programów Java:
Program 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(); } }
Wyjście:
Geeksforgeeks
Geeksforgeeks
Wyjaśnienie:
Wiemy, że zmienne statyczne są wywoływane podczas ładowania klasy, a zmienne statyczne są wywoływane tylko raz. Teraz linia 13 skutkuje utworzeniem obiektu, który z kolei wywołuje konstruktora i „Geeksforgeeks” jest wypisywany po raz drugi. Jeśli w linii 8 zmienna statyczna nie zostałaby użyta, obiekt zostałby wywołany rekurencyjnie w nieskończoność, co doprowadziłoby do błędu StackOverFlow.
vlc pobieraj filmy z YouTube
Program 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); } }
Wyjście:
Static Block 1
Static Block 2
Value of num = 100
Value of mystr = Constructor
Wyjaśnienie:
Blok statyczny jest wykonywany, gdy klasa jest ładowana do pamięci. Klasa może mieć wiele bloków statycznych, które są wykonywane w tej samej kolejności, w jakiej zostały zapisane w programie.
Notatka : Metody statyczne mogą uzyskiwać dostęp do zmiennych klasy bez użycia obiektu klasy. Ponieważ konstruktor jest wywoływany, gdy tworzona jest nowa instancja, najpierw wywoływane są bloki statyczne, a następnie wywoływany jest konstruktor. Gdybyśmy uruchomili ten sam program bez użycia obiektu, konstruktor nie zostałby wywołany.
Program 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)); } }
Wyjście:
Compilation fails. Wyjaśnienie:
Metoda calc() w klasie superClass jest ostateczna i dlatego nie można jej zastąpić.
Program 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); } }
Wyjście:
false
true
Wyjaśnienie:
W kodzie źródłowym obiektu Integer znajdziemy metodę 'valueOf', w której możemy zobaczyć, że zakres obiektu Integer leży od IntegerCache.low(-128) do IntegerCache.high(127). Dlatego liczby powyżej 127 nie dadzą oczekiwanego wyniku. Zakres IntegerCache można zaobserwować w kodzie źródłowym klasy IntegerCache.
Pasek narzędzi szybkiego dostępu ms word