Java Academy · Oppitunti

Näkyvyysalue ja elinkaari

Ymmärtäkää, missä muuttujat ovat näkyvissä (näkyvyysalue) ja kuinka kauan ne ovat olemassa (elinkaari): lohkot, silmukat, metodit, kentät, nimen peittäminen ja final-parametrit.

Oppitunti 3/38 vaihetta

Näkyvyysalue ja elinkaari on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 3 oppituntia.

Näkyvyysalue ja elinkaari

Näkyvyysalue kertoo, missä nimi eli muuttuja on näkyvissä. Elinkaari kertoo, kuinka kauan muuttuja on olemassa. Tässä tutustutaan lohkon ja silmukan näkyvyysalueisiin, metodin paikallisiin muuttujiin, luokan kenttiin ja peittämissääntöihin.

Lohkon näkyvyysalue

Lohkon näkyvyysalue: aaltosulkeiden sisällä määritetty muuttuja näkyy vain kyseisten aaltosulkeiden sisällä.

public class Main {
  public static void main(String[] args) {
    int a = 10; // visible in main
    {
      int b = 20; // visible only inside this block
      System.out.println("inside block: a=" + a + ", b=" + b);
    }
    System.out.println("outside block: a=" + a);
    // System.out.println(b); // would NOT compile: b is out of scope
  }
}

Silmukan näkyvyysalue

Silmukan näkyvyysalue: for-otsakkeessa määritetty silmukkamuuttuja näkyy vain silmukan rungon sisällä.

public class Main {
  public static void main(String[] args) {
    for (int i = 0; i < 3; i = i + 1) {
      System.out.println("i in loop = " + i);
    }
    // System.out.println(i); // would NOT compile: i is scoped to the loop

    int j;
    for (j = 0; j < 2; j = j + 1) {
      System.out.println("j in loop = " + j);
    }
    System.out.println("j after loop = " + j); // OK: j declared outside
  }
}

Kentät vs. paikalliset muuttujat

Elinkaari: luokan ja staattiset kentät säilyvät kutsujen välillä; paikalliset muuttujat luodaan uudelleen jokaisella kutsulla ja hävitetään metodin päättyessä.

public class Main {
  // static field (class-level): lives for the program lifetime
  static int counter = 0;

  static void tick() {
    int local = 100; // local: created each call, dies when method returns
    counter = counter + 1;
    System.out.println("tick: counter=" + counter + ", local=" + local);
  }

  public static void main(String[] args) {
    tick();
    tick();
    tick();
    System.out.println("final counter=" + counter);
  }
}

Nimen peittäminen

Peittäminen: sisempi määrittely, esimerkiksi parametri tai paikallinen muuttuja, voi peittää ulomman samannimisen tunnisteen. Piilotettuun kenttään pääsee käsiksi muodolla ClassName.field tai instanssimetodeissa muodolla this.field.

public class Main {
  static String label = "FIELD"; // class field

  static void demo(String label) { // parameter shadows field name
    System.out.println("param label = " + label); // uses parameter
    {
      String labelInner = "INNER"; // new name in inner block
      System.out.println("inner block labelInner = " + labelInner);
      System.out.println("still param label = " + label);
    }
    System.out.println("field via class name = " + Main.label); // refer to field explicitly
  }

  public static void main(String[] args) {
    demo("PARAM");
  }
}

Final ja arvon välitys

final-parametreille ei voi sijoittaa uutta arvoa. Javassa parametrit välitetään arvona: parametrin uudelleensijoittaminen ei muuta kutsujan muuttujaa.

public class Main {
  // final parameter cannot be reassigned inside the method
  static int inc(final int n) {
    // n = n + 1; // would NOT compile if uncommented
    return n + 1; // safe: return a new value
  }

  static void reassign(int x) {
    x = 999; // reassignes the local copy; caller variable is unchanged
  }

  public static void main(String[] args) {
    int a = 5;
    int b = inc(a);
    System.out.println("a=" + a + ", b=inc(a)=" + b);

    reassign(a);
    System.out.println("after reassign(a): a is still " + a);
  }
}

Näkyvyysalueen ja elinkaaren tarkistus

Pikatarkistus: Mikä näkyvyysaluetta ja elinkaarta koskeva väite on TOSI?

Kertaus ja seuraava aihe

Kertaus: Harjoiteltiin lohkon ja silmukan näkyvyysalueita, kenttiä ja paikallisia muuttujia, nimen peittämistä sekä final-parametreja. Seuraavaksi siirrytään suunnittelu- ja uudelleenkäyttökuvioihin osiossa A2.2.

Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”Näkyvyysalue ja elinkaari” ilmainen?

Kyllä – oppitunnin ”Näkyvyysalue ja elinkaari” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Näkyvyysalue ja elinkaari”?

Ymmärtäkää, missä muuttujat ovat näkyvissä (näkyvyysalue) ja kuinka kauan ne ovat olemassa (elinkaari): lohkot, silmukat, metodit, kentät, nimen peittäminen ja final-parametrit. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/3.

Kuinka kauan ”Näkyvyysalue ja elinkaari”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Metodien ja parametrien määrittäminen
  2. Paluuarvot ja ylikuormitus
  3. Näkyvyysalue ja elinkaari
← Takaisin: Java Academy