Výstup programu Java | Súprava 8
Úroveň obtiažnosti : Stredne pokročilý
Predpovedajte výstup nasledujúcich programov 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' ); } }
výstup:
Not equal
Vysvetlenie: Keďže s1 a s2 sú dva rôzne objekty, referencie nie sú rovnaké a operátor == porovnáva referenciu objektu. Takže vypíše 'Nerovná sa' na porovnanie skutočných znakov v reťazci Musí sa použiť metóda .equals().
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 (); } }
výstup:
Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou)
Vysvetlenie: Statická väzba (alebo čas kompilácie) nastáva pre statické metódy. Tu p.whoAmI() volá statickú metódu, takže je volaná počas kompilácie, preto vedie k statickej väzbe a vytlačí metódu v triede Person.
Zatiaľ čo p.whoAreYou() zavolá metódu in Kid triedy, pretože Java ju štandardne berie ako virtuálnu metódu, tj dynamickú väzbu.
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' ); } }
výstup:
First statement of try block 15 finally block Main method
Vysvetlenie:
Keďže neexistuje žiadna výnimka, blok catch sa nevolá ale the konečne blok sa vždy vykoná po bloku try bez ohľadu na to, či sa výnimka spracuje alebo 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 (); } }
výstup:
gfg1gfg1gfg3
vysvetlenie: Na začiatku sa nové vlákno začína názvom gfg1 potom v triede Dva metóda prvého spustenia spustí vlákno s názvom gfg1 potom sa vytvorí nové vlákno volaním metódy run, ale keďže nové vlákno možno vytvoriť iba volaním metódy štart, predchádzajúce vlákno vykoná akciu a znova gfg1 sa vytlačí. Teraz sa vytvorí nové vlákno volaním metódy štart, takže nové vlákno začína s gfg3 názov a teda aj výtlačky gfg3 .