OCA Java imtahan mövzuları

Chapter 4 – Əlavələr

Nümunə 1:

Aşağıdakı kod nümunəsinin output`u nədir?

class A {
    private int i = 6;
    private int j = i;
    public void A() {
        i = 5;
    }
    public static void main(String[] args) {
        A a = new A();
        System.out.println(a.i + a.j);
    }
}

Yəqin fikirləşirsiz ki, cavab 11`dir. Səbəb də odur ki, konstruktor çağırılarkən ilk öncə instance dəyişənlərə dəyərlər mənimsədilir, ij hər ikisi 6 dəyərini alır. Daha sonra konstruktorun daxilində i-nin dəyəri dəyişdirilir və 5 olur. Və beləcə (i+j)-nin nəticəsi 11 olur.

Amma bunlar o zaman doğru olardı ki, A() metod yox konstruktor olsun. Koda diqqətlə baxsanız görərsiniz ki, A()-nın önündə void açar sözü var. Bildiyimiz kimi konstruktorlarda geri dönüş tipi olmamalıdır. Eyni zamanda Java class adı ilə eyni olan metod yaratmağa icazə verir. Bu səbəbdən kod nümunəsi heç bir xəta vermədən compile olunur və kodu run etdikdə cavab 12 olur.

 

Nümunə 2:
class Egret {

    private String color;

    public void Egret() {
        Egret("white");
    }

    public void Egret(String color) {
        color = color;
    }

    public static void main(String[] args) {
        Egret e = new Egret();
        System.out.println("Color:" + e.color);
    }
}

Bu nümunə də öncəki nümunəyə bənzərdi, müəllif sualda metodu konstruktor kimi göstərib diqqəti yayındırmağa çalışıb.

 

Nümunə 3:
class Cardinal {

    static int number;

    Cardinal() {
        number++;
    }

    public static void main(String[] args) {
        Cardinal c1 = new Cardinal();      // line1
        if (c1 == null) {
            Cardinal c2 = new Cardinal();  // line2
        } else {
            Cardinal c2 = new Cardinal();  // line3
        }
        Cardinal c2 = new Cardinal();      // line4
        System.out.println(c1.number);
    }
}

Əgər line4 sətrinin yerini dəyişib line1 sətrindən sonra əlavə etsək, line2 və line3 sətirləri compile xətası verəcək. Hazırkı durumda isə kod heç bir xətasız compile edilir və run etdikdə line1, line3, line4 sətirlərində konstruktor çağırılır və output 3 olur. Maraqlı bir məqamı da qeyd edim; biz adətən if yaxud else`dən sonra fiqurlu mötərizəni yazmaya bilərik, əgər həmin blokun tərkibinə bir ifadə daxildirsə. Amma bu nümunədə fiqurlu mötərizələri yazmadıqda compile xətası alırıq.

 

Nümunə 4:
List numberList = Arrays.asList(5, 10, -5, -10);
Collections.sort(numberList);                        // [-10, -5, 5, 10]
int five = Collections.binarySearch(numberList, 5);  // 2
int four = Collections.binarySearch(numberList, 4);  // -3
System.out.println(five + four);   // -1

 

Nümunə 5:

Aşağıdakı kod nümunəsinin output`u nə olacaq?

class Panda {

    int age;

    public static void main(String[] args) {
        Panda p1 = new Panda();
        p1.age = 1;
        check(p1, p -> { p.age < 5 });
    }

    private static void check(Panda panda, Predicate<Panda> pred) {
        String result = pred.test(panda) ? "match" : "not match";
        System.out.print(result);
    }
}

A. match
B. not match
C. Compile error on line 8
D. Compile error on line 10
E. Compile error on line 11
F. A runtime exception is thrown

 

[topics lang=az]

 

About the author

Mushfiq Mammadov

Leave a Comment


The reCAPTCHA verification period has expired. Please reload the page.

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.