Vaikeustaso : Keskitaso
Ennusta seuraavien Java-ohjelmien tulos.
Ohjelma 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'); } }
Lähtö:
Not equal
Selitys: Koska s1 ja s2 ovat kaksi eri objektia, viittaukset eivät ole samoja ja ==-operaattori vertaa objektiviittausta. Joten se tulostaa "Ei yhtä suuri" vertaillakseen todellisia merkkejä string .equals() -menetelmää on käytettävä.
Ohjelma 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(); } }
Lähtö:
Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou)
Selitys: Staattinen sidonta (tai käännösaika) tapahtuu staattisille menetelmille. Tässä p.whoAmI() kutsuu staattista menetelmää, joten sitä kutsutaan käännösaikana, mikä johtaa staattiseen sidontaan ja tulostaa menetelmän Person-luokassa.
Sitä vastoin p.whoAreYou() kutsuu menetelmän sisään Lapsi luokkaan, koska oletuksena Java käyttää sitä virtuaalisena menetelmänä eli dynaamisena sidontana.
Ohjelma 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'); } }
Lähtö:
First statement of try block 15 finally block Main method
Selitys:
Koska poikkeuksia ei ole, catch-lohkoa ei kutsuta, vaan vihdoinkin lohko suoritetaan aina try-lohkon jälkeen riippumatta siitä, käsitelläänkö poikkeusta vai ei.
Ohjelma 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(); } }
Lähtö:
gfg1gfg1gfg3
Selitys: Aluksi uusi ketju aloitetaan nimellä gfg1 sitten luokassa Two ensimmäisen ajon menetelmä ajaa säiettä nimellä gfg1 sen jälkeen luodaan uusi säie kutsuen ajomenetelmää mutta koska uusi säie voidaan luoda kutsumalla vain aloitusmenetelmää niin edellinen säie tekee toiminnon ja uudelleen gfg1 on tulostettu. Nyt uusi säie luodaan kutsumalla aloitusmenetelmää, jolloin uusi säie alkaa gfg3 nimi ja siten tulosteet gfg3 .
gimp suorakulmio piirtää