Úroveň obtížnosti : Střední
Předvídejte výstup následujících programů 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
Vysvětlení: Protože s1 a s2 jsou dva různé objekty, odkazy nejsou stejné a operátor == porovnává odkaz na objekt. Vypíše tedy 'Není rovno' pro porovnání skutečných znaků v řetězci Musí být použita metoda .equals().
Program 2:
Java
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)
Vysvětlení: Statická vazba (nebo doba kompilace) nastává u statických metod. Zde p.whoAmI() volá statickou metodu, takže je volána během kompilace, což má za následek statickou vazbu a vytiskne metodu ve třídě Person.
Zatímco p.whoAreYou() zavolá metodu in Dítě třídy, protože ji Java ve výchozím nastavení bere jako virtuální metodu, tj. dynamickou vazbu.
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
Vysvětlení:
Protože neexistuje žádná výjimka, blok catch se nevolá, ale blok konečně blok se vždy provede po bloku try, ať už je výjimka zpracována nebo 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(); } }
výstup:
gfg1gfg1gfg3
Vysvětlení: Zpočátku je nové vlákno spuštěno názvem gfg1 pak ve třídě 2 metoda prvního spuštění spustí vlákno s názvem gfg1 poté se vytvoří nové vlákno voláním metody run, ale protože nové vlákno lze vytvořit pouze voláním metody start, předchozí vlákno provede akci a znovu gfg1 Nyní je vytvořeno nové vlákno voláním metody start, takže nové vlákno začíná s gfg3 jméno a potažmo otisky gfg3 .
formátovat řetězec java