静态成员与实例成员

时间:2015-06-08 22:09:29

标签: java c# static-members

如果我需要在我的类中声明一些常量,并且没有真正需要将它们声明为静态,即没有多个实例共享该成员,是否有任何意义将它们声明为静态?是否有成本差异"使用静态和实例成员之间?请提供有关java和C#的信息。

而且,java的静态成员和C#的静态成员之间有区别吗?

4 个答案:

答案 0 :(得分:1)

  

我需要声明一些常量才能在我的课程中使用

Java 没有任何想法,但在C#常数成员中的含义static本质上是static

有关详细信息,请参阅MSDN Document: Constants (C# Programming Guide)。引用文件引用:

  

访问常量,就好像它们是static字段一样,因为值   对于该类型的所有实例,常量是相同的。你不   使用ruby -v关键字来声明它们。

答案 1 :(得分:1)

由于多种原因,我通常会将我的应用程序中的每个常量声明为private static final变量。

  1. 一致性。我自己和其他人都清楚我的应用程序中默认的核心常量定义是什么。我可以将它们全部组合在一起,如果需要修改它们,很容易导航到它们。因为它们是static,所以这些变化会随着每次通话而降低。这样可以避免意外地对同一常数进行多次定义。
  2. 性能。如果我有一个永不改变的常量,那么在方法调用期间不断为它分配内存是没有意义的。在对类进行引用时,它会被分配一次,然后您就完成了它。在完成对类的所有引用之前,内存仍然是引用。
  3. 良好实践。编程中有一种约定,其中依赖关系应尽可能高度分离。当您将函数或变量声明为static时,您强制它必须以静态方式进行交互,即独立于运行时实例。如果没有在运行时封装成员变量的类的依赖性,您可以更精确地控制与该类的交互,因为它可以确保您定义有关如何与类进行交互的精确规则。您发现可以声明为static的常量和方法越多,您的软件就越灵活,因为对于某些值和行为应该如何被操纵几乎没有混淆。
  4. 曝光。您定义的某些函数或常量可能对您应用程序的其他部分有用。这意味着您可以利用功能而无需使用运行时实例。例如,二次方程式在任何地方都是相同的,那么为什么它应该属于单个实例呢?常数也是如此,例如光速。
  5. 就个人而言,我总是将我的应用程序的所有功能声明为private static。如果一个类使用该功能作为其操作的一部分是有意义的,那么程序员可以将方法调用包装在另一个方法中并提供适当的成员变量数据。如果应用程序的另一部分需要使用该静态函数,那么您需要做的就是提高函数的可见性。

答案 2 :(得分:1)

在Java中,常量隐含的静态;常量不是实际的语言规范,因此Java中的常量只是我们称为常量的变量。

在C#中,常量 隐式静态。常量是语言规范的一部分,并在documentation

中说明
  

访问常量就好像它们是静态字段一样,因为常量的值对于该类型的所有实例都是相同的。您不使用static关键字来声明它们。

答案 3 :(得分:0)

如果你将常量声明为静态,那么你的程序将只使用一个内存位置来存储这个常量值,如果你不使用静态,那么每个对象将分别存储这个常量。如你所说,没有几个实例,在这种情况下要么指定常量为静态,要么声明它只是两个成本相同。