Zorluk seviyesi : Orta seviye
Aşağıdaki Java Programlarının çıktısını tahmin edin.
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'); } }
Çıkış:
Not equal
Açıklama: s1 ve s2 iki farklı nesne olduğundan referanslar aynı değildir ve == operatörü nesne referansını karşılaştırır. Bu nedenle 'Eşit değil' yazdırır, dizedeki gerçek karakterleri karşılaştırmak için .equals() yöntemi kullanılmalıdır.
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(); } }
Çıkış:
Inside static method Person(whoAmI) Kid(who) Kid(whoAreYou)
Açıklama: Statik yöntemler için statik bağlama (veya derleme zamanı) gerçekleşir. Burada p.whoAmI() statik yöntemi çağırır, böylece derleme zamanı sırasında çağrılır, dolayısıyla statik bağlamayla sonuçlanır ve yöntemi Person sınıfında yazdırır.
Halbuki s.whoAreYou() yöntemi çağırır Çocuk sınıf, çünkü varsayılan olarak Java bunu sanal bir yöntem, yani dinamik bağlama olarak alır.
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'); } }
Çıkış:
First statement of try block 15 finally block Main method
Açıklama:
Bir istisna olmadığından catch bloğu çağrılmaz ancak Sonunda istisnanın ele alınıp alınmamasına bakılmaksızın blok her zaman bir try bloğundan sonra yürütülür.
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(); } }
Çıkış:
gfg1gfg1gfg3
Açıklama : Başlangıçta yeni Konu ismiyle başlatılır gfg1 daha sonra Sınıf İki'de ilk çalıştırma yöntemi iş parçacığını adı ile çalıştırır. gfg1 daha sonra run yöntemini çağıran yeni bir iş parçacığı oluşturulur, ancak yeni bir iş parçacığı yalnızca start yöntemini çağırarak oluşturulabildiğinden, önceki iş parçacığı işlemi yapar ve tekrar yapar. gfg1 yazdırılır. Artık start yöntemi çağrılarak yeni bir iş parçacığı oluşturulur, böylece yeni bir iş parçacığı şununla başlar: gfg3 isim ve dolayısıyla baskılar gfg3 .
selenyum temelleri