2013-10-01 92 views
0

在PHP中,我可以有一個文件,像這樣:包含類滿的可重複使用的功能,另一類

function isPrime($num) 
{ 
    return true; 
} 

function sayYes() 
{ 
    echo "yes\n"; 
} 

這將是一個名爲functions.php名爲mycode文件夾中的文件。
我有另外一個文件:

include "../functions.php"; 
if (isPrime()) { 
    sayYes(); 
} 

這是在一個名爲file1.php名爲file1文件夾中的文件。 file1文件夾位於mycode文件夾內。

這個例子的一點是,我有一大堆,我希望能夠重新使用在其他文件中的函數的文件。我將有mycode文件夾(file1file2file3等)內的多個文件夾。這些子文件夾中的所有代碼與所有其他子文件夾中的所有代碼完全分離且無關。但是,我希望在所有子文件夾中的代碼中使用一些通用函數,因此它被放置在頂層文件夾中。

在Java中,我有一個文件,像這樣:

package com.awesome.mycode.file1; 

public class File1 
{ 
    public static void main(String[] args) 
    { 
     MyCodeFunctions.sayYes(); 
    } 
} 

這是一個在同一個文件夾file1如上命名File1.java文件。
我還有一個文件,就像這樣:

package com.awesome.mycode; 

public class MyCodeFunctions 
{ 
    public static void sayYes() 
    { 
     System.out.println("yes"); 
    } 
} 

這是一個名爲MyCodeFunctions.java文件,在同一個文件夾mycode如上。

我的問題是這樣的:
我如何編譯這兩個類,這樣我可以在文件夾下的許多不同的子文件夾,其中MyCodeFunctions.java位於重用班級MyCodeFunctions.java?我需要在File1.java的頂部放置什麼樣的import?我需要將MyCodeFunctions.java編譯成JAR文件嗎?如果是這樣,怎麼樣?在編譯File1.java時,我在命令行上運行什麼來鏈接這個JAR文件?

我明白,這是一個不同的模式的那種include陳述你在語言如PHP找到。這是這個問題的重點。我知道有一個區別,我想知道在Java範例中做什麼的等效方式。我不想使用IDE來做到這一點,對我來說手動操作有多複雜並不重要。

我使用Linux要做到這一點,但我可以很容易地做到這一點在Windows機器上。

+0

只是'進口' 也許這有助於: http://stackoverflow.com/questions/10834589/netbeans-how-can-i-include-external-jar-fileslibraries-in-the-jar-file-of -my – YAMM

回答

2

在Java中,你可以使用import聲明:

package com.awesome.mycode.file1; 

import com.awesome.mycode.MyCodeFunctions; 

public class File1 
{ 
    public static void main(String[] args) 
    { 
     MyCodeFunctions.sayYes(); 
    } 
} 

import是不需要在同一個包中的類。

由於sayYes()static功能,有一個變化,將允許您使用的功能沒有類限定符:

package com.awesome.mycode.file1; 

import static com.awesome.mycode.MyCodeFunctions.sayYes; 

public class File1 
{ 
    public static void main(String[] args) 
    { 
     sayYes(); 
    } 
} 

您可以使用*作爲通配符在最後一個位置導入所有類(對於import語句)或所有靜態成員—兩個字段和方法& mdash(對於import static語句)。

編輯

要編譯這兩個文件,源代碼樹應該是這樣的:

/com 
    /awesome 
     /mycode 
      /file1 
       File1.java 
      MyCodeFunctions.java 

要編譯,CD包含/com的文件夾,然後使用命令行:

javac com/awesome/mycode/MyCodeFunctions.java com/awesome/mycode/file1/File1.java 

以及您想要的任何其他選項(控制輸出等)請參閱javac docs瞭解更多信息。

+0

把'import com.awesome.mycode.MyCodeFunctions;'放在文件的頂部就是我已經在做的事情,它不起作用。如果這是適當的導入語句,那麼我需要知道如何告訴編譯器MyCodeFunctions與文件夾1中的文件夾不同。 –

+0

@MatthewG - 查看[創建和使用包教程](http ://docs.oracle.com/javase/tutorial/java/package/packages.html),瞭解如何讓編譯器做你想做的事情(特別是[管理源文件和類文件]的小節(http:// docs .oracle.com/JavaSE的/教程/ JAVA /包/ managingfiles.html))。 –

+0

我試圖運行'javac File1.java ../ MyCodeFunctions.java','javac -cp .. File1.java','javac -cp ../MyCodeFunctions.java File1.java','javac -cp。 ./MyCodeFunctions.jar File1.java'(將MyCodeFunctions.java編譯成一個jar文件)以及試圖讓代碼編譯的許多其他變體,都沒有成功。在我指向的鏈接上實際上沒有任何編譯命令的例子。 –

相關問題