A Java program kimenete | 8. készlet
Nehézségi szint : Közepes
Megjósolja a következő Java programok kimenetét.
1. program:
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' ); } }
Kimenet:
Not equal
Magyarázat: Mivel s1 és s2 két különböző objektum, a hivatkozások nem ugyanazok, és az == operátor összehasonlítja az objektumhivatkozást. Tehát a „Nem egyenlő” szöveget írja ki, hogy összehasonlítsa a tényleges karaktereket a string .equals() metódusával.
2. program:
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 (); } }
Kimenet:
Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou)
Magyarázat: Statikus kötés (vagy fordítási idő) történik statikus metódusoknál. Itt p.whoAmI() meghívja a statikus metódust, tehát fordítási idő alatt hívják meg, így statikus kötést eredményez, és kiírja a metódust a Person osztályba.
mivel p.whoAreYou() behívja a módszert Kölyök osztály, mivel alapértelmezés szerint a Java virtuális metódusnak, azaz dinamikus kötésnek veszi.
3. program:
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' ); } }
Kimenet:
First statement of try block 15 finally block Main method
Magyarázat:
Mivel nincs kivétel, nem a catch blokkot hívják meg, hanem a végül blokk mindig végrehajtásra kerül egy try blokk után, függetlenül attól, hogy a kivételt kezelték-e vagy sem.
4. program:
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 (); } }
Kimenet:
gfg1gfg1gfg3
Magyarázat: Kezdetben az új szál névvel indul gfg1 majd a kettes osztályban az első futtatási metódus a névvel futtatja a szálat gfg1 majd ezután jön létre egy új szál a futtatási metódus meghívásával, de mivel új szál csak a start metódus meghívásával hozható létre, így az előző szál elvégzi a műveletet és újra gfg1 Most egy új szál jön létre a start metódus meghívásával, így egy új szál ezzel kezdődik gfg3 név, és így nyomatok gfg3 .