Grūtības pakāpe : Vidēja līmeņa
Paredzēt šādu Java programmu izvadi.
1. programma:
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'); } }
Izvade:
Not equal
Paskaidrojums: Tā kā s1 un s2 ir divi dažādi objekti, atsauces nav vienādas, un operators == salīdzina objekta atsauci. Tātad tas izdrukā "Nav vienāds", lai salīdzinātu faktiskās rakstzīmes virknē Jāizmanto metode .equals().
2. programma:
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(); } }
Izvade:
Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou)
Paskaidrojums: Statiskā saistīšana (vai kompilēšanas laiks) notiek statiskām metodēm. Šeit p.whoAmI() izsauc statisko metodi, tāpēc tā tiek izsaukta kompilēšanas laikā, tādējādi rada statisku saistīšanu un izdrukā metodi Personas klasē.
Tā kā p.whoAreYou() izsauc metodi Bērns klase, jo pēc noklusējuma Java to izmanto kā virtuālu metodi, t.i., dinamisko saistīšanu.
3. programma:
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'); } }
Izvade:
First statement of try block 15 finally block Main method
Paskaidrojums:
Tā kā nav izņēmuma, netiek izsaukts nozvejas bloks, bet gan beidzot bloks vienmēr tiek izpildīts pēc mēģinājuma bloka neatkarīgi no tā, vai izņēmums tiek apstrādāts vai nē.
4. programma:
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(); } }
Izvade:
gfg1gfg1gfg3
Paskaidrojums: Sākotnēji jaunais pavediens tiek sākts ar nosaukumu gfg1 tad klasē Two pirmās palaišanas metode palaiž pavedienu ar nosaukumu gfg1 tad pēc tam tiek izveidots jauns pavediens, izsaucot palaišanas metodi, bet tā kā jaunu pavedienu var izveidot tikai izsaucot sākuma metodi, iepriekšējā pavediens veic darbību un vēlreiz gfg1 tiek izdrukāts. Tagad jauns pavediens tiek izveidots, izsaucot sākuma metodi, lai jaunais pavediens sākas ar gfg3 nosaukumu un līdz ar to izdrukas gfg3 .
mēģiniet noķert bloku java