17

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

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

有人可以列举差异吗?

4

3 回答 3

13

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

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

于 2013-01-30T03:28:33.077 回答
6

在 C# 中

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

静态类的主要特点是:

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

在 Java 中:

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

  • 类中可以有静态成员

于 2013-01-30T03:28:23.993 回答
3

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

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

于 2013-01-30T03:35:58.070 回答