在java中何时使用单独的包?

在java中何时使用单独的包?,java,package,Java,Package,有时,当我查看源java代码时,我会注意到一些文件放在默认包之外的另一个包中,但不理解何时或为什么使用这种做法。是否存在必须或不得使用单独软件包的情况?有人想解释一下吗 程序被组织为一组包。每个包都有自己的类型名称集,这有助于防止名称冲突 对于小型程序和随意开发,包可以不命名或具有简单名称,但如果代码要广泛分发,则应使用限定名称选择唯一的包名称。如果两个开发组碰巧选择了相同的包名,并且这些包稍后将在单个程序中使用,那么这可以防止冲突的发生 其他人通过我们有一些包,这些包只不过是逻辑名称空间,用来

有时,当我查看源java代码时,我会注意到一些文件放在默认包之外的另一个包中,但不理解何时或为什么使用这种做法。是否存在必须或不得使用单独软件包的情况?有人想解释一下吗

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

对于小型程序和随意开发,包可以不命名或具有简单名称,但如果代码要广泛分发,则应使用限定名称选择唯一的包名称。如果两个开发组碰巧选择了相同的包名,并且这些包稍后将在单个程序中使用,那么这可以防止冲突的发生


其他人通过

我们有一些包,这些包只不过是逻辑名称空间,用来区分两个同名的类。第二个用途是将执行一个任务的公共类作为一个名称空间组合在一起(
java.io
java.sql
)。它还提供了一种机制,将对类的某些方面的访问限制为同一个包中的其他类-这在试图隐藏类的实现时很有用(核心面向对象原则)。

包最重要的用途是将代码组织到比单个类大的模块中


默认情况下(除非将其公开),字段、方法和类对于同一包外部的代码不可见。这提供了“信息隐藏”功能,并强制您的模块去耦合(这样它们只能通过公共接口进行通信,并且您可以独立更改每个包的实现细节)。

在java中使用单独的包时:

让我们举个例子来支持这个问题

假设您有一个处理数据库连接的java程序,它还需要两个单独的线程来执行此任务,还需要一些arraylist来存储从数据库检索到的数据库信息。 在这种情况下,这个包很容易使用。如果我需要数据库包,我知道它在哪里,我只需导入我的
java.sql包

如果我必须处理线程,我将使用
java.lang.thread
包。我必须处理arraylist,然后我将使用我的
java.util
包。 想一想根据您的需要导入软件包是多么简单

此外,假设您实现了自己的执行加法的包 ,乘法,两个数的减法。你要做的就是 创建一个简单的包来处理这些操作。以及 无论您在何处需要,都可以使用此软件包 然后,您将不需要为这些操作编写代码 应用程序中的每次操作

e、 g

现在我可以将这个包用于另一个类

   import Arithmetic.*;
   class Demo
   {
     public static void main(String...k)
     {
       Operations op=new Operations();
       System.out.println(op.sum(12,23));
       System.out.println(op.multiply(23,23));
       System.out.println(op.subtraction(342,23));
     }
   }
简单的回答是: 当项目需要特定的组织或层次结构时,或者当框架不允许使用默认包时,使用包。对于简单的CS项目来说,这可能有些过分

较长的答案是: 包是Java识别的文件夹,允许您享受某些特权:

  • 您可以有两个名称相同的类,它们位于不同的文件夹中,而不会导致冲突

    一个常见的例子是
    java.util.Date
    java.sql.Date
    ;取决于你在做什么,你可能会同时使用这两种方法。如果这样做,则必须使用,这类似于编写
    java.util.Date=new java.util.Date()

  • 你给你的项目一种层次感和组织感;为每个班级提供一个合理的“居住”场所

  • 具有包私有方法和/或字段的类将无法跨包边界访问,这在某些情况下是可取的

以我当前的项目为例。我已经决定编写一个元数据解析器来读取MP3、FLAC、Vorbis和AAC文件

现在,我有四个通用接口:

MP3
FLAC
Vorbis
AAC
…然而,这些都是真正的压缩格式(FLAC是无损的,所以那里没有压缩),所以它们属于一个传达这种信息的地方

name.makoto.format
  - MP3
  - FLAC
  - Vorbis
  - AAC
这一切都很好。但是,实际进行解析的类将位于何处?如果它存在于读卡器包中呢

name.makoto
    - reader
        MediaReader
    - format
        MP3
        FLAC
        Vorbis
        AAC
假设现在我想要实现这些格式接口。让它们与接口本身处于同一级别是没有意义的,因为它们只是实际对象的API。让我们将其移动到
impl

name.makoto
    - reader
        MediaReader
    - format
        MP3
        FLAC
        Vorbis
        AAC
        - impl
            MP3Impl
            FLACImpl
            VorbisImpl
            AACImpl
我想继续,但从这里开始就有点疯狂了


这里我对我的项目有一种层次感和结构感。这是一个相当大的项目,因此我可以从组织中受益。

包是一种将Java类组织到名称空间的机制,类似于Modula的模块

Java包可以存储在称为JAR文件的压缩文件中,这样可以更快地将类作为一个组下载,而不是一次下载一个

程序员通常还使用包来组织属于同一类别或提供类似功能的类

通过为包提供适当的名称,will清楚地给出了pertical包中存在的类的使用情况的高级图片

例如:

com.sample.Ejb;
com.sample.EjbImpl;
com.sample.Delegate;
com.sample.Utility;

最好的检查方法是,您可以看到java如何在不同的包下组织类,以及一个包中的类如何不同于另一个包。您将得到答案。这个问题更多地涉及到自定义包的使用,而不是其他类的使用。
com.sample.Ejb;
com.sample.EjbImpl;
com.sample.Delegate;
com.sample.Utility;