我知道在SO上已经多次回答了这个问题,但我仍然没有明确说明实例化类的具体内容。我看了this,这确实有助于我理解。
我知道像Console
这样的静态类不能与new
这样的Console c = new Console()
表达式一起使用,因为该类中没有任何实例变量。我也知道静态类提供了' generic'方法,通常用于Math
函数。我知道,一旦你实例化了一个像Double d = new Double();
这样的类,你现在可以访问Double
类中的任何方法。
我知道这些事实,但我觉得我真的不明白他们的意思。有人可以给出一个静态类绝对必要的例子,以及创建类的实例是绝对必要的吗?
答案 0 :(得分:15)
将某个类视为一组蓝图。实例化类就像获取蓝图并构建项目一样。当工程师设计汽车时,他提出了设计。那将是班级。汽车设计完成后,计划将被移交到要建造的装配线上。每辆下线的汽车都是该设计的一个实例。
当汽车仍然只是一个设计时,你无法用它做任何事情。如果没有车,你就无法开门。一旦拥有了汽车的实例,就可以操纵它。你可以打开门,启动发动机等。像Double
这样的班级也是如此。一旦有了实例,就可以对其进行操作。
静态类(如Console
)是没有实例的类。它们更像是一种分组有用的相关功能的方法。在Console
的情况下,该功能用于与命令行交互。 Math
用于对与数学相关的代码进行分组。 Configuration
用于读取/操作配置文件。这些都不需要你创建任何独特的工作。
答案 1 :(得分:2)
公共类必须在应用程序中被另一个类调用,例如,这可能是一类数据访问(由businnes层调用)。
静态类不一定需要创建实例,例如跟踪或记录类。
答案 2 :(得分:1)
考虑静态的一个(可能结束)简化示例如下:
如果你有班级狗;你可以实例化这个类来创建Dog Poodle = new Dog();和狗拉布拉多=新狗(); 如果Dog类有一个变量hairColor,那么对于Poodle和Labrador,hairColor可能会有所不同。两个不同的实例是分开的。
但是,如果您向Dog添加了一个名为numberOfDogs的静态变量,并且每次实例化一个新Dog时都会增加该变量(例如,您可以这样做构造函数),然后该变量将计算Dogs的总数,并且无论您检查哪个Dog实例,它都是相同的数字。 这很有用(也很危险),具体取决于您的使用方式。