Dane wyjściowe programu Java | Zestaw 8
Poziom trudności : Mediator
Przewiduj wynik następujących programów Java.
Program 1:
class GfG { public static void main ( String args [] ) { String s1 = new String ( 'geeksforgeeks' ); String s2 = new String ( 'geeksforgeeks' ); if ( s1 == s2 ) System . out . println ( 'Equal' ); else System . out . println ( 'Not equal' ); } }
Wyjście:
Not equal
Wyjaśnienie: Ponieważ s1 i s2 to dwa różne obiekty, referencje nie są takie same i operator == porównuje referencje do obiektów. Dlatego wypisuje komunikat „Nie równy”, aby porównać rzeczywiste znaki w ciągu. Należy zastosować metodę równości().
Program 2:
class Person { private void who () { System . out . println ( 'Inside private method Person(who)' ); } public static void whoAmI () { System . out . println ( 'Inside static method Person(whoAmI)' ); } public void whoAreYou () { who (); System . out . println ( 'Inside virtual method Person(whoAreYou)' ); } } class Kid extends Person { private void who () { System . out . println ( 'Kid(who)' ); } public static void whoAmI () { System . out . println ( 'Kid(whoAmI)' ); } public void whoAreYou () { who (); System . out . println ( 'Kid(whoAreYou)' ); } } public class Gfg { public static void main ( String args [] ) { Person p = new Kid (); p . whoAmI (); p . whoAreYou (); } }
Wyjście:
Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou)
Wyjaśnienie: Wiązanie statyczne (lub czas kompilacji) ma miejsce w przypadku metod statycznych. Tutaj p.whoAmI() wywołuje metodę statyczną, więc jest wywoływana podczas kompilacji, co skutkuje powiązaniem statycznym i wypisuje metodę w klasie Person.
Mając na uwadze, że p.kim jesteś() wywołuje metodę Dziecko class, ponieważ domyślnie Java traktuje ją jako metodę wirtualną, tj. Powiązanie dynamiczne.
Program 3:
class GfG { public static void main ( String args [] ) { try { System . out . println ( 'First statement of try block' ); int num = 45 / 3 ; System . out . println ( num ); } catch ( Exception e ) { System . out . println ( 'Gfg caught Exception' ); } finally { System . out . println ( 'finally block' ); } System . out . println ( 'Main method' ); } }
Wyjście:
First statement of try block 15 finally block Main method
Wyjaśnienie:
Ponieważ nie ma wyjątku, blok catch nie jest wywoływany, ale Wreszcie blok jest zawsze wykonywany po bloku try, niezależnie od tego, czy wyjątek jest obsługiwany, czy nie.
Program 4:
class One implements Runnable { public void run () { System . out . print ( Thread . currentThread (). getName ()); } } class Two implements Runnable { public void run () { new One (). run (); new Thread ( new One () 'gfg2' ). run (); new Thread ( new One () 'gfg3' ). start (); } } class Three { public static void main ( String [] args ) { new Thread ( new Two () 'gfg1' ). start (); } }
Wyjście:
gfg1gfg1gfg3
Wyjaśnienie : Początkowo nowy wątek jest rozpoczynany od imienia gfg1 następnie w klasie drugiej pierwsza metoda uruchamiania uruchamia wątek o nazwie gfg1 następnie tworzony jest nowy wątek wywołujący metodę run, ale ponieważ nowy wątek można utworzyć tylko poprzez wywołanie metody start, tak aby poprzedni wątek wykonał akcję i ponownie gfg1 zostanie wydrukowany. Teraz tworzony jest nowy wątek poprzez wywołanie metody start, więc nowy wątek zaczyna się od gfg3 imię i stąd drukuje gfg3 .