Vanskelighetsgrad : Middels
Forutsi produksjonen av følgende Java-programmer.
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'); } }
Produksjon:
Not equal
Forklaring: Siden s1 og s2 er to forskjellige objekter, er ikke referansene de samme, og ==-operatoren sammenligner objektreferanse. Så den skriver ut 'Ikke lik' for å sammenligne de faktiske tegnene i strengen .equals()-metoden må brukes.
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(); } }
Produksjon:
Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou)
Forklaring: Statisk binding (eller kompileringstid) skjer for statiske metoder. Her p.whoAmI() kaller den statiske metoden slik at den kalles under kompileringstiden og resulterer derfor i statisk binding og skriver ut metoden i Person-klassen.
Mens p.whoAreYou() kaller metoden inn Gutt klasse siden Java som standard tar det som en virtuell metode, dvs. dynamisk binding.
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'); } }
Produksjon:
First statement of try block 15 finally block Main method
Forklaring:
Siden det ikke er noe unntak, kalles ikke catch-blokken, men den endelig blokk utføres alltid etter en prøveblokk, enten unntaket håndteres eller ikke.
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(); } }
Produksjon:
gfg1gfg1gfg3
Forklaring: Opprinnelig startes ny tråd med navn gfg1 så i klasse to kjører den første kjøringsmetoden tråden med navnet gfg1 deretter opprettes en ny tråd som kaller kjøringsmetoden, men siden en ny tråd kan opprettes ved å kalle startmetoden bare så utfører den forrige tråden handlingen og igjen gfg1 er skrevet ut.Nå opprettes en ny tråd ved å kalle startmetoden slik at en ny tråd starter med gfg3 navn og dermed utskrifter gfg3 .
blokkerte numre