Java 类设计,静态方法的案例
我曾经讨论过静态方法的用法,简单地说,在下面的场景中,一个类定义应该有一个方法作为静态方法还是实例方法。有一个类定义一个实体,即它的属性是什么以及允许对它进行什么操作Java 类设计,静态方法的案例,java,oop,static-methods,design-principles,instance-methods,Java,Oop,Static Methods,Design Principles,Instance Methods,我曾经讨论过静态方法的用法,简单地说,在下面的场景中,一个类定义应该有一个方法作为静态方法还是实例方法。有一个类定义一个实体,即它的属性是什么以及允许对它进行什么操作 class dummy{ String name; String content; String someRandomOpeation(){ .... } static String createKey( String inputName, String inputCont
class dummy{
String name;
String content;
String someRandomOpeation(){
....
}
static String createKey( String inputName, String inputContent ){
return inputName+inputContent;
}
}
类定义还有一个静态方法,它接受一些参数,比如content和date,这两个参数逻辑地定义了一个实例,并使用它构造一个键和一个字符串,然后返回相同的值。现在,如果创建了消息的实例,则其内容和日期将作为字段。是一个参数,我可以在给定名称和内容的情况下获取一个键,而不必创建一个有效的实例来拥有静态方法。或者,一对名称和内容逻辑上定义了一个实例,这是否意味着要创建一个实例并从中获取密钥 仅因为您不希望实例化而将方法设置为静态方法不是有效的参数。根据设计,我们在helper/util类中使用静态方法,这些类可能有自己的属性,也可能没有自己的属性。这些类基本上帮助执行许多不同类可以使用的一些常见操作。函数也是模块化的,它们只使用传递给函数的参数来导出输出
您提到的类将无法工作,因为您无法在JAVA中对非静态字段常量进行静态引用。此外,使用与其类字段严格关联的静态方法的缺点是无法重写它们 参数是我可以得到一个给定名称和内容的密钥,而不是 必须创建一个有效实例才能使用静态方法 不,在这种情况下,你几乎不需要上课。您总是可以将数据成员传递给类方法,但这并不意味着我们不需要类 还有一个额外的参数-封装。有一个不带参数的实例方法getKey,并隐藏实现细节,这会更清晰、更好 或者一对名称和内容逻辑上定义了 实例说要创建一个实例并从中获取密钥 也不是。事实本身并不意味着你应该创建一个实例 这里的第一个问题是我们是否需要上课。我们真的有一些有意义的对象,虚拟对象的实例吗?例如,如果我有一个图书馆,有一本教科书显然是有意义的,因为我周围有很多书。你有这种情况吗?这个键在逻辑上是否与任何虚拟的实例相关联,就像作者和ISBN在逻辑上与一本书相关联一样?这个虚拟概念的实例与其他概念有关系吗?就像一本可以出租的书。 如果大多数答案是肯定的,那么这个方法应该是没有参数的实例方法 或者。。。 您是否只需要一种从2个字符串计算密钥的服务?这就是你所需要的吗?您是否需要其他类似的服务,独立于实例。如果这些答案大多是肯定的,那么你甚至不需要上课。或者你可以有一个类服务,没有属性,有这个静态方法和参数,可能还有其他方法 情况也好坏参半。出于其他目的,您仍然需要实例,但是您还需要一个完全独立于任何实例的createKey方法,并且只提供某种与类逻辑相关的全局服务。那么静态方法就有意义了
我认为你的思维方式是面向功能的,而不是面向对象的。我认为您需要在脑海中点击一下,这将有助于您理解对象和类的正确用途和意义。请参阅:dogbane-感谢您的回复,但这里的情况略有不同,静态方法是公共的,args可以在逻辑上定义一个实例。根据注释,这个问题似乎是针对静态String createKeyString、String或静态String createKeyDummy的方法,其中String createKey实例方法是第三个选项。该类对非静态字段进行静态引用,静态方法接受2个参数并对其进行操作。它从不使用实例字段。为了清晰起见,我对这些名字进行了编辑。