2016-08-21 5 views
0

私はJavaを完全に新しくして、Javaコンパイラが別のクラスのあるクラスのオブジェクトを作成する方法について疑問を投げかけました。例えば:私はmainメソッドを持つクラスB持つJavaコンパイルによって、あるクラスのオブジェクトが別のクラスに作成される方法は?

class A{} 

私は以下のようにクラスAを持っている。ここ

class B { 

    public static void main(String[] args){ 

     A a = new A(); 

     System.out.println(a); 

    } 

} 

は質問です:私は1つの別個txtファイルにクラスAを書きましたクラスBは別のtxtファイルにあります。私が "クラスB"をコンパイルするときクラスBのクラスAのトレースがないので、コンパイラが "クラスA"が存在することをコンパイラがどのように知っているか。クラスAのパスを与えず、クラスAが存在するという手がかりを与えていない。しかし、JavaコンパイラがクラスBのクラスAのオブジェクトを認識して作成する方法は、これは愚かな質問かもしれませんが、答えなしでさらに進めることはできません。前もって感謝します。

+0

Javaコンパイラは、実際にこれらのファイルを見つけるためにあなたのハードドライブに見えます。 '-classpath'オプションを使って手作業で探すパスを設定することができます。 http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html – markspace

+0

コンパイラはオブジェクトを作成せず、コンパイル時にそのクラスの参照タイプの互換性と可用性を確認するだけです(ここではclass B級のA)。したがって、クラスローダーはクラスAを最初にロードし、クラスBはクラスAがクラスAに依存するため、クラスBをロードします。オブジェクトの作成は実行時に行われます。コンパイル時と実行時の動作が分かれば、ほとんどの疑問が解決されます。 ref:http://stackoverflow.com/questions/20796046/flow-of-class-loading-for-a-simple-program、http:// www。javaworld.com/article/2077260/learn-java/learn-java-the-basics-of-java-class-loaders.html – dkb

+0

-http://stackoverflow.com/questions/39060422/how-java-compiles-creates -objects-of-one-class-in-another-class]ありがとう.. @dkb – Javabie

答えて

1

クラスが同じパッケージ内にある場合、コンパイラは自動的にそれらを検索します。それ以外の場合は、「インポート」式を追加する必要があります。例えば、import example.classA;

+0

ありがとう.. Julieta ... – Javabie

0

Javaオブジェクトを作成するときは、「オブジェクトの作成」と「そのオブジェクトへの参照の作成」という2つの主要な部分があります。
コンパイラは参照部品のみをチェックしています。つまり、参照のタイプをチェックします(あなたのケースではタイプはクラスAです)。 オブジェクトが作成されているかどうかは気にしません。
javaファイルをコンパイルすると.classファイルが作成され、コンパイラーはローカルディスク内のクラスファイルを見つけて読み取る方法を知っています。

+0

[http://stackoverflow.com/questions/39060422/how-java-compiles-creates-objects-of-one-class-in-another-class]ありがとう@Lashitha Yapa – Javabie

0

Java言語で記述されたソースファイルは、javacというツールを使用して.classファイルにコンパイルされます。

のjavacを実行する必要があることを二つのものがあります。

1) 2をコンパイルするソースファイルのリスト)他の.classファイル、または.javaファイル(またはjarファイルをハードドライブ上のパスのリスト)ファイルは、ソースコード内で参照する場合に配置されます。このパスのリストはクラスパスと呼ばれます。

javacを呼び出すときにクラスパス引数を指定しないと、javacは現在のディレクトリを使用して.javaまたは.classファイルを検索します(CLASSPATHという環境変数がある場合は、そこにも表示されます)。

例では、javacがClassAをコンパイルすると、ClassBに依存していることがわかり、ClassAと同じディレクトリでClassB.javaを検索しようとします。

IDEを使用してコンパイルする場合、IDEはjavacが実行する必要がある引数を入力します。

あなたはここにjavacの詳細を読むことができます:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html

+0

ありがとうあなたは@jrahhali – Javabie

関連する問題