2010-07-24 55 views
8

我們何時實際使用包關鍵字?這是什麼意思?Java中的包裝

假設我寫了下面的代碼:

package masnun;  
public class masnun{ 
    public static void main(String args[]) { 
      System.out.println("Hello maSnun!"); 
     } 


} 

這是什麼東西包呢?我得到一個不運行的masnun.class文件。我是Java新手。有人可以解釋一下嗎?

感謝

+1

此問題的答案可能有所幫助:http://stackoverflow.com/questions/1088509/what-is-the-purpose-of-defining-a-package-in-java-file – BoltClock 2010-07-24 13:18:02

回答

13

由於我不是這些其他答案的粉絲,我會寫我自己的。


現實世界的例子:

「包」作爲一個Java類引用另一個簡單的方法的思考。

假設我在閣樓上有這個大箱子。我有一個計算器,指南針,量角器等,我可以給這個盒子打上標籤MathTools

另一個例子是將您的所有照片放入文檔的Pictures文件夾中。從那裏,你可以將它們分成Spring Break 2009[Insert Name Here]'s Party

這與Java有什麼關係?那麼,讓我們看看java.util包(你可以參考import java.util.*;。你有ArrayLists,Strings,Random等等,它們在大多數Java程序中使用(如果你願意,可以使用常見的「工具」)。相同的封裝,使程序員可以很容易地引用它們(import java.util.*;


簡單應用:

假設我們能找到的所有文件到C:/Program Files/Java Project/my/proj/小骰子模擬器(很可能該文件在您的計算機上不存在,但只是假裝片刻)

您有3個文件:Main.java,Dice.javaDiceRoller.java。所有這些如下所示:

「C:/ PROGRAMFILES/Java項目/我的/凸出/主/ Main.java」:

package my.proj.main; 

import my.proj.sims.Dice; 

public class Main 
{ 
    public static void main(String[] args) 
    { 
     DiceRoller roller = new DiceRoller(); 
     roller.rollAndShow(4); 
    } 
} 

「C:/ PROGRAMFILES/Java項目/我的/凸出/ SIMS/Dice.java」:

package my.proj.sims; 

import java.util.Random; // I used the Random class, but you can also use the Math class if you prefer (java.lang.Math) 

public class Dice 
{ 
    public Dice() 
    { 
    } 

    public int roll() 
    { 
     Random rand = new Random();  
     return rand.nextInt(6) + 1; // Rolls a random number 1-6 
    } 
} 

「C:/ PROGRAMFILES/Java項目/我的/凸出/ SIMS/DiceRoller.java」:

package my.proj.sims; 

public class DiceRoller 
{ 
    public DiceRoller() 
    { 
    } 

    // Rolls and prints the result of 'n' number of rolls 
    public void rollAndShow(int n) 
    { 
     Dice dice = new Dice(); 

     for (int i = 0; i < n; i++) 
     { 
      System.out.println(dice.roll()); // You should never use S.o.p in a method - it's bad practice, but it's easier this way if you don't yet understand the concept of objects 
     } 
    } 
} 

事情需要注意:

  • Main.java被包裝成my.proj.main
  • Dice.java被包裝成my.proj.sims
  • Main.java需求,以創造一個Dice對象,並使用它的方法,因爲它是在導入my.proj.sims.Dice來自Dice.java的不同包裝。
  • DiceRoller.java不需要導入my.proj.sims.Dice,因爲它與Dice.java位於同一個包中,編譯器會自動關聯這兩者。

Import是將類的功能加載到當前文件的命令。例如,看看Dice.java。爲了創建一個Random對象,其方法爲nextInt(),它需要從java.util.*包中導入Random類。

你可能會發現有些人寧願用java.util.*代替java.util.Randomjava.util.ArrayList等什麼*基本上意味着距離java.util任何類。運行import java.util.*將導入Random,String,ArrayList等類。

希望這可以解決問題。請考慮upvoting,如果這有助於你:)

+0

嘿,太棒了!你吃完了嗎?我在等待! :)感謝您的時間和精力。 – masnun 2010-07-25 14:27:15

+0

感謝您的努力和時間。我如何編譯它? – masnun 2010-07-25 14:29:26

+0

@maSnun:嘿。對不起,我昨天沒有時間了。你在使用IDE(Eclipse,JCreator,NetBeans等)嗎?你安裝了最新的JDK(java開發工具包 - http://java.sun.com/javase/downloads/widget/jdk6.jsp)嗎? – 2010-07-25 15:36:24

1

「套餐無非是我們根據自己的功能文件組織到不同的目錄,可用性以及類別,他們應該屬於更多的方式。」來自:​​

基本上,在你的例子中,你說的masnun類是軟件包masnun的包。所以基本上在其他類中,您可以通過導入masnun來引用此類;其中導入了駐留在masnun包中的類masnun。

+0

我是否需要安排特定組中的類文件?也許就像將masnun.class放到名爲masnun的目錄中一樣? 我還是不明白。當我使用該命令 - 導入masnun; ,真的發生了什麼? JVM在哪裏查找包?或者它是否在尋找課堂? 我的意思是什麼讓我通過使用命令「java masnun」運行該文件? – masnun 2010-07-24 14:56:08

+0

@maSnum:是的,標準Java類加載器在目錄層次結構中查找與包層次結構相對應的類。基本上,導入masnum.MyClass在任何類路徑根目錄(通常包括當前目錄)中的directoy masnum中查找文件MyClass.class。 – 2010-07-24 15:41:09

+0

我打算試着回答這個問題,但是:這些是Java的基本原理,對於我們以問答形式完成整個Java教程是沒有意義的。你會更好地閱讀(和工作)一個[Java教程](http://www.programmingtutorials.com/java.aspx)或兩個。 – 2010-07-24 15:44:23

3

軟件很可能擁有名爲Logger,Database,Connection,Table等的類。 軟件包將這些類的範圍分開,因此您不會遇到重複的 classnames的問題。

舉幾個例子:

  • 的Java *
  • org.apache **
  • com.yourcompany.yourproject。

如果您不想使用destinct包中的類,則需要導入它們.i.g。

import java.util.Date 

import java.sql.Date 
2

它是這樣一個組織源文件的方式。一個包含多個類文件,一個類文件只包含一個公共類,一個類包含多個方法和變量。

2

Java中的package語句用於對幾個相關的類進行分組。如果您有與數據庫交互的專門處理類,這將是合乎邏輯的,把它們放在下

com.example.myapp.persistence 

這也提供了名稱空間的采邑,記得在一個Java類身份運行的部分是它完全合格名字,那就是,通過它的包名

com.example.myapp.persistence.UserDAO 

像前面當你的應用程序擴展,以適應比幾個類更多的類名,它是既實用又一個很好的做法,組織他們在包

0

在外行期間,讓我們假設在一所大學裏有像科學,藝術等多個部門。現在每個部門都有一些員工。就對象而言,可以有多個Employee類,所以在java中有一個限制,即我們不能將兩個類放在同一個名稱中。所以程序員應該使不同的包在應用程序中存儲具有相同名稱的不同類。