Elméleti alapozás

Az inicializálás II. - Mit is inicializál a Java?

 

Példányváltozó

Osztályváltozó

Paraméter változó

Helyi (lokális) változó

Adattípusok alapértelmezett (default) értékei

www.informatika-programozas.hu - Ez a programozási feladat nehéz lesz!

 

Az előző fejezetben általánosságban került ismertetésre az inicializálás folyamata. A teljesség igényétől űzve kell most tisztáznunk az inicializálás különböző szintjeit, amely attól függ, hogy az inicializálandó egyszerű adattípusok (változók) a kód éppen melyik szintjén vannak deklarálva.

 

Négyféle pozíciójú változónk lehetséges:

  1. példányváltozó,

  2. osztályváltozó,

  3. paraméter változó,

  4. helyi (lokális) változó.

Példányváltozó

 

Az osztály létrehozása a new paranccsal az osztály 1 db futó példányát, objektumát eredményezi. Ha nincs egyéb korlátozás, akármennyi objektumot létrehozhatunk 1 db osztályból, ekkor a példányváltozóból minden példányban keletkezni fog 1 db, ezért hatóköre példányon belüli.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A példányváltozókat a Java-rendszer automatikusan, értelemszerűen 0 értékkel inicializálja.

 

Vigyázzunk, ha az alábbi kódot ellenőrizzük: az osztály neve nem Main, hanem Number! Jól láthatjuk a 2 db példányváltozót int a és int b deklaráció formájában, amelyeket szabványos módszerrel getter-setter függvényekkel menedzselünk:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Number {

    int a;
    int b;

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }

public static void main(String[] args) {
    Number number = new Number();
    System.out.println(number.getA());
    System.out.println(number.getB());
    }
}

 

Végeredmény:

0

0

 

A 2 db int típusú példányváltozónak nem adtunk kezdőértéket, a szabványos getA() és getB() függvények mégis 0 értékeket adtak vissza, amely bizonyítja, hogy a Java-rendszer a változókat valóban 0 értékkel inicializálta.

 

Osztályváltozó

 

Ebből a változóból csakis 1 példány létezik, amely csakis az osztályhoz tartozik, hatóköre osztály belüli. Fő jellegzetessége a változó elé tett static módosítószó (Alapszinten a static módosítóról című fejezet).

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Az osztályváltozókat a Java-rendszer automatikusan, értelemszerűen 0 értékkel inicializálja.

 

Vigyázzunk, ha az alábbi kódot ellenőrizzük: az osztály neve nem Main, hanem Number! Jól láthatjuk a 2 db osztályváltozót int a és int b deklaráció formájában, amelyeket szabványos módszerrel getter-setter függvényekkel menedzselünk:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Number {

    static int a;
    static int b;

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }

public static void main(String[] args) {
    Number number = new Number();
    System.out.println(number.getA());
    System.out.println(number.getB());
    }
}

 

Végeredmény:

0

0

 

A 2 db int típusú osztályváltozónak nem adtunk kezdőértéket, a szabványos getA() és getB() függvények mégis 0 értékeket adtak vissza, amely bizonyítja, hogy a Java-rendszer a változókat valóban 0 értékkel inicializálta.

 

Paraméter változó

 

Ezen változók a metódusok belépési pontjai (az alábbi kódban int a és int b). Hatókörük csakis a metóduson belül érvényes.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A paraméter változókat a Java-rendszer NEM inicializálja!

 

public int addingNumbers(int a, int b) {
    return a + b;
}

 

Helyi (lokális) változó

 

Ezen változók belső utasításblokkon belül működnek és érvényességük is ide korlátozódik.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A helyi (lokális) változókat a Java-rendszer NEM inicializálja!

 

public class Main {
public static void main(String[] args) {
    for(int i = 0; i < 5; i++) {
        int a;
        System.out.println(a);
        }
    }
}

 

A kód nem fog lefutni, mert az Eclipse érzékeli, hogy for cikluson belül deklarált int a nincs megfelelően inicializálva, ezért ennek megfelelő hibaüzenetet küld:

 

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The local variable a may not have been initialized at Main.main(Main.java:7)

 

Adattípusok alapértelmezett (default) értékei

 

A Java-rendszer az alábbi adattípusokat (a fentiek figyelembevételével) a létrehozásuk pillanatában a következő alapértékekre állítja: