2011-05-24 38 views
4

我知道静态类型和其他类型之间的区别,但我不确定在哪里使用哪个。现在我在所有地方使用静态类型来避免对象实例化。以这种方式使用它是一个好主意吗?在所有地方使用静态类型有什么特别的缺点?使用静态类型是个好主意吗?

编辑

你怎样称呼这个为static String staff

+5

Java没有任何东西被称为“静态类型”。你的意思是*静态内部类*?你能给出一个代码示例吗? – 2011-05-24 00:33:30

+1

Java是一种面向对象的语言。实例化对象的能力在那里,因为这是一个很好的模式。当然,静态对象/方法也有自己的位置。如果问题只是你是否应该使用对象,那么答案是'是'。 退房http://en.wikipedia.org/wiki/Design_Patterns的一些例子... – 2011-05-24 00:37:40

+0

@格雷格Hewgill:检查我的编辑。 – Deepak 2011-05-24 00:43:15

回答

5

这是一个很好的问题。通常你应该而不是使用static方法/变量,除非你确定它是一个正确的应用程序。在面向对象编程(OOP)中,对象封装了数据和行为。通常,*实例方法用于处理对象的数据。

Static只应将方法/变量用于与任何特定对象无关的功能。 static的有效申请的一个好例子是Math.random()

有关实例和静态方法/变量的一些注意事项:

  • 实例变量访问静态实例变量/方法,但静态方法只能访问其他静态变量/方法。
  • 静态变量在类的所有实例中总是相同的。

罗伯特马丁编写了一本好书,涵盖了这个主题是Clean Code。强烈推荐。

*实例方法与静态方法相反。它们与类实例关联,而不是类本身。


解决您的编辑,假设这是一个变量,你访问它是这样的:

MyClass.staff = "bob, george, and linda"; 
System.out.println(MyClass.staff); 

编辑:这里是我另一个论坛上做了一段时间后,与后一些很好的答案。这是一个PHP论坛,但这些概念仍然适用。

http://forums.devnetwork.net/viewtopic.php?f=1&t=127667

+0

@Jonah:所以它的精细使用静态方法/变量,如果我要在整个应用程序仪式共享变量? – Deepak 2011-05-24 00:47:23

+0

@Deepak:使用它就是所谓的“全局变量”。大多数情况下,有更好的方法可以在整个应用程序中共享一个对象而不是全局变量。 – Jonah 2011-05-24 00:49:29

+0

@Jonah:我如何使用静态方法/变量很清楚,但我只是想知道如果是经常使用的:) – Deepak 2011-05-24 00:55:13

1

当有一个对象的多个实例,静态类型的变量和函数会在所有实例共享。

0

任何应用程序中的大多数逻辑都将被模块化,并将在某些共享字段上运行。这就是大多数方法都是非静态的原因。在这种情况下,'fields'可以与'firstName'等一样基本。但在其他情况下,'fields'是其他类的实例,如DataAccess(DAO)类。

变量即字段几乎不应该是静态的,除非它们是“常量”。

一个很好的例子,在这里您将使用静态方法是转换字符串,例如一类:

public class StringUtil{ 

    public static String convertToHex(String orig){ 

    } 
} 
相关问题