Javaのfinalとstaticの違いは何ですか?


ベストアンサー

ええと、まったく異なる概念です。

staticとマークされたメンバー特定のインスタンスではなく、クラスに属します。クラスに静的メンバーしかない場合があります。その明らかな例は、doubleプリミティブを「ボックス化」するjava.lang.Doubleクラスです。インスタンスメソッド(myDouble.doubleValue())ただし、静的メンバー(Double.MAX\_VALUE)を介して「ユニバーサル」なものを取得します。

finalとマークされたメンバーは、その値(つまりその値)を持つことができません*プリミティブの場合、またはオブジェクトの場合はその参照)が初期化されると変更されます。オブジェクトのプロパティを変更できる場合があります(可変の場合があります)ただし、オブジェクトを別のオブジェクトに置き換えることはできませんでした。 (*技術的には、リフレクション、バイトコード操作、またはその他の方法で「ルールを破る」ことで「ごまかす」ことができますが、それを行うと、おそらく知っているでしょう。再「不正行為」。)

回答

いつ使用するかを知る

private static final X x;

これらのキーワードの用途を知っておく必要があります。

見てみましょう

  1. private-クラスの特定のメンバーをに制限する場合に使用されます。そのクラスの外部からはアクセスできません。
  2. static-メンバーをstaticと宣言すると、そのメンバーはオブジェクトではなくそのクラスにリンクされます。簡単にするために、静的メンバーはクラスがロードされるときに初期化されます。そのため、そのメンバーの値を更新するたびに、そのメンバーが参照されているすべての場所も更新されます。したがって、静的メンバーはクラス名でアクセスされ、オブジェクトではなく、オブジェクトに関係なくメンバーの値は同じままです。
  3. final-このキーワードをメンバー変数とともに使用すると、クラスがロードされて値が割り当てられると、変更できないことを定義します。

では、どうなるか見てみましょう。以下のように変数を宣言すると、次のようになります。

private static final String PRIVATE\_STATIC\_FINAL\_STRING = "String";

これで、

PRIVATE\_STATIC\_FINAL\_STRINGがプライベートに定義されたため、勝ちました「それ以外ではアクセスできない」と宣言するクラス。これも静的として定義されているため、クラスのオブジェクトに関係なく値は同じままです。また、finalとして定義されているため、クラスが読み込まれると、値は変更されません。

したがって、PRIVATE\_STATIC\_FINAL\_STRINGは、クラスを宣言する「外部からアクセスできない」変更不可能なクラスレベルの文字列として機能します。

これが疑問を解消するのに役立つことを願っています。さらにサポートが必要な場合は、あなたは私に連絡することができます、そして私は私ができる限りあなたを助けるように努めます。

幸運と幸せな学習!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です