在Java文件中定义包的目的是什么?

der*_*dji 48 java package

我是新手,刚学会了如果我定义说

package my.first.group.here;
...
Run Code Online (Sandbox Code Playgroud)

然后,此包中的Java文件将放在my/first/group/here目录下.

将一些Java文件放入包中的主要目的是什么?另外,如果我选择采用这个,我应该如何分组呢?

谢谢


编辑:对于可能再次遇到相同问题的人,我刚刚 Sun的软件包上找到了这个教程.

Wil*_*del 41

让我们从维基百科文章中描述的"Java包"的定义开始:

Java包是一种将Java类组织成名称空间的机制,类似于Modula的模块.Java包可以存储在称为JAR文件的压缩文件中,允许类作为一个组而不是一次一个地更快地下载.程序员通常还使用包来组织属于同一类别的类或提供类似的功能.

因此,基于此,Java中的包只是一种用于组织类并防止类名冲突的机制.你能说出他们任何你希望的,但Sun公司已经公布了一些命名约定,你应该命名包时使用:

唯一包名称的前缀始终以全小写ASCII字母书写,应该是顶级域名之一,目前是com,edu,gov,mil,net,org,或者是英文双字母代码之一识别ISO标准3166,1981中规定的国家.

软件包名称的后续组件根据组织自己的内部命名约定而有所不同.此类约定可能指定某些目录名称组件是分区,部门,项目,计算机或登录名.

例子:

  • com.sun.eng

  • com.apple.quicktime.v2

  • edu.cmu.cs.bovik.cheese


geo*_*wa4 14

我是一个大型应用程序,您必须有两个名称完全相同的文件(java.util.Date和java.sql.Date),尤其是当您开始引入第三方jar时.基本上,您可以使用包来确保唯一性.

最重要的是,在我看来,包装将项目分解为有意义的部分.所以我的SQL包有与sql相关的代码,我的logger包处理日志记录.


Ric*_*ler 5

除了其他答案中提到的命名空间之外,您还可以根据在该成员上声明的范围来限制对方法和字段的访问。具有公共范围的成员可以自由访问,为了限制访问,您通常将它们定义为私有(即隐藏在类之外)。您还可以使用受保护的范围来限制对类型及其子项的访问。还有默认范围(没有限定符的成员具有默认范围),它允许子类型和同一包中的类型访问该成员。这可以是一种共享字段和方法的有效方式,而不会使其过于广泛可用,并且可以帮助进行测试。

例如,下面的方法将对同一包的所有其他成员可见。

public class Foo {
    int doSomething() {
        return 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

要测试该方法,您可以在同一个包中定义另一种类型(但可能是不同的源位置),该类型将能够访问该方法。

public class FooTest {
    @Test
    int testDoSomething() {
        Foo foo = new Foo();
        assertEquals(1, foo.doSomething());
    }
}
Run Code Online (Sandbox Code Playgroud)