我是新手,刚学会了如果我定义说
package my.first.group.here;
...
Run Code Online (Sandbox Code Playgroud)
然后,此包中的Java文件将放在my/first/group/here
目录下.
将一些Java文件放入包中的主要目的是什么?另外,如果我选择采用这个,我应该如何分组呢?
谢谢
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包处理日志记录.
除了其他答案中提到的命名空间之外,您还可以根据在该成员上声明的范围来限制对方法和字段的访问。具有公共范围的成员可以自由访问,为了限制访问,您通常将它们定义为私有(即隐藏在类之外)。您还可以使用受保护的范围来限制对类型及其子项的访问。还有默认范围(没有限定符的成员具有默认范围),它允许子类型和同一包中的类型访问该成员。这可以是一种共享字段和方法的有效方式,而不会使其过于广泛可用,并且可以帮助进行测试。
例如,下面的方法将对同一包的所有其他成员可见。
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)