Java Academy · leksjon

Omfang og levetid

Forstå hvor variabler er synlige (omfang), og hvor lenge de eksisterer (levetid): blokker, løkker, metoder, felt, skjuling og final-parametere.

Leksjon 3 av 38 trinn

Omfang og levetid er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 3 av 3. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 3 leksjoner.

Scope kontra levetid

Scope = hvor et navn, altså en variabel, er synlig. Levetid = hvor lenge variabelen eksisterer. Du skal se blokkscope, løkkescope, lokale variabler i metoder, klassefelter og regler for skyggelegging.

Blokkscope

Blokkscope: En variabel som deklareres innenfor krøllparenteser, er bare synlig innenfor disse krøllparentesene.

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
  }
}

Løkkescope

Løkkescope: En løkkeindeks som deklareres i for-hodet, er bare synlig inne i løkkekroppen.

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
  }
}

Felter kontra lokale variabler

Levetid: Klasse- og static-felter lever videre mellom kall; lokale variabler opprettes på nytt ved hvert kall og forkastes når metoden avsluttes.

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);
  }
}

Skyggelegging

Skyggelegging: En indre deklarasjon, for eksempel en parameter eller lokal variabel, kan skjule et ytre navn med samme identifikator. Bruk ClassName.field, eller this.field i instansmetoder, for å få tilgang til det skjulte feltet.

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 og pass-by-value

final-parametere kan ikke tilordnes på nytt. Java bruker pass-by-value: Hvis parameteren tilordnes på nytt, endres ikke variabelen hos kalleren.

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);
  }
}

Kontroll av scope og levetid

Rask kontroll: Hvilket utsagn om scope og levetid er SANT?

Oppsummering og neste steg

Oppsummering: Du øvde på blokk- og løkkescope, felter kontra lokale variabler, skyggelegging og final-parametere. Neste steg: gå videre til design- og gjenbruksmønstre i A2.2.

Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «Omfang og levetid» gratis?

Ja – hele teksten i «Omfang og levetid» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 3 leksjoner.

Hva lærer jeg i «Omfang og levetid»?

Forstå hvor variabler er synlige (omfang), og hvor lenge de eksisterer (levetid): blokker, løkker, metoder, felt, skjuling og final-parametere. Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 3.

Hvor lang tid tar leksjonen «Omfang og levetid»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Definere metoder og parametere
  2. Returverdier og overlagring
  3. Omfang og levetid
← Tilbake til Java Academy