0Pricing
Java Academy · レッスン

スコープとライフタイム

変数を参照できる範囲(スコープ)と存在する期間(ライフタイム)を理解します。ブロック、ループ、メソッド、フィールド、シャドーイング、finalパラメータを扱います。

「スコープとライフタイム」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全3レッスンが含まれています。

スコープとライフタイム

スコープは、名前(変数)を参照できる場所です。ライフタイムは、変数が存在する期間です。ブロックスコープ、ループスコープ、メソッド内のローカル変数、クラスフィールド、シャドーイングの規則を確認します。

ブロックスコープ

ブロックスコープ:中括弧の内側で宣言した変数は、その中括弧の内側でのみ参照できます。

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

ループスコープ

ループスコープ:for ヘッダーで宣言したループインデックスは、ループ本体の内側でのみ参照できます。

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

フィールドとローカル変数

ライフタイム:クラスフィールドや static フィールドは呼び出しをまたいで存続します。ローカル変数は呼び出しごとに作成され、メソッドが終了すると破棄されます。

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

シャドーイング

シャドーイング:内側の宣言(例:パラメーターやローカル変数)によって、同じ識別子を持つ外側の名前が隠されることがあります。隠れたフィールドにアクセスするには、ClassName.field(インスタンスメソッドでは 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 と値渡し

final パラメーターは再代入できません。Java は値渡しです。パラメーターを再代入しても、呼び出し側の変数は変わりません。

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

スコープとライフタイムの確認

クイックチェック:スコープとライフタイムについて正しい説明はどれですか。

復習と次のステップ

復習:ブロックスコープとループスコープ、フィールドとローカル変数、シャドーイング、final パラメーターを練習しました。次は A2.2 で設計と再利用のパターンに進みます。

よくある質問

「スコープとライフタイム」レッスンは無料ですか?

はい。「スコープとライフタイム」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全3レッスンが含まれています。

「スコープとライフタイム」で何を学びますか?

変数を参照できる範囲(スコープ)と存在する期間(ライフタイム)を理解します。ブロック、ループ、メソッド、フィールド、シャドーイング、finalパラメータを扱います。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。

「スコープとライフタイム」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. メソッドとパラメータの定義
  2. 戻り値とオーバーロード
  3. スコープとライフタイム
← Java Academyに戻る