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

22
Javaの「最終クラス」のポイントは何ですか?
私はJavaに関する本を読んでいて、クラス全体をとして宣言できると書いてありますfinal。これをどこで使うかなんて考えられない。 私はプログラミングの初心者であり、プログラマが実際にこれをプログラムで使用しているかどうか疑問に思っています。彼らがそうするなら、いつそれを使うのか私はそれをよりよく理解し、いつ使うべきかを知ることができます。 Javaがオブジェクト指向で、クラスを宣言する場合final、オブジェクトの特性を持つクラスの考えを止めませんか?
569 java  final 

18
Javaの「最終」キーワードはどのように機能しますか?(私はまだオブジェクトを変更できます。)
Javaではfinal、変数とともにキーワードを使用して、値を変更しないように指定します。しかし、クラスのコンストラクター/メソッドの値を変更できることがわかります。繰り返しますが、変数がstaticその場合は、コンパイルエラーです。 これがコードです: 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); } } 上記のコードは正常に動作し、エラーは発生しません。 変数をstatic次のように変更します。 private static final …
480 java  final 

11
Javaリフレクションを使用してプライベート静的最終フィールドを変更する
private static finalフィールドを持つクラスがありますが、残念ながら、実行時に変更する必要があります。 リフレクションを使用すると、次のエラーが発生します。 java.lang.IllegalAccessException: Can not set static final boolean field 値を変更する方法はありますか? Field hack = WarpTransform2D.class.getDeclaredField("USE_HACK"); hack.setAccessible(true); hack.set(null, true);

12
Javaのメソッドパラメータで「final」というキーワードを使用する必要があるのはなぜですか?
finalキーワードがメソッドパラメータで使用される場合、キーワードが本当に便利な場所を理解できません。 匿名クラス、読みやすさ、意図宣言の使用を除外すると、私にはほとんど価値がないように見えます。 一部のデータを一定に保つことは、見かけほど強力ではありません。 パラメータがプリミティブの場合、パラメータは値としてメソッドに渡され、変更してもスコープ外では効果がないため、効果はありません。 パラメータを参照渡しする場合、参照自体はローカル変数であり、参照がメソッド内から変更された場合、メソッドスコープの外部からの影響はありません。 以下の簡単なテストの例を考えてみましょう。このテストはパスしますが、メソッドは与えられた参照の値を変更しましたが、効果はありません。 public void testNullify() { Collection<Integer> c = new ArrayList<Integer>(); nullify(c); assertNotNull(c); final Collection<Integer> c1 = c; assertTrue(c1.equals(c)); change(c); assertTrue(c1.equals(c)); } private void change(Collection<Integer> c) { c = new ArrayList<Integer>(); } public void nullify(Collection<?> t) { t = null; }

14
最終版と効果的な最終版の違い
私はJava 8でラムダで遊んでいて、警告に出くわしましたlocal variables referenced from a lambda expression must be final or effectively final。匿名クラス内で変数を使用する場合、それらは外部クラスでfinalでなければならないことは知っていますが、それでも-finalと実質的にfinalの違いは何ですか?

13
Javaでfinalキーワードを使用すると、パフォーマンスが向上しますか?
Javaでは、finalキーワードを使用できる場所がたくさんありますが、その使用は一般的ではありません。 例えば: String str = "abc"; System.out.println(str); 上記の場合、strは可能ですfinalが、通常は省略されます。 メソッドがオーバーライドされない場合は、finalキーワードを使用できます。同様に継承されないクラスの場合。 これらのケースのいずれかまたはすべてでfinalキーワードを使用すると、本当にパフォーマンスが向上しますか?もしそうなら、どのように?説明してください。finalパフォーマンスを適切に使用することが重要である場合、Javaプログラマーはキーワードを最大限に活用するためにどのような習慣を身につけるべきですか?
347 java  final 


20
別のメソッドで定義された内部クラス内の非final変数を参照できません
編集:タイマーによって数回実行されるため、いくつかの変数の値を変更する必要があります。タイマーを介してすべての反復で値を更新し続ける必要があります。値をfinalに設定できないため、値を更新できませんが、以下の最初の質問で説明するエラーが発生します。 私は以前に以下のものを書いていました: 「別のメソッドで定義された内部クラス内の非final変数を参照できません」というエラーが発生します。 これは、priceと呼ばれるdoubleと、priceObjectと呼ばれるPriceで発生します。なぜこの問題が発生するのか知っていますか。最終申告が必要な理由がわかりません。また、私が何をしようとしているのかがわかる場合は、この問題を回避するために何をしなければなりませんか。 public static void main(String args[]) { int period = 2000; int delay = 2000; double lastPrice = 0; Price priceObject = new Price(); double price = 0; Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { price = priceObject.getNextPrice(lastPrice); System.out.println(); lastPrice = price; …

11
「静的な最終ロガー」は大文字で宣言する必要がありますか?
Javaでは、静的なfinal変数は定数であり、慣習として、それらは大文字でなければなりません。しかし、ほとんどの人がロガーを小文字で宣言し、それがPMDの違反として現れるのを見てきました。 例えば: private static final Logger logger = Logger.getLogger(MyClass.class); googleまたはSOで「静的な最終ロガー」を検索すると、これが表示されます。 代わりにLOGGERを使用する必要がありますか?

6
Javaでfinalと宣言されている文字列と==の比較
Javaの文字列について簡単な質問があります。次の単純なコードのセグメントは、2つの文字列を連結し、それらをと比較するだけ==です。 String str1="str"; String str2="ing"; String concat=str1+str2; System.out.println(concat=="string"); 比較式のconcat=="string"戻りfalse明らかなように(私は違いを理解するequals()とし==)。 この2つの文字列がfinalそのように宣言されている場合、 final String str1="str"; final String str2="ing"; String concat=str1+str2; System.out.println(concat=="string"); concat=="string"この場合、比較式はを返しますtrue。なぜfinal違いがあるのですか?それはインターンプールで何かをしなければならないのですか、それとも私はただ惑わされていますか?
220 java  string  final 

5
インターフェイスメソッドの最後の引数-要点は何ですか?
Javaではfinal、インターフェースメソッドで引数を定義することは完全に合法であり、実装クラスではそれに従わないでください。例: public interface Foo { public void foo(int bar, final int baz); } public class FooImpl implements Foo { @Override public void foo(final int bar, int baz) { ... } } 上記の例では、barとbaz反対有するfinal界面VSクラスの定義。 同様にfinal、1つのクラスメソッドが別のクラスメソッドを拡張する場合でも、拡張しabstractない場合でも、制限は適用されません。 しながら、finalクラスメソッド本体内部のいくつかの実用的な値を有する、特定の任意の点が存在するfinalインターフェイスメソッドパラメータのか?
189 java  class  interface  methods  final 

6
最終的な定義は不適切ですか?
まず、パズル:次のコードは何を出力しますか? public class RecursiveStatic { public static void main(String[] args) { System.out.println(scale(5)); } private static final long X = scale(10); private static long scale(long value) { return X * value; } } 回答: 0 下のネタバレ。 Xscale(long)で印刷してを再定義するX = scale(10) + 3と、印刷はにX = 0なりX = 3ます。つまり、Xは一時的にに設定され0、後でに設定され3ます。これは違反ですfinal! static修飾子は、final修飾子と組み合わせて、定数の定義にも使用されます。最後の修飾子は、このフィールドの値を変更できないことを示しています。 ソース:https : //docs.oracle.com/javase/tutorial/java/javaOO/classvars.html [強調を追加] 私の質問:これはバグですか?されfinal不明確な? …

11
Javaで継承を禁止する理由は何ですか?
Javaでの継承を禁止する正当な理由は何ですか(たとえば、最終的なクラスを使用したり、単一のプライベートなパラメーターのないコンストラクターを使用したクラスを使用したりすることによって)。メソッドをfinalにする正当な理由は何ですか?
178 java  inheritance  final 


15
メソッドのパラメーターとローカル変数にfinalを使用する必要があるのはいつですか?
可能な限り使用することを提案する参考文献(たとえば)をいくつか見つけましたが、finalそれがどれほど重要か疑問に思っています。これは主に、メソッドパラメータとローカル変数のコンテキストであり、最終的なメソッドやクラスではありません。定数の場合、それは当然のことです。 一方では、コンパイラーはいくつかの最適化を行うことができ、プログラマーの意図をより明確にします。一方、冗長性が追加され、最適化は簡単な場合があります。 覚えておくべきなのでしょうか?
171 java  final 

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