logo

Javaのfinalキーワード

最終的な方法 Javaでは、として使用されます 非アクセス修飾子 にのみ適用される 変数 方法 、または クラス。 慣れています ユーザーを制限する Javaで

以下は 異なるコンテキスト 最後が使用されている場合:

  1. 変数
  2. 方法
  3. クラス



Java の Final キーワードの特徴:

Java では、final キーワードは、変数、メソッド、またはクラスが変更または拡張できないことを示すために使用されます。その特徴の一部を次に示します。

  • 最終的な変数: 変数がfinalとして宣言されている場合、その値は初期化後に変更できません。これは、変更すべきでない定数やその他の値を宣言する場合に便利です。
  • 最終的なメソッド : メソッドがfinalとして宣言されている場合、サブクラスによってオーバーライドすることはできません。これは、クラスのパブリック API の一部であり、サブクラスによって変更すべきではないメソッドに便利です。
  • 最終クラス: クラスがfinalとして宣言されている場合、そのクラスをサブクラスによって拡張することはできません。これは、そのまま使用することを目的としており、変更または拡張すべきではないクラスに役立ちます。
  • 初期化: 最終変数は、宣言時またはクラスのコンストラクターで初期化する必要があります。これにより、変数の値が設定され、変更できないことが保証されます。
  • パフォーマンス: コンパイラは、変数またはメソッドを変更できないことがわかっている場合にコードをより効果的に最適化できるため、final を使用するとパフォーマンスが向上する場合があります。
  • 安全: 最後の方法は、悪意のあるコードによる機密データや動作の変更を防止することで、セキュリティの向上に役立ちます。

全体として、final キーワードは、コードの品質を向上させ、プログラムの特定の側面が変更または拡張されないようにするための便利なツールです。変数、メソッド、クラスを Final として宣言することで、開発者はより安全で堅牢で保守しやすいコードを作成できます。

Java 最終変数

変数が 最後のキーワード 、 その 値は変更できません 、本質的には、 絶え間ない 。これはまた、あなたが 最終変数を初期化する必要があります

最終変数が 参照 、これは、変数を次のようにすることはできないことを意味します。 参照に再バインドされる 別のオブジェクトですが、その参照変数が指すオブジェクトの内部状態は変更できます。つまり、要素を追加または削除できます。 最終配列 または最終コレクション。

最終変数をすべて大文字で表し、単語を区切るのにアンダースコアを使用することをお勧めします。

例:

ジャワ
public class ConstantExample {  public static void main(String[] args) {  // Define a constant variable PI  final double PI = 3.14159;  // Print the value of PI  System.out.println('Value of PI: ' + PI);  } }>

出力
Value of PI: 3.14159>

出力:

  Value of PI: 3.14159>

Final 変数を使用するさまざまな方法

Java で Final 変数を使用できるさまざまなメソッドを見てみましょう。

1. 最終変数

例:

// Final variable final int THRESHOLD = 5;>

2. 空白の最終変数

例:

// Blank final variable final int THRESHOLD;>

3. 静的最終変数

例:

// Final static variable PI static final double PI = 3.141592653589793;>

4. 静的ブランク最終変数

例:

// Blank final static variable static final double PI;>

最終変数の初期化

最終変数を初期化する必要があります。初期化しない場合、コンパイラはコンパイル時エラーをスローします。最終変数は、次のいずれかの方法で 1 回だけ初期化できます。 イニシャライザ または代入ステートメント。最終変数を初期化するには 3 つの方法があります。

私のiPhoneアンドロイドを見つけてください
  1. 最終変数は宣言時に初期化できます。このアプローチが最も一般的です。最終変数は と呼ばれます。 空白の最終変数 もしそれが ない 宣言中に初期化されます。以下に、空の最終変数を初期化する 2 つの方法を示します。
  2. 空の最終変数は、 インスタンス初期化ブロック またはコンストラクター。クラス内に複数のコンストラクターがある場合は、すべてのコンストラクターで初期化する必要があります。初期化しないと、コンパイル時エラーがスローされます。
  3. 空の最終静的変数は、内部で初期化できます。 静的ブロック

最終変数を初期化する 2 つの異なる方法を見てみましょう

例:

ジャワ
// Java Program to demonstrate Different // Ways of Initializing a final Variable // Main class  class GFG {    // a final variable  // direct initialize  final int THRESHOLD = 5;    // a blank final variable  final int CAPACITY;    // another blank final variable  final int MINIMUM;    // a final static variable PI  // direct initialize  static final double PI = 3.141592653589793;    // a blank final static variable  static final double EULERCONSTANT;    // instance initializer block for   // initializing CAPACITY  {  CAPACITY = 25;  }    // static initializer block for   // initializing EULERCONSTANT  static{  EULERCONSTANT = 2.3;  }    // constructor for initializing MINIMUM  // Note that if there are more than one  // constructor, you must initialize MINIMUM  // in them also  public GFG()   {  MINIMUM = -1;  }   }>


上記のコードには main メソッドはありません。これは単に説明を目的としており、理解を深めて結論を導き出すためのものです。

観察 1: 最終変数をいつ使用するか?

通常の変数と最終変数の唯一の違いは、通常の変数には値を再代入できるが、一度割り当てられた最終変数の値は変更できないことです。したがって、final 変数は、プログラムの実行を通じて一定に保ちたい値にのみ使用する必要があります。

観察 2: 最終変数を参照します。

最終変数がオブジェクトへの参照である場合、この最終変数は 最終変数を参照する 。たとえば、決勝戦 文字列バッファ 変数は次のように定義されているように見えます。

final StringBuffer sb;>

ご存知のとおり、final 変数は再代入できません。ただし、参照最終変数の場合は、その参照変数が指すオブジェクトの内部状態を変更できます。これは再割り当てではないことに注意してください。

このプロパティは、 最後の と呼ばれます 非推移性 。以下の例に示すオブジェクトの内部状態が何を意味するかを理解するには、次のようにします。

例 1:

ジャワ
// Java Program to demonstrate // Reference of Final Variable // Main class class GFG {  // Main driver method  public static void main(String[] args)  {  // Creating an object of StringBuilder class  // Final reference variable  final StringBuilder sb = new StringBuilder('Geeks');  // Printing the element in StringBuilder object  System.out.println(sb);  // changing internal state of object reference by  // final reference variable sb  sb.append('ForGeeks');  // Again printing the element in StringBuilder  // object after appending above element in it  System.out.println(sb);  } }>

出力
Geeks GeeksForGeeks>

非推移性 プロパティは配列にも適用されます。 配列 Java のオブジェクトです。配列 最後のキーワード とも呼ばれます 最終配列

注記: 上で説明したように、final 変数は再割り当てできず、再割り当てを行うとコンパイル時エラーがスローされます。

例 2:

ジャワ
// Java Program to Demonstrate Re-assigning // Final Variable will throw Compile-time Error // Main class class GFG {  // Declaring and customly initializing  // static final variable  static final int CAPACITY = 4;  // Main driver method  public static void main(String args[])  {  // Re-assigning final variable  // will throw compile-time error  CAPACITY = 5;  } }>

出力:

最終変数スローのコンパイル時エラー

覚えて: 最終変数がメソッド/コンストラクター/ブロック内で作成されると、それはローカル最終変数と呼ばれ、作成された場所で一度初期化する必要があります。ローカル最終変数については、以下のプログラムを参照してください。

例:

ジャワ
// Java program to demonstrate // local final variable // Main class class GFG {  // Main driver method  public static void main(String args[])  {  // Declaring local final variable  final int i;  // Now initializing it with integer value  i = 20;  // Printing the value on console  System.out.println(i);  } }>

出力
20>

次に進む前に、次のような重要なポイントを覚えておいてください。

  1. C++ との違いに注意してください 定数 変数とJava 最後の 変数。 C++ の const 変数は次のようにする必要があります。 宣言時に値が割り当てられる 。 Java の最終変数の場合、次のようになります。 必要はありません 上の例でわかるように。最終変数には後で値を割り当てることができますが、それは 1 回だけです。
  2. 最後の foreach ループ :final for-each ステートメントは正当なステートメントです。

例:

ジャワ
// Java Program to demonstrate Final // with for-each Statement // Main class class GFG {  // Main driver method  public static void main(String[] args)  {  // Declaring and initializing  // custom integer array  int arr[] = { 1, 2, 3 };  // final with for-each statement  // legal statement  for (final int i : arr)  System.out.print(i + ' ');  } }>

出力
1 2 3>

出力の説明: 以来、 変数はループの反復ごとにスコープ外になり、反復ごとに再宣言されるため、同じトークン (i) を使用して複数の変数を表すことができます。

例:

ジャワ
public class Example {  public static void main(String[] args) {  final int VALUE = 10; // declaring a final variable    System.out.println('The value is: ' + VALUE);  // VALUE = 20; // uncommenting this line will cause a compiler error  // System.out.println('The new value is: ' + VALUE);    final String MESSAGE = 'Hello, world!'; // declaring a final variable  System.out.println(MESSAGE);    MyClass myObj = new MyClass();  myObj.printMessage();  myObj.printFinalMessage();    // MyOtherClass extends MyClass {} // uncommenting this line will cause a compiler error  } } class MyClass {  final String message = 'Hello!'; // declaring a final instance variable    void printMessage() {  System.out.println(message);  }    void printFinalMessage() {  final String finalMessage = 'Hello, final!';  System.out.println(finalMessage);  } } final class MyOtherClass { // declaring a final class  // ... }>

出力
The value is: 10 Hello, world! Hello! Hello, final!>

Java Finalクラス

クラスが 最後の Java ではキーワードと呼ばれます。 最終クラス 。最終クラスを指定することはできません 拡張(継承)

Final クラスには 2 つの用途があります。

使用法 1: 一つは確実に防ぐこと 継承 、最終クラスは拡張できないためです。たとえば、すべて ラッパークラス のように 整数 浮く 、などは最終クラスです。延長することはできません。

final class A {  // methods and fields }   // The following class is illegal  class B extends A  {   // COMPILE-ERROR! Can't subclass A }>

使用法 2: クラスでの Final のもう 1 つの使用法は、次のとおりです。 不変クラスを作成する あらかじめ定義されたもののように クラス。クラスをfinalにしない限り、クラスを不変にすることはできません。

Java 最終メソッド

メソッドが次のように宣言されている場合 最後の キーワード、と呼ばれます 最終的な方法 ジャワでは。最終的なメソッドは次のとおりです オーバーライドされた

物体 クラスがこれを行います。そのメソッドの多くは最終的なものです。すべての派生クラス全体で同じ実装に従う必要がある、final キーワードを使用してメソッドを宣言する必要があります。

図: メソッドを含む最後のキーワード

class A  {  final void m1()   {  System.out.println('This is a final method.');  } } class B extends A  {  void m1()  {     // Compile-error! We can not override   System.out.println('Illegal!');  } }>

Java における Final キーワードの利点:

Java の Final キーワードには、次のようないくつかの利点があります。

  • 不変性の確保: 変数または参照が「final」としてマークされている場合、その値は一度割り当てられると変更できません。これは、データが不変であり、誤ってまたは悪意を持って変更されることがないことを保証するのに役立ちます。
  • パフォーマンスの向上 : Java 仮想マシン (JVM) は、特定の値または参照を変更できないことがわかっている場合にコードをより効果的に最適化できるため、final を使用するとパフォーマンスの向上に役立つ場合があります。
  • コードを理解しやすくする: 変数、メソッド、またはクラスを Final として宣言することで、開発者はコードを理解しやすく、推論しやすくなります。値または参照が最終としてマークされている場合、それが変更されないことが明らかなため、コード分析とデバッグが簡素化されます。
  • コードの再利用を促進する: メソッドを Final として宣言することで、開発者はサブクラスがメソッドをオーバーライドするのを防ぐことができます。サブクラスは親クラスのメソッド実装を使用する必要があるため、これはコードの再利用を促進し、重複を減らすのに役立ちます。
  • セキュリティの強化: Final を使用すると、悪意のあるコードによる機密データや動作の変更を防ぎ、セキュリティを強化できます。

全体として、final キーワードは、コードの品質を向上させ、プログラムの特定の部分が変更できないようにするための便利なツールです。変数、メソッド、クラスを Final として宣言することで、開発者はより安全で堅牢で保守しやすいコードを作成できます。

最終メソッドと最終クラスのその他の例と動作については、 、 参照してください 継承を伴うfinalの使用。 をご覧ください。 Javaの抽象 の違いについての記事 最後の そしてその 抽象的な

関連する面接の質問(重要): Javaのfinal、finally、finalizeの違い

C++で文字列を分割する

結論

Java の最後のキーワードは、ユーザー制限付きの変数、メソッド、またはクラスを作成するメソッドです。このチュートリアルでは、Java の Final キーワードを詳細に取り上げ、そのすべてのコンテキストを理解します。

コンテキストは、例の Java プログラムを使用して説明されており、主題を完全に理解できます。

Java 最終キーワード – FAQ

Javaのfinalメソッドとは何ですか?

Java の最終メソッドは、次のように宣言されたメソッドです。 最後のキーワード つまり、その実装はサブクラスによってオーバーライドできません。

最終メソッドは継承されますか?

いいえ、Java では、final メソッドをサブクラスに継承することはできません。これは、サブクラスが Final メソッドをオーバーライドできません

Javaのfinalキーワードとstaticキーワードは何ですか?

最後のキーワード: 変数、メソッド、またはクラスを変更不可として宣言するために使用されます。

static キーワード: 個々のオブジェクトではなく、クラス自体に属するクラス メンバー (変数およびメソッド) を宣言するために使用されます。

Javaでfinalキーワードを文字列で記述できますか?

はい、final キーワードを使用して変数を宣言し、それに文字列リテラルを割り当てることができます。