2

我知道在 SO 上已经多次回答了这个问题,但我仍然不明白实例化一个类究竟意味着什么。我读了这篇文章,它确实帮助了我的理解。

我知道静态类 likeConsole不能与new表达式 like一起使用,Console c = new Console()因为该类中没有任何实例变量。我也知道静态类提供了“通用”方法,并且通常用于Math函数。我知道,一旦您像现在这样实例化一个类,Double d = new Double();就可以访问该类内部的任何方法Double

我知道这些事实,但我觉得我并不真正理解它们的真正含义。有人可以举一个例子说明静态类是绝对必要的,以及创建一个类的实例是绝对必要的吗?

4

3 回答 3

15

把一个类想象成一组蓝图。实例化一个类就像获取蓝图并构建项目。当工程师设计汽车时,他会提出设计方案。那将是类。汽车设计完成后,将计划交给要建造的装配线。每辆下线的汽车都是该设计的一个实例。

当汽车还只是一个设计时,你真的不能用它做任何事情。如果没有车,你就不能打开它的门。一旦你有了汽车的实例,你就可以操纵它。您可以打开门,启动引擎等。类似的类也是如此Double。拥有实例后,您可以对其进行操作。

像 一样的静态类Console是没有实例的类。它们更像是一种对有用的相关功能进行分组的方式。在 的情况下Console,该功能用于与命令行交互。Math用于对数学相关的代码进行分组。Configuration用于读取/操作配置文件。这些东西都不需要你创造任何独特的东西来让它们工作。

于 2012-09-25T14:55:40.400 回答
2

公共类必须在应用程序中由另一个类调用,例如这可能是一个数据访问类(由业务层调用)。

静态类不一定需要创建实例,例如跟踪或日志记录类。

于 2012-09-25T14:55:45.873 回答
1

考虑静态的一个(可能已经结束)简化示例如下:

如果你有 Dog 类;你可以实例化类来创建 Dog Poodle = new Dog(); 和狗拉布拉多=新狗();如果 Dog 类有一个变量 hairColor,那么对于 Poodle 和 Labrador,hairColor 可能会有所不同。这两个不同的实例是分开的。

但是,如果您向 Dog 添加了一个名为 numberOfDogs 的静态变量,并在每次实例化新 Dog 时递增该变量(例如,您可以在构造函数中这样做),那么该变量将计算 Dog 的总数,并且将是无论您检查的是哪个 Dog 实例,都是相同的数字。根据您的使用方式,这很有用(也很危险)。

于 2012-09-25T15:31:43.317 回答