Java中静态变量和全局变量之间的区别

时间:2011-02-28 12:36:48

标签: java

我是Java编程的新手。谁能说出Java中全局变量和局部变量之间有什么区别呢?

5 个答案:

答案 0 :(得分:18)

Java编程语言中没有全局变量的概念。相反,有类和成员属性。类属性用static关键字标记,这意味着可以在没有instanciation的情况下访问它们,而成员属性则绑定到类的实例。

小例子:

public class Person{
    public static final int TOTAL_PERSONS;

    private String firstname;
    private String lastname;

    public void setFirstname(String firstname){ ... }
    ...
}

使用此类,我可以使用Person.TOTAL_PERSONS,但不能使用Person.firstname。要获取/设置名字(不提及您可能很快就会发现的getter / setter),首先需要创建该类的实例:

Person p = new Person();
p.setFirstname("foo");

最后,请注意,可以创建其他语言称为全局变量的内容。例如,您可以使用Singleton模式,但无论如何,如果没有正当理由,不应使用全局变量:check this page

答案 1 :(得分:4)

您的问题有点困惑,因为您在标题中引用了static / global,在您的问题中引用了global / local。

static变量与相关联,每个类一个实例

类可以包含成员变量,并且该类的每个实例都有一个实例。

请注意,如果您有多个类加载器,这会更复杂。在这种情况下,您可以加载多个类定义,因此可以加载多个静态变量。

答案 2 :(得分:1)

除了其他(好)答案:

public class Person{
    public static final int TOTAL_PERSONS = 100;
    public static int numberOfLegs = 2;

    private String firstname;
    private String lastname;

    public void setFirstname(String firstname){ ... }
    ...
}

编写以下代码:

Person foo = new Person();
foo.setFirstname("foo");

Person bar = new Person();
bar.setFirstname("bar");

// At this point foo and bar have different firstname, and both have 2 legs

Person.numberOfLegs = 4;

// At this point foo and bar have different firstname, and they both got a pair of 2 extra (bionic) legs

// Person.TOTAL_PERSONS is a 'constant' and has an unmodifiable value of 100

请注意,这是示例代码,不应被视为良好做法,也不应被视为有意义。 ;)

答案 3 :(得分:0)

全局变量和静态变量非常相似。唯一的区别是静态的 变量可以是公共的或私有的。公共静态变量是java中的全局变量。

局部变量特定于方法或类。它的范围仅限于指定的方法或类。

答案 4 :(得分:-3)

有两种方法。它们是class methodsobject methodsClass methods标识为关键字static。任何没有关键字static的方法都称为object method。可以将应用于方法应用于变量