Izlaz Java programa | Set 8
Razina težine : Srednji
Predvidite izlaz sljedećih Java programa.
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' ); } }
Izlaz:
Not equal
Obrazloženje: Budući da su s1 i s2 dva različita objekta, reference nisu iste i operator == uspoređuje referencu objekta. Stoga ispisuje 'Nije jednako' za usporedbu stvarnih znakova u nizu. Mora se koristiti metoda 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 (); } }
Izlaz:
Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou)
Obrazloženje: Statičko vezivanje (ili vrijeme kompajliranja) događa se za statičke metode. Ovdje p.tko sam ja() poziva statičku metodu tako da se poziva tijekom vremena kompajliranja stoga rezultira statičkim vezanjem i ispisuje metodu u klasi osobe.
dok p.tko si ti() poziva metodu in Dijete klasa budući da ga prema zadanim postavkama Java uzima kao virtualnu metodu tj. dinamičko vezanje.
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' ); } }
Izlaz:
First statement of try block 15 finally block Main method
Obrazloženje:
Budući da nema iznimke, blok catch se ne poziva već konačno blok se uvijek izvršava nakon bloka pokušaja bez obzira da li je iznimka obrađena ili ne.
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 (); } }
Izlaz:
gfg1gfg1gfg3
Objašnjenje: U početku se nova nit pokreće s imenom gfg1 tada u klasi Two prva run metoda pokreće nit s imenom gfg1 onda se nakon toga stvara nova nit pozivanjem metode pokretanja, ali budući da se nova nit može stvoriti samo pozivanjem metode pokretanja, prethodna nit obavlja radnju i ponovno gfg1 ispisuje se. Sada se stvara nova nit pozivanjem metode start tako da nova nit počinje s gfg3 ime i stoga ispisuje gfg3 .