Java / C#静态类之间的主要区别是什么?

时间:2013-01-30 03:22:26

标签: c# java static-class

在C#中,静态类是一个类,除了不支持继承之外,还可以具有“普通”类除了实例成员之外的任何类型的成员。

不太确定静态类在java中是如何工作的,但是根据我看到的有限数量的java代码,我很清楚它们的工作方式并不相同。

有人可以列举这些差异吗?

3 个答案:

答案 0 :(得分:12)

Java中的静态类是该语言提供的三种嵌套类之一(另外两种是非静态嵌套类和函数作用域)。

Java的静态类的行为与嵌套的C#类的行为相同:它们可以访问封闭类的静态成员,但是如果没有对封闭对象的附加引用,则无法访问实例成员。相反,非静态嵌套函数可以访问实例变量,但是您需要一个封闭的实例才能实例化。

答案 1 :(得分:4)

在C#中

使用静态类来包含与特定对象无关的方法。例如,创建一组不对实例数据起作用且与代码中的特定对象无关的方法是一种常见的要求。您可以使用静态类来保存这些方法。

静态类的主要特征是:

  • 它们只包含静态成员。
  • 他们无法实例化。
  • 他们是密封的。
  • 他们不能包含实例构造函数
Java中的

  • 只有嵌套类可以是静态的。

  • 可以在类

  • 中拥有静态成员

答案 2 :(得分:1)

在Java中,您不能将最外层的类视为静态。只能使用static修饰符声明内部类。这样做可以防止内部类访问外部类的实例成员。

在C#中,您可以使用static修饰符定义外部类,这使得无法创建该类的实例变量。它们有两个不同的用途。要在Java中创建类似的效果,可以定义private no-args构造函数。单例模式实现就是这样做的。同样在Java中,也可以创建一个类,其所有成员都定义为static,但这并不妨碍创建新实例。