2011-10-10 65 views
0

我剛剛發現了這一點,我希望有人知道發生了什麼。命令如下(在臨時目錄中運行此,事先清除一切):Java中的編譯接口

沒有問題:

cat <<EOF> Myface.java 
public interface Myface {} 
EOF 

cat <<EOF> Myclass.java 
public class Myclass implements Myface {} 
EOF 

javac Myface.java 
javac Myclass.java 

MYCLASS不會編譯:

cat <<EOF> Myface.java 
package Mypackage; 
public interface Myface {} 
EOF 

cat <<EOF> Myclass.java 
package Mypackage; 
public class Myclass implements Myface {} 
EOF 

javac Myface.java 
javac Myclass.java 

MYCLASS不會編譯:

cat <<EOF> Myface.java 
package Mypackage; 
public interface Myface {} 
EOF 

cat <<EOF> Myclass.java 
package Mypackage; 
public class Myclass implements Myface {} 
EOF 

javac Myclass.java 

這是怎麼回事?

編輯:所有的命令,運行:

[email protected]:~$ ls 
[email protected]:~$ pwd 
/home/javatest 
[email protected]:~$ cat <<EOF> Myface.java 
> public interface Myface {} 
> EOF 
[email protected]:~$ 
[email protected]:~$ cat <<EOF> Myclass.java 
> public class Myclass implements Myface {} 
> EOF 
[email protected]:~$ 
[email protected]:~$ javac Myface.java 
[email protected]:~$ javac Myclass.java 
[email protected]:~$ ls 
Myclass.class Myclass.java Myface.class Myface.java 
[email protected]:~$ rm * 
[email protected]:~$ cat <<EOF> Myface.java 
> package Mypackage; 
> public interface Myface {} 
> EOF 
[email protected]:~$ 
[email protected]:~$ cat <<EOF> Myclass.java 
> package Mypackage; 
> public class Myclass implements Myface {} 
> EOF 
[email protected]:~$ 
[email protected]:~$ javac Myface.java 
[email protected]:~$ javac Myclass.java 
Myclass.java:2: cannot find symbol 
symbol: class Myface 
public class Myclass implements Myface {} 
           ^
1 error 
[email protected]:~$ rm * 
[email protected]:~$ cat <<EOF> Myface.java 
> package Mypackage; 
> public interface Myface {} 
> EOF 
[email protected]:~$ 
[email protected]:~$ cat <<EOF> Myclass.java 
> package Mypackage; 
> public class Myclass implements Myface {} 
> EOF 
[email protected]:~$ 
[email protected]:~$ javac Myclass.java 
Myclass.java:2: cannot find symbol 
symbol: class Myface 
public class Myclass implements Myface {} 
           ^
1 error 
[email protected]:~$ 
+0

你可以顯示你運行的命令,你運行它們的文件夾以及編譯器輸出的錯誤消息嗎? –

+4

Java/Class文件必須根據它們的包放在子文件夾結構的類路徑中。也許這是這裏的問題。 – Gandalf

+0

@Michael好的,完成了。 –

回答

1

是的,我們去吧: Java/Class文件目錄結構必須與Java類聲明的包結構匹配,以便編譯和類加載正常工作。

0

雖然編譯Myclass.java添加類路徑選項

javac -classpath . Myclass.java 
0

案例2:當你編譯Myclass.javajavac將尋找Mypackage/Myface.class。那不是。您應該使用javac -d .進行編譯,javac爲其生成的類創建適當的目錄結構。這也隱含在下一個javac調用的搜索路徑中。案例3:當您編譯Myclass.java時,它會查找Mypackage/Myface.class,然後在命令行上給出合適的源文件,然後在Mypackage/Myface.java中找到合適的源文件。兩者都不存在。可以使用javac -d Myface.java Myclass.java進行編譯,也可以將*.java轉換爲由軟件包名稱指示的相應目錄結構。