ホームページ >Java >&#&チュートリアル >Java の「final」キーワードはオブジェクトの変更にどのような影響を与えますか?

Java の「final」キーワードはオブジェクトの変更にどのような影響を与えますか?

DDD
DDDオリジナル
2024-12-15 18:04:14433ブラウズ

How Does Java's `final` Keyword Affect Object Modification?

Java の "final" キーワードの仕組み (オブジェクトの変更)

Java では、"final" キーワードは不変の値を持つ変数を宣言するために使用されます。ただし、最終変数に割り当てられたオブジェクトを変更できるシナリオが発生する可能性があります。この動作には、final の機能をより深く理解する必要があります。

変数 Finality

インスタンス変数:

  • Final インスタンス変数は、コンストラクター。
  • 一度初期化されると、再割り当てすることはできません。別のオブジェクト参照。
  • ただし、オブジェクトの内容 (コレクションの場合など) は引き続き変更できます。

静的変数:

  • 最終的な静的変数はクラス宣言で初期化する必要があります
  • コンストラクターやメソッドで初期化することはできません。

次のコードを考えてみましょう:

import java.util.ArrayList;
import java.util.List;

class Test {
  private final List foo;

  public Test() {
      foo = new ArrayList();
      foo.add("foo"); // Modification-1
  }

  public static void main(String[] args) {
      Test t = new Test();
      t.foo.add("bar"); // Modification-2
      System.out.println("print - " + t.foo);
  }
}
  • 変更-1: 最後のインスタンス変数 foo は新しい変数で初期化されます。コンストラクター内の ArrayList オブジェクト。
  • Modification-2: add() メソッドは、許可されている foo リストの内容を変更するために使用されます。

Java 1.8 の実質的に最終的な変数

Java 1.8 では、「実質的に最終的な」変数の概念が導入されました。これらは、ネストされたクラスまたは匿名内部クラス内で事実上不変であるローカル変数です。 「final」キーワードを使用していませんが、再割り当てはできません。

サブクラス化とオーバーライド

  • 最終クラス: サブクラス化できません。
  • 最終メソッド: オーバーライドできません (
  • スーパークラスの最終メソッド: サブクラスでオーバーライドできます。

以上がJava の「final」キーワードはオブジェクトの変更にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。