Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么包命名使用反向DNS表示法?_Java_Dns_Packages_Notation_Reverse Dns - Fatal编程技术网

Java 为什么包命名使用反向DNS表示法?

Java 为什么包命名使用反向DNS表示法?,java,dns,packages,notation,reverse-dns,Java,Dns,Packages,Notation,Reverse Dns,使用反向DNS包表示法有技术原因吗?还是仅仅是一个惯例?我认为现在基本上只是一个惯例,但我要说,它有助于把事情组织起来 以下是我为什么这么说的几个例子: com.vzy.gui.*和com.vzy.io.* 翻看它们,我们看到,com然后想,“哦,嘿,这是一家公司 “这就是为什么” 然后,vzy然后想,“制造这个的人是 vzy!” 然后是gui和io,这让我们看到“这一个可以与 GUI和另一个与IO一起工作,很酷。” 我认为另一个展示这一点的好方法是将它切换回去,看看它会是什么样子 impo

使用反向DNS包表示法有技术原因吗?还是仅仅是一个惯例?

我认为现在基本上只是一个惯例,但我要说,它有助于把事情组织起来

以下是我为什么这么说的几个例子:
com.vzy.gui.*
com.vzy.io.*

  • 翻看它们,我们看到,
    com
    然后想,“哦,嘿,这是一家公司 “这就是为什么”
  • 然后,
    vzy
    然后想,“制造这个的人是 vzy!”
  • 然后是
    gui
    io
    ,这让我们看到“这一个可以与 GUI和另一个与IO一起工作,很酷。”
我认为另一个展示这一点的好方法是将它切换回去,看看它会是什么样子

import ArrayList.util.java
import BorderLayout.awt.java
import File.io.java
import JButton.swing.javax
import JFrame.swing.javax
import JLabel.swing.javax
import JOptionPane.swing.javax
import JPanel.swing.javax
import JScrollPane.swing.javax
import JSlider.swing.javax
import LinkedBlockingQueue.concurrent.util.java
import PrintWriter.io.java
import Scanner.util.java
import SwingUtilities.swing.javax


没有技术上的理由,只有避免冲突的惯例。以下非规范性引用自:

开发人员应该采取措施,通过为广泛分发的包选择唯一的包名,避免两个已发布包具有相同名称的可能性

通过首先拥有(或属于拥有)Internet域名(如oracle.com)来形成唯一的包名。然后,使用组织内制定的用于进一步管理包名的约定,逐个组件反转此名称,以获得(在本例中)com.oracle,并将其用作包名的前缀。这样的约定可以指定某些包名组件是部门、部门、项目、机器或登录名

包的名称并不意味着包在Internet上的存储位置建议的生成唯一包名的约定仅仅是一种在现有的、广为人知的唯一名注册中心上附加包命名约定的方法,而不必为包名创建单独的注册中心。

包名与域名的顺序相反的原因很简单,因为包的名称是一个。每个包都包含一组类/接口和/或子包,子包的名称必须以其包含的包作为前缀,以形成完全限定名称:

作为另一个命名包的子包的命名包的完全限定名由包含包的完全限定名组成,后跟“
”,后跟子包的简单(成员)名


Sun用于维护Java编码标准指南-您可以在Oracle网站上找到存档副本-根据该网站,自1999年以来未维护该指南:

包名称建议部分建议使用拥有组织的域名,顶级域名优先:

唯一包名称的前缀始终以小写字母书写 ASCII字母和应为顶级域名之一, 目前有com、edu、gov、mil、net、org或其中一种英语 ISO标准中规定的两个字母代码,用于标识国家 31661981年

程序包名称的后续组件根据不同的 组织自身的内部命名约定。这样的公约可能会 指定某些目录名组件被分割, 部门、项目、机器或登录名

我认为这已经成为一段时间以来被接受的标准,尽管今天没有严格遵守。你没有理由不为你的项目或组织设计一个对你来说最有意义的命名模式——没有任何技术理由让它必须遵循这个域名模式


今天遵循的典型模式是先进行更高级别的分组(组织或项目名称),然后进行越来越具体的分组,最后再进行最具体的功能或技术分组。

将域名用作唯一标识符是有意义的,但为什么要颠倒它们呢?从这个角度看,oracle.com和com.oracle是相同的。@SimoV8,因为包的命名是分层的。A
com.oracle.MyClass
表示
MyClass
位于
oracle
目录中
com
中。
import java.awt.BorderLayout
import java.io.File
import java.io.PrintWriter
import java.util.ArrayList
import java.util.Scanner
import java.util.concurrent.LinkedBlockingQueue
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JLabel
import javax.swing.JOptionPane
import javax.swing.JPanel
import javax.swing.JScrollPane
import javax.swing.JSlider
import javax.swing.SwingUtilities