Zorluk seviyesi : Orta seviye
Aşağıdaki Java Programlarının çıktısını tahmin edin:
Program 1:
Javaclass Gfg { // constructor Gfg() { System.out.println('Geeksforgeeks'); } static Gfg a = new Gfg(); //line 8 public static void main(String args[]) { Gfg b; //line 12 b = new Gfg(); } }
Çıkış:
Geeksforgeeks
Geeksforgeeks
Açıklama:
Bir sınıf yüklendiğinde statik değişkenlerin çağrıldığını ve statik değişkenlerin yalnızca bir kez çağrıldığını biliyoruz. Şimdi 13. satır, yapıcıyı çağıran nesnenin yaratılmasıyla sonuçlanır ve 'Geeksforgeeks' ikinci kez yazdırılır. Eğer 8. satırda statik değişken kullanılmamış olsaydı, nesne yinelemeli olarak sonsuza kadar çağrılacaktı ve bu da StackOverFlow hatasına yol açacaktı.
linux'ta script çalıştırma
Program 2:
Javaclass Gfg { static int num; static String mystr; // constructor Gfg() { num = 100; mystr = 'Constructor'; } // First Static block static { System.out.println('Static Block 1'); num = 68; mystr = 'Block1'; } // Second static block static { System.out.println('Static Block 2'); num = 98; mystr = 'Block2'; } public static void main(String args[]) { Gfg a = new Gfg(); System.out.println('Value of num = ' + a.num); System.out.println('Value of mystr = ' + a.mystr); } }
Çıkış:
Static Block 1
Static Block 2
Value of num = 100
Value of mystr = Constructor
Açıklama:
Statik blok, sınıf belleğe yüklendiğinde yürütülür. Bir sınıf, programa yazıldıkları sırayla yürütülen birden fazla Statik bloğa sahip olabilir.
Not : Statik Yöntemler, sınıfın nesnesini kullanmadan sınıf değişkenlerine erişebilir. Yeni bir örnek oluşturulduğunda yapıcı çağrıldığından, önce statik bloklar çağrılır, ardından yapıcı çağrılır. Eğer aynı programı nesneyi kullanmadan çalıştırsaydık yapıcı çağrılmazdı.
Program 3:
Javaclass superClass { final public int calc(int a int b) { return 0; } } class subClass extends superClass { public int calc(int a int b) { return 1; } } public class Gfg { public static void main(String args[]) { subClass get = new subClass(); System.out.println('x = ' + get.calc(0 1)); } }
Çıkış:
Compilation fails. Açıklama:
superClass sınıfındaki calc() yöntemi nihaidir ve bu nedenle geçersiz kılınamaz.
Program 4:
Javapublic class Gfg { public static void main(String[] args) { Integer a = 128 b = 128; System.out.println(a == b); Integer c = 100 d = 100; System.out.println(c == d); } }
Çıkış:
false
true
Açıklama:
ekleme pitonu
Integer nesnesinin kaynak kodunda, Integer nesnesinin aralığının IntegerCache.low(-128) ile IntegerCache.high(127) arasında olduğunu görebildiğimiz 'valueOf' yöntemini bulacağız. Bu nedenle 127'nin üzerindeki sayılar beklenen çıktıyı vermeyecektir. IntegerCache aralığı, IntegerCache sınıfının kaynak kodundan gözlemlenebilir.