Nivel de dificultate : Intermediar
Preziceți rezultatul următoarelor programe Java.
Programul 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'); } }
Ieșire:
Not equal
Explicaţie: Deoarece s1 și s2 sunt două obiecte diferite, referințele nu sunt aceleași, iar operatorul == compară referința la obiect. Deci se afișează „Nu este egal” pentru a compara caracterele reale din șirul de caractere trebuie utilizată metoda .equals().
Programul 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(); } }
Ieșire:
Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou)
Explicaţie: Legarea statică (sau timpul de compilare) are loc pentru metodele statice. Aici p.whoAmI() apelează metoda statică, astfel încât este apelată în timpul compilării, deci are ca rezultat legarea statică și tipărește metoda în clasa Person.
Întrucât p.whoAreYou() apelează metoda în Copil clasă deoarece Java o ia implicit ca o metodă virtuală, adică legarea dinamică.
Programul 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'); } }
Ieșire:
First statement of try block 15 finally block Main method
Explicaţie:
Deoarece nu există nicio excepție, blocul catch nu este numit, ci in sfarsit blocul este întotdeauna executat după un bloc try, indiferent dacă excepția este gestionată sau nu.
Programul 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(); } }
Ieșire:
gfg1gfg1gfg3
Explicatie: Inițial, noul Thread este început cu nume gfg1 apoi în clasa a doua prima metodă rulează firul cu numele gfg1 apoi, după aceea, se creează un fir nou apelând metoda run, dar deoarece un nou thread poate fi creat apelând metoda start numai, astfel încât firul anterior să facă acțiunea și din nou gfg1 este tipărit. Acum un nou thread este creat prin apelarea metodei start, astfel încât un nou thread începe cu gfg3 nume și prin urmare tipărituri gfg3 .
șir în char java