2011-11-03 82 views
3

我最近开始使用Eclipse IDE,并在许多地方阅读过,不应该使用默认(src)软件包并创建新软件包。
我只是想知道背后的原因。为什么我们不应该使用(默认)src包?

+2

您是否检查[this](http://stackoverflow.com/questions/283816/how-to-access-java-classes-in-the-default-package)?它没有提供任何理由,但解释说,默认包在所有情况下都不起作用。也许这就够了... – home

+1

默认包不是'src',它有一个空的名字。 – EJP

回答

12

使用默认包可能会创建命名空间冲突。想象一下,你正在创建一个包含MyClass类的库。有人在你的项目中使用你的图书馆,并且在他的默认包装中还有一个MyClass类。编译器应该做什么? Java中的包实际上是一个完全标识你的项目的名称空间。因此,不要在现实世界的项目中使用默认包。

+0

Thanx的快速回复.. :) – YetAnotherG33k

+0

编译器应该做的_first_事情是提供一个短暂的,尖锐的电动颠簸睾丸(显然调整女性的身体部位)一个类名称MyClass。哦,对不起,这是一个_example,_我的道歉:-) – paxdiablo

+0

@paxdiablo,=))) – Egor

1

Java使用该包作为区分类的方式。通过使用包,你可以有一个org.example.Something类和org.example.extended.Something类,并且能够区分它们,即使它们都被命名为Something。由于它们的包是不同的,你可以在同一个项目中使用它们。

+1

以上,加上它通常是一个更好的做法,以结构化的方式组织事情。例如,您可能不会将所有文件保存在桌面上的计算机上。它可以正常工作,但将逻辑上相似的东西组合在一起更有意义。 – DaveyDaveDave

+1

@戴维,我的妻子在她的收件箱中保存了她自1990年以来收到的任何一封电子邮件。这是可怕的讨厌:-) – paxdiablo

1

通过声明一个包,您可以定义自己的名称空间(对于类)。这样,如果你有两个相同的类,使用不同的包名称(名称空间)将区分你想使用哪一个。

4

最初,它的目的是确保不同部分Java代码之间没有冲突。

因为Java是为了在任何地方运行和过网(这意味着它可能来自Sun,IBM,甚至李四和狡猾的软件公司私人有限公司回暖位),我拥有paxdiablo.com的事实(我实际上并不假设我假装为了这个答案而做)意味着可以安全地拨打我的所有代码com.paxdiablo.blah.blah.blah并且这不会干扰任何其他人,除非他们在某种程度上在精神上有缺陷并且使用我的命名空间:-)

chapter 7, "Packages", of the Java Language Spec

程序被组织为一组包。每个包都有自己的一组类型名称,这有助于防止名称冲突。

实际上,我通常首先使用默认包并将其移到真正的包中(如果它的存活时间足够长,可以放到真正的包中)。

0

从Java的角度来看,您可以使用两种通用的开发/部署生命周期,可以使用ant来构建和部署,也可以使用Maven生命周期。这两个生命周期都在本地目录中查找源代码和资源,在maven的情况下,在本地或网络中定义的存储库中查找源代码和资源。

问题是,当您为开发和最终部署设置项目时,您希望构建一个可移植的项目结构,而不依赖于IDE,即。您的项目可以使用任一构建环境进行构建和部署。如果您严重依赖Eclipse框架来提供类变量,编译路径等,您可能会遇到问题,即您的项目只能使用该配置j进行构建和部署,并且可能无法移植到其他开发人员环境,可以这么说。

+0

很好的答案,但错误的问题:OP是问像“com.exmaple.myapp”的包结构,而不是打包代码进行部署。 –

+1

啊..好的,所以他问包什么是????,为什么不把所有东西放在一个文件夹/包src下。我懂了。 –

1

我能想到的原因主要有:

  1. 它使组织的事情,这将有助于你知道到哪里寻找类/功能(和其他人!)。
  2. 如果它们位于不同的包中,则可以定义具有相同名称的类。
  3. 默认包中的类/ etc不能被导入到指定的包中。这意味着为了使用你的类,其他人将不得不把他们的所有类都放在默认包中。这加剧了原因解决的问题。
相关问题