IはJLS 8 and in Chapter 6を読んだが書き込まれる:簡単な名前と修飾名
ので、私はこれを持っていることを想像できますを修飾名NxがNは単純又は修飾名であり、パッケージまたは 参照タイプのメンバーを指すために使用することができますxは 識別子です。 Nがパッケージに名前をつけた場合、xはそのパッケージのメンバであり、 はクラスまたはインターフェイスタイプまたはサブパッケージです。 Nの名前 が参照タイプまたは参照タイプの変数である場合、xは というタイプのメンバー(クラス、インターフェイス、フィールド、 またはメソッド)の名前を付けます。
c.n
が修飾名である一方、
class C
{
public int n;
}
int j;
C c = new C();
j = 11;
c.n = 11;
j
は単純な名前です。
しかし、6.2では状況が複雑になります。このコード与えられる:
class Test {
public static void main(String[] args) {
Class c = System.out.getClass();
System.out.println(c.toString().length() +
args[0].length() + args.length);
}
}
と後のであることを特徴とする:args.length が修飾名(§6.5.6.2)であるため
args.lengthの長さの発生は名前とフィールドアクセス式 (15.11)ではありません。フィールドアクセス式とメソッド呼び出し 式、メソッド参照式、および修飾されたクラス インスタンス作成式は、名前ではなく識別子を使用して、 が対象のメンバーを示します。したがって、 のargs [0] .length()の長さの出現は名前ではなく、 に表示される識別子で、メソッド呼び出し式に現れます。
ので、私は私がいないすべての式が修飾名と も私の表現c.n
であることを理解だと思う正直なところ、私は違いを理解することはできません誰も私を助けることができますか?あなたのexempleで
いくつかのリンクを追加する場合は、参照している仕様のセクションを読む方が簡単です。 –
ここであなたが理解しようとしていることは何ですか?私は間違っていない、私は質問をノックしていない、私はこのようなものを見つけるためにJLSを読むのが大好きだが、私は区別するために苦労していると言わなければならない - そして、仕様の一般性ではなく、問題の具体的な状況を把握する必要があります。 –