Livello di difficoltà : Intermedio
Prevedere l'output dei seguenti programmi Java.
Programma 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'); } }
Produzione:
Not equal
Spiegazione: Poiché s1 e s2 sono due oggetti diversi, i riferimenti non sono gli stessi e l'operatore == confronta il riferimento all'oggetto. Quindi stampa "Non uguale" per confrontare i caratteri effettivi nella stringa. È necessario utilizzare il metodo .equals().
Programma 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(); } }
Produzione:
Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou)
Spiegazione: L'associazione statica (o tempo di compilazione) avviene per i metodi statici. Qui p.chisonoio() chiama il metodo statico in modo che venga chiamato durante la fase di compilazione, quindi risulta in un'associazione statica e stampa il metodo nella classe Person.
Mentre p.chisei() richiama il metodo Ragazzo class poiché per impostazione predefinita Java lo considera un metodo virtuale, ovvero l'associazione dinamica.
Programma 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'); } }
Produzione:
First statement of try block 15 finally block Main method
Spiegazione:
Poiché non vi è alcuna eccezione, non viene chiamato il blocco catch ma il blocco Finalmente Il blocco viene sempre eseguito dopo un blocco try, indipendentemente dal fatto che l'eccezione venga gestita o meno.
Programma 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(); } }
Produzione:
gfg1gfg1gfg3
Spiegazione: Inizialmente il nuovo thread viene avviato con il nome gfg1 quindi nella classe Due il primo metodo di esecuzione esegue il thread con il nome gfg1 successivamente viene creato un nuovo thread chiamando il metodo run ma poiché un nuovo thread può essere creato chiamando solo il metodo start in modo che il thread precedente esegua l'azione e di nuovo gfg1 viene stampato. Ora viene creato un nuovo thread chiamando il metodo start in modo che un nuovo thread inizi con gfg3 nome e quindi stampe gfg3 .
confronta la stringa java