Javaコンパイラに関するいくつかの質問があります。Javaコンパイラに関するいくつか質問があります
私の現在のディレクトリは、次のようなものです。
├── Hoge.java
├── Sample.class
├── Sample.java
├── pattern01
│ └── com
│ └── cat
│ └── Hoge.class
└── pattern02
└── com
└── cat
└── Hoge.class
----- ----- Sample.java
import com.cat.Hoge;
public class Sample {
public static void main(String[] args) {
System.out.println("hello!");
Hoge h = new Hoge();
h.call();
}
}
----- ----- pattern01
package com.cat;
public class Hoge {
public void call() {
System.out.println("com.cat");
System.out.println("pattern01");
}
}
----- pattern02 -----
package com.cat;
public class Hoge {
public void call() {
System.out.println("com.cat");
System.out.println("pattern02");
}
}
このようにSample.javaをコンパイルしました。
$ javac -cp pattern01 Sample.java
そして、このように実行します。
$ java -cp .:pattern01 Sample
hello!
com.cat
pattern01
$ java -cp .:pattern02 Sample
hello!
com.cat
pattern02
通常、パターン01とパターン02の両方が終了する。
しかし、私はpattern01でコンパイルしました。なぜプログラムはpattern02で正常終了したのですか?
コンパイラチェックとは何ですか?コンパイラはクラス名だけをチェックしますか?