私はthis question on legality of forward referencesまで行っていますが、Java言語でforward references
の意味が明確ではありません。誰かが例の助けを借りて説明してもらえますか?Javaでは前方参照と呼ばれるものはありますか?
答えて
特にこれはコンパイルエラーです。クラス変数の宣言の順序付けについてのすべてです。のは、例示的な目的のためにいくつかのコードを使用してみましょう:
public class ForwardReference {
public ForwardReference() {
super();
}
public ForwardReference echoReference() {
return this;
}
public void testLegalForwardReference() {
// Illustration: Legal
this.x = 5;
}
private int x = 0;
// Illustration: Illegal
private ForwardReference b = a.reference();
private ForwardReference a = new ForwardReference();
}
あなたが見ることができるように、Javaは、変数の宣言は後の方法来る場合でも、あなたはクラスメソッドに変数クラスを参照することができます。これは(正式な)前方参照の例であり、これに対するサポートはJavaコンパイラに組み込まれています。
あなたはいえないできること、クラス変数を宣言している「」それはまだ宣言されていない別のクラス変数「B」に依存します。従属クラスの変数宣言は、その依存関係の逆の順序で現れなければならない。
コードに不正な参照エラーが含まれている場合、ほとんどの場合、ほとんどのIDEが警告します。
不正な転送参照は、JLSのsection 8.3.2.3に記載されています。
簡単に言えば、コードファイルのさらに下にある(変数にアクセスし、関数を呼び出す)ことを意味します。
static int x=getY();
static int y=5;
static int getY() { return y; }
- Xの値をyの値は5
- Xの値に設定される前に呼び出されるのgetY()
- のgetY()の結果に設定され、したがって、0(デフォルトの整数)
- yの値は5
それはあなたが
int c = 3
int a = b;
int b = 5;
を持っている場合、コンパイラは、上から下にそれを読んでますので、それは変数を宣言SE最初のライン、「意志、基本的なものは、コンパイラによって読み込まれていることを単に順番ですc 'に変換し、それを3に代入すると、それはうまくいきます。次に、変数' a 'を宣言する2行目に遭遇し、次にそれを' b 'に割り当てようとします。
今、コンパイラには問題があります:これは "b"のことですか?コンパイラにはまだ宣言されていないので、 'c'についてはまだ学習していますが、最近では 'a'ですが、 'b'という知識はありません。そうすれば、コンパイラはすべての混乱を処理することができないので、停止し、怒らせるために行ったことを理解することができます。
したがって、前方参照部分はまだ存在しないものへの参照になります。フォワード
public class AnyCode {
void print() {
System.out.println("Value of j - " + j); // legal
System.out.println("Value of i - " + i); // legal
}
// CASE - 1
int k = i; // illegal
int i;
// CASE - 2
int l = j; // legal
static int m = j; // illegal
static int j;
// CASE - 3
A aObj = bObj; // illegal
B bObj = new B();
public static void main(String[] args) {
/*
Note :- here anyCode act as a local variable and get space on stack
whereas the object it is referring to is present on heap. And you
cannot forward reference a local variable.
*/
anyCode.print(); // 'Cannot find symbol' error
AnyCode anyCode = new AnyCode();
}
}
class A {
}
class B {
}
..おそらく時間で********* CASEを参照してください - 1 *********
はフォワードインスタンス変数は、コンパイラとして許可されていない参照しません私たちは前方参照している値の型を確かめるか、そのような変数が存在しない可能性もあります。
は例を考えてみましょう: -
int a = b;
boolean b = false;
前方参照は、上記の場合には許可されている場合、それは大混乱を作成することがあります。上記の例では
int a = b; // What is b? is it a primitive variable or a value or a object reference
iがBを宣言するために、現在、そのような割り当ては、Javaで許可された場合、それは悪夢であろうないことを決定しました。 2 *********
静的変数は、インスタンス変数の前にロードされ、従って、前方静的変数を参照し、インスタンス変数に割り当てるしている -
********** CASE参照完全に細かいです
- 1. ローカル参照変数は合成とも呼ばれますか?
- 2. Javaでメソッド参照を渡す方法はありますか?
- 3. ローカルスタティックインナークラスと呼ばれるものがありますか?
- 4. 、非セッションイベントと呼ばれるものがありますか?
- 5. 間違っ前方参照Javaでかなり頻繁に
- 6. PHP5で参照される文字列はありますか?
- 7. パターンへの参照と逆参照された値との照合に違いはありますか?
- 8. C++にJavaの弱参照に類似したものがありますか?
- 9. 「これは何ですか?」平均とJavaで参照する
- 10. Javaの戻り参照値(または参照によって)
- 11. オブジェクトへの参照がある場合、Javaセッションが期限切れになることはありますか?
- 12. オブジェクト参照変数の型が参照するオブジェクトの型と異なるJavaのメカニズムがありますか?
- 13. rvalue参照がlvalue参照よりも安全と考えられるのはなぜですか?
- 14. 「ng2」は角2とともに参照されますか?
- 15. この場合、循環参照をリファクタリングまたは修正する方法はありますか? Javaの
- 16. C++では、変数にrvalue型の参照があると言っても意味がありますか?
- 17. 参照テーブルからの最初の照合参照値でのみ、参照テーブルからデータを取得する方法はありますか?
- 18. genericsetupのインポート手順の名前の参照リストはありますか
- 19. 前方参照と再帰
- 20. スカラ座と前方参照
- 21. Swiftで現在のモジュールを参照する方法はありますか?
- 22. Visual Studioコードでプロジェクト(フォルダ)をあまりにも多く参照することはできますか?
- 23. C前方参照構造 - 1)はポインタでなければなりませんか? 2)を初期化する必要がありますか?
- 24. 異なるデータ型で列を参照する方法はありますか?
- 25. .NETでオブジェクトを参照しているものを見つける方法はありますか?
- 26. Java用の弱参照コピーオンライトセットのオープンソース実装はありますか?
- 27. 参照はアクティブシートエラーである必要があります。
- 28. Bean IDの名前と参照名は常に同じでなければなりませんか?
- 29. フリーリスト(PyDict_ClearFreeListが参照するもの)とは何ですか?
- 30. JS:関数と呼ばれるオブジェクトを知る方法はありますか?