2012-03-13 15 views
9

クラスにはいくつかのインポートステートメントがあります。バイトコードがそのクラスに対して生成されると、これらのインポート文はどうなりますか?インポートステートメントバイトコードの意味

実行時にインポートステートメントが無視される場合、実行時にそのクラスメソッドの依存関係はどのように解決されますか。

+4

自分で見つけてみませんか?クラスのいくつかのバリエーションを書く:外部クラスに依存するもの、依存するもの(例えば、インポートによって 'java.util.List')、' List'に頼っているものの、完全なものを使用するもの)。そして、それぞれに 'javap -c'を使い、何が出てくるのかを見てください。 – yshavit

+1

@yshavitコメントと相補的に、コンパイル時に、 '.class'ファイル内のデバッグ情報(例えば行番号)を生成しないために' javac -g:none Foo.java'を使用し、生成された '.class'esバイトレベルでは同じになり、それぞれのハッシュを取得することでテストできます。 –

答えて

9

インポートステートメントの目的は、コードの人間の読者(および作成者)の生活を楽にすることです。したがって、バイトコード内の完全修飾クラス/メソッド名への参照に置き換えられます。また、未使用のインポート文は無視されます。あなたがjava.util.*をインポートする場合、あなたのコード内でjava.util.ArrayListを記述する必要はありませんが、ArrayList

1

輸入はただ速記

ですあなたのコードで無制限にアクセスできるクラス名(または静的メソッド名)(つまり、の代わりにfoo.bar.MyClass)を知っています。その背後では、完全に修飾されたクラス名に解決するためだけに使用され、バイトコードでも同様に使用されます。

1

import文はそれので、コンパイラのためにのみ存在し、書き込みができるようにJavaで

+1

これは、修飾されていない名前*を完全修飾名に解決するために使用されます。 – EJP

+0

それは私が言ったことです。私はまだ半分眠っている間に外国語で書くべきではありません;) – Joey