2011-11-06 43 views
0

我对Java代码中的变量声明感到困惑。Java变量约定

我读了...不要尝试使用全局变量声明。

不要使用这样的事情:

package cls; 
public class test { 
    private String var; 

    public someMethod(){ ... } 
} 

和使用?

package cls; 
public class test { 

    public someMethod(){ 
     String var = null; 
    } 
} 

我不知道这是正确的方式....

回答

2

这完全取决于你所需要的。

但是,您的第一个示例不是全局变量 - 它是一个实例变量。

变量的范围应尽可能小。这使得代码更易于推理。

实例变量是OOP的核心 - 包含对象状态的类(对象)以及对该状态进行操作的方法。例如,Person类很可能有姓和名的实例变量:

public class Person { 
    private String firstName; 
    private String lastName; 
    // Plus getters and setters for each. 
} 

这样的实例方法直接访问的名字和姓氏的变量,而不必需要它们的所有方法之间传递它们。

第二个例子是一个局部变量。只有在声明的方法中才可见。对其的引用可能会传递给其他方法。

1

两者都是正确的。这些都不是全局变量。第一个是班级领域。它对你所做课程的每个实例都是独一无二的。类字段(即变量)保留在类的实例中,直到类本身被删除。

第二个是方法范围变量。只是为了临时的目的来执行方法工作所需的计算,一旦方法中的代码完成,变量就会消失。

您使用每个用于不同的目的。例如,如果您正在编写Car类,那么您可能会有SteeringWheel和Brake的类字段。但是,如果您有一种方法来计算每加仑平均行驶里程,则可以创建一个方法范围变量来帮助执行计算。

1

Java没有全局变量。第一个变量是类级别并维护类实例的状态,因此只存在类的一个实例,而第二个变量只存在于方法执行期间存在的方法局部变量。您可以使用第一个变量来存储跨越多个方法调用的状态信息。一旦控制离开方法,第二个变量就会消失。而且,每次调用方法时,都会在堆栈上创建另一个可用同一本地名称访问的变量。

+0

如下文所述,Java那样在公共静态类成员的形式全局变量。 –

+0

谢谢你们。我现在知道了 ! – Kai

+0

@ScottA在用Java定义这些变量和公共静态的语言中,全局变量是有区别的。这些变量在范围上不是全球性的。事实上,他们有班级范围,需要获得资格。此外,从加载类到卸载时存在公共静态。有关Java中的各种变量,请参见Java语言规范(第3版)第4.12.3节。 –

1

在Java中,您不能像在C语言中那样拥有真正的“全局”变量。Java迫使您以面向对象的方式构建您的程序。

在你上面的例子中,如果整个test对象都需要var对象并且对存储很重要,那么你可以使用第一个例子。如果var只需要在someMethod并为test对象来存储它,然后使用第二个示例这并不重要。

注意到,即使在第一个例子,var封装一个test对象之内,所以它不是真正的“全球性”可言,除了可能稍微的test成员函数(这是整点实例/成员变量)。

Java中的最接近“全球性”的数据是这样的:

public class GlobalVars { 
    public static int globalInt; 
} 

而且你可以在你的代码中访问globalIntGlobalVars.globalInt,而不产生的GlobalVars一个实例。

+0

事实上,实际而言类的静态成员是在以同样的方式,这将是在全球C.有可用于整个过程变量的一个实例,它可以被任何东西任何地方进行修改。以这种方式使用类的静态成员(公共,不是最终的)是一样危险,在C PL/SQL全球具有与其包装规格变量,这些变量的命名空间相同的方式使用Java公共静态是相同的功能,但仍全球可访问。 –