Sværhedsgrad : Mellem
Forudsige outputtet af 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'); } }
Produktion:
Not equal
Forklaring: Da s1 og s2 er to forskellige objekter, er referencerne ikke de samme, og ==-operatoren sammenligner objektreference. Så den udskriver 'Ikke ens' for at sammenligne de faktiske tegn i strengen .equals()-metoden skal bruges.
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(); } }
Produktion:
Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou)
Forklaring: Statisk binding (eller kompileringstid) sker for statiske metoder. Her p.whoAmI() kalder den statiske metode, så den kaldes under kompileringstiden og resulterer derfor i statisk binding og udskriver metoden i klassen Person.
Hvorimod p.whoAreYou() kalder metoden ind knægt klasse, da Java som standard tager det som en virtuel 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'); } }
Produktion:
First statement of try block 15 finally block Main method
Forklaring:
Da der ikke er nogen undtagelse, kaldes catch-blokken ikke, men den endelig blok udføres altid efter en forsøgsblok, uanset om undtagelsen håndteres eller ej.
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(); } }
Produktion:
gfg1gfg1gfg3
Forklaring: I første omgang startes en ny tråd med navn gfg1 så i klasse to kører den første kørselsmetode tråden med navnet gfg1 derefter oprettes en ny tråd, der kalder kørselsmetoden, men da en ny tråd kun kan oprettes ved at kalde startmetoden, så udfører den forrige tråd handlingen og igen gfg1 er udskrevet. Nu oprettes en ny tråd ved at kalde startmetoden, så en ny tråd starter med gfg3 navn og dermed tryk gfg3 .
aws sns