2012-06-27 34 views
1

我一直在使用.NET多年,但最近我遇到了一个简单的Java项目。语法很容易学习 - 非常简单直观和常见。然而,最让我困惑的是项目结构。Java包与.NET相比有什么用?

在.NET中,我非常习惯于包含我不同的东西的类,然而,Packages混淆了我。它们看起来几乎像.NET命名空间,只是它们实际上影响了项目目录布局。

不仅如此,命名约定对我来说绝对是对的。我被告知要使用公司网站命名该软件包,与最后的应用程序名称相反(例如com.company.www.applicationname)。不仅如此,我还被告知将主类命名为应用程序的名称。几乎现在似乎是多余的(类名称,包名称和项目名称)。

那么这是关于什么?我可以将这些软件包与.NET进行比较,以及如何将我的头部缠绕在他们身上? - 以及命名约定是什么?

+1

带有主函数的类的名称不起作用。这听起来像你的组织的惯例。 – Bill

回答

3

packages Java中的一种方式是让不同的库可以重用类名而不会相互冲突。包就像语言提供的另一个范围规则。例如:

public class Example { 
    String exampleString = "example"; 
} 

public class Another { 
    String exampleString = "This would never work with a global name space"; 
} 

我们能够在同一个程序与exampleString标识符的两个String对象,因为它们是在不同的scope。同样,

package example; 
public class Example { } 

,并在一个单独的文件

package separateexample; 
public class Example {} 

我们可以有一个类名相同的名称,因为它是一个不同的范围。我们仍然可以唯一地指定对象:

example.Exampleseparaeteexample.Example 这些是这些类的全限定类名称。

欲了解更多信息,请查阅the java tutorial

对于约定Java包:如果你想写一个库,有很多人使用它,你需要确保没有命名冲突。软件包可以像上面一样使用以避免它们 - 但为了确保没有任何冲突,例如软件包名称本身,您需要一个完全全球唯一的软件包名称,以确保其他公司在尝试使用时不会使用其他公司的名称使用你的产品。域名恰好是全球唯一的字符串,所以将公司域名作为包名称反转是惯例。

com.example.myapp.Example 

不可能发生冲突,只要你真正拥有example.com(没有人打破了惯例)

因此,要回答你的主要问题packages在Java中是相同的概念namespaces在.net

相关问题