什么是静态方法和变量?

时间:2012-05-04 03:06:01

标签: java definition

有人可以给出一个易于理解的静态变量和静态方法的定义吗?

这些与非静态变量和方法相比如何?

5 个答案:

答案 0 :(得分:15)

在Java中,static表示class methods和类变量(与实例方法和实例变量相对)。可以在不存在实例的情况下访问这些方法和变量。

将此与实例方法和实例变量进行对比:必须通过对象访问它们。例如,length()对对象进行操作:

String a = "hello";
int len = a.length();

相反,valueOf无法对某个对象进行操作;此外,它在调用时创建一个新对象:

String x = String.valueOf(123.45);

注意如何使用<objectName>后跟点.调用实例方法,而使用<className>后跟点.访问静态方法。

答案 1 :(得分:7)

我认为这不是一个容易回答的问题,因为它意味着根据语言略有不同。如果我用最普遍的术语来表达它可能会因人而异:

静态变量是在类的所有实例之间共享的变量。

静态方法是一种可以在类上调用的方法,通常不需要实例化类。

如果我选择三种不同的语言,我会给出三种不同的答案。

维基百科也可能有助于定义这些内容。

http://en.wikipedia.org/wiki/Method_(computer_programminghttp://en.wikipedia.org/wiki/Static_variable

答案 2 :(得分:6)

'static'关键字可能令人困惑,因为在C中,它起源于它,它有多种含义。当用于在函数中声明变量时,意味着变量具有函数之外的生命周期。它本质上是一个全局的功能私有。如果全局变量是静态的,则它本质上是该源文件的私有变量。在这两种情况下,变量都具有单个内存位置,就像全局一样。只是编译器阻止您在函数或编译单元外部访问它。

我假设使用'static'这个词作为静态变量的位置永远不会改变,而不是普通的局部变量,它会在堆栈的某处有一个内存位置,具体取决于堆栈在堆栈时的样子。功能被称为。

创建C ++时,此关键字被重新用于引用类级属性和方法。我认为这个想法是静态方法或属性是一种对类私有的全局。如果你考虑这些是如何在内存中进行布局的,那么它就具有某种意义,因为静态属性就像一个全局变量一样只有一个地址。唯一的区别是编译器不允许您在类外使用它。

由于Java(和其他语言)的语法受C ++启发,因此也使用'static'来引用类方法和属性。不幸的是,因为使用这个关键词与英语含义关系不大。

但总的来说,这是看待它的方式。在大多数语言中,如果它是“静态的”,则整个程序中只有一个。可以把它想象成具有单个固定内存地址的东西。

答案 3 :(得分:1)

静态变量是由类的所有实例使用的变量,在正常变量中,变量再次初始化。 静态方法无需创建对象即可调用它们。

答案 4 :(得分:1)

我将展示清楚地理解静态方法的例子。

从键盘输入数据时,java使用Scanner类

离; Scanner scn = new Scanner(System.in);    int a = scn.nextInt();

所以这意味着nextInt()方法不是静态的。

静态方法是可以在不实例化类的情况下使用的方法。

请看以下示例:

public class Calculate {

    static void calculatePower(int num, int pow) {
        System.out.println(Math.pow(num, pow));
    }


}

使用静态方法。

public static void main(String[] args) {
    Calculate.calculatePower(2,8);
}

所以我们没有实例化Calculate类并使用了staticPower方法,这是静态的