タグ付けされた質問 「final」

11
Javaの最終とC ++のconst
チュートリアルC ++プログラマのためのJava(ハイライトは自分である)ことを言います: キーワードfinalは 、C ++のconst とほぼ同等です。 この文脈で「大まかに」はどういう意味ですか?彼らはまったく同じではありませんか? もしあれば、違いは何ですか?
151 java  c++  const  final 

7
final staticとstatic finalの違い
次のようなコードを宣言したコードを見つけました private final static String API_RTN_SUCCESS = "0"; private final static String API_RTN_ERROR = "1"; public static final String SHARED_PREFERENCE_CONFIG = "shared_preference_config"; public static final String STARTUP_SETTING_KEY = "startup_setting"; それらの違いは何ですか?それらは同じですか?またはそれはのために異なりますprivateかpublic?
151 java  static  final 

10
C ++ 11の関数の「最終」キーワードの目的は何ですか?
finalC ++ 11の関数のキーワードの目的は何ですか?派生クラスによる関数のオーバーライドを防ぐことは理解していますが、これが当てはまる場合は、final関数を非仮想として宣言するだけで十分ではないでしょうか?私がここで見逃している別のものはありますか?
143 c++  c++11  final 

5
Javaのfinalメソッド:それは何を約束しますか?
Javaクラスでは、メソッドをとして定義してfinal、このメソッドがオーバーライドされないようにすることができます。 public class Thingy { public Thingy() { ... } public int operationA() {...} /** this method does @return That and is final. */ public final int getThat() { ...} } それは明らかであり、偶発的な上書きやパフォーマンスから保護するのに役立つかもしれませんが、それは私の質問ではありません。 私の質問は次のとおりです。OOPの観点から、メソッドを定義することによりfinal、クラス設計者はこのメソッドが常に説明どおりまたは暗黙のうちに機能することを約束することを理解しました。しかし、メソッドが何をしているかが単にプロパティを提供するよりも複雑である場合、これは多くの場合、クラスの作成者の影響の外にある可能性があります。 構文上の制約は私には明らかですが、OOPの意味にはどのような意味がありますか?finalこの意味で、ほとんどのクラス作成者は正しく使用していますか? finalメソッドはどのような「契約」を約束しますか?
141 java  oop  final 

16
StringクラスがJavaでfinalと宣言されているのはなぜですか?
クラスjava.lang.StringがJavaでfinalとして宣言されていることを知ったときから、それがなぜなのか疑問に思いました。当時は答えが見つかりませんでしたが、この投稿:JavaでStringクラスのレプリカを作成する方法は?私の質問を思い出しました。 確かに、Stringは私が必要とするすべての機能を提供します。Stringクラスの拡張を必要とする操作については考えたことはありませんが、誰かが何を必要としているのかはわかりません。 それで、彼らがそれを最終的にすることに決めたとき、デザイナーの意図が何であったか誰でも知っていますか?
141 java  string  final 

8
Javaに定数機能がないのはなぜですか?
Javaで定数の背後にある理由を特定しようとしていましたが、Javaではfinalキーワードを使用して定数を宣言できることがわかりました。 私の質問は、Javaが定数(const)機能を導入しなかった理由です。多くの人がC ++から来たと言っているので、C ++にはconstキーワードがあります。 あなたの考えを共有してください。
140 java  constants  final 

7
最終的な静的メソッドの動作
私は静的メソッドを使用してモディファイヤをいじっており、奇妙な動作に遭遇しました。 ご存知のように、静的メソッドはインスタンスではなくクラスに関連付けられているため、オーバーライドできません。 だから私が以下のスニペットを持っているなら、それはうまくコンパイルします //Snippet 1 - Compiles fine public class A { static void ts() { } } class B extends A { static void ts() { } } しかし、クラスAの静的メソッドにfinal修飾子を含めると、コンパイルが失敗し 、Bのts()はAのts()をオーバーライドできません。オーバーライドされたメソッドはstatic finalです。 静的メソッドをまったくオーバーライドできないときになぜこれが起こるのですか?
123 java  methods  static  final 


2
事実上最終対最終-異なる動作
これまでのところ、実質的にfinalとfinalはほぼ同等であり、JLSは、実際の動作が同一でなくても、それらを同様に扱うと思いました。それから私はこの不自然なシナリオを見つけました: final int a = 97; System.out.println(true ? a : 'c'); // outputs a // versus int a = 97; System.out.println(true ? a : 'c'); // outputs 97 どうやら、JLSはここで2つの間に重要な違いをもたらし、その理由はわかりません。 私は次のような他のスレッドを読みました 最終と事実上最終の違い 事実上最終変数と最終変数 「事実上最終的」である変数はどういう意味ですか? しかし、それらはそのような詳細には入りません。結局のところ、より広いレベルでは、それらはほとんど同等であるように見えます。しかし、深く掘り下げると、明らかに異なります。 この動作の原因は何ですか?誰かがこれを説明するいくつかのJLS定義を提供できますか? 編集:私は別の関連するシナリオを見つけました: final String a = "a"; System.out.println(a + "b" == "ab"); // outputs true // …


2
なぜ `private val`と` private final val`が違うのですか?
私はそれを考えるために使用されるprivate valとprivate final val、私はScalaのリファレンスセクション4.1を見るまで、同じです。 定数値の定義は次の形式です。 final val x = e ここで、eは定数式です(§6.24)。最後の修飾子が存在する必要があり、型注釈を与えることはできません。定数値xへの参照自体は、定数式として扱われます。生成されたコードでは、定義の右側に置き換えられます。 そして私はテストを書きました: class PrivateVal { private val privateVal = 0 def testPrivateVal = privateVal private final val privateFinalVal = 1 def testPrivateFinalVal = privateFinalVal } javap -c 出力: Compiled from "PrivateVal.scala" public class PrivateVal { public int testPrivateVal(); Code: 0: …
100 scala  private  final 

7
インターフェースのすべてのフィールドが暗黙的に静的で最終的なのはなぜですか?
インターフェイスで定義されているすべてのフィールドが暗黙的である理由を理解しようstaticとしていfinalます。フィールドを保持staticするという考えは、インターフェイスのオブジェクトを保持できないので私には理にかなっていますが、なぜそれがfinal(暗黙的に)あるのでしょうか。 Javaの設計者がインタフェースのフィールドを作るといった理由いずれかが知っているstaticとfinal?

11
最終的にjavaメソッド引数を作成する
final以下のコードの違いは何ですか。引数を宣言するのいずれかの利点がありますfinal。 public String changeTimezone( Timestamp stamp, Timezone fTz, Timezone toTz){ return .... } public String changeTimezone(final Timestamp stamp, final Timezone fTz, final Timezone toTz){ return .... }

7
最終オブジェクトを変更できるのはなぜですか?
私が取り組んでいるコードベースで次のコードに出くわしました: public final class ConfigurationService { private static final ConfigurationService INSTANCE = new ConfigurationService(); private List providers; private ConfigurationService() { providers = new ArrayList(); } public static void addProvider(ConfigurationProvider provider) { INSTANCE.providers.add(provider); } ... INSTANCEとして宣言されfinalます。なぜオブジェクトを追加できるのINSTANCEですか?それはfinalの使用を無効にするべきではありません。(そうではありません)。 答えはポインタとメモリで何かをしなければならないと思いますが、確かに知りたいです。
89 java  final 

15
Javaで変数にfinalを使用すると、ガベージコレクションが改善されますか?
今日、私の同僚と私はfinal、ガベージコレクションを改善するためのJavaでのキーワードの使用法について話し合っています。 たとえば、次のようなメソッドを作成する場合: public Double doCalc(final Double value) { final Double maxWeight = 1000.0; final Double totalWeight = maxWeight * value; return totalWeight; } メソッド内の変数を宣言するとfinal、メソッドの終了後に、ガベージコレクションがメソッド内の未使用の変数からメモリをクリーンアップするのに役立ちます。 これは本当ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.