10

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

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

4

5 回答 5

15

在 Java 中,static表示类方法和类变量(相对于实例方法和实例变量)。这些方法和变量可以在没有实例的情况下访问。

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

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

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

String x = String.valueOf(123.45);

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

于 2012-05-04T03:16:53.473 回答
7

我认为这不是一个容易回答的问题,因为它的含义因语言而异。如果我用最笼统的术语来表达,可能会因人而异:

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

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

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

维基百科也可能有助于定义这些东西。

http://en.wikipedia.org/wiki/Method_(computer_programming ) http://en.wikipedia.org/wiki/Static_variable

于 2012-05-04T03:16:42.527 回答
6

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

我假设“静态”这个词被用作静态变量的位置永远不会改变,而不是普通的局部变量,它将在堆栈的某处有一个内存位置,具体取决于调用函数时堆栈的样子.

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

由于 Java(和其他语言)具有受 C++ 启发的语法,因此也使用“静态”来引用类方法和属性。很不幸,因为这个关键字的使用和英文的意思关系不大。

但总的来说,这就是看待它的方式。在大多数语言中,如果它是“静态的”,那么整个程序中只有一种。将其视为具有单个固定内存地址的东西。

于 2012-05-04T03:44:35.100 回答
1

静态变量是类的所有实例使用的变量,其中与普通变量一样,该变量再次被初始化。静态方法可以在不创建对象的情况下调用它们。

于 2014-04-01T08:00:38.680 回答
1

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

从键盘输入数据时 java 使用 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 类,而是使用了静态的 calculatePower 方法

于 2015-06-26T22:08:05.213 回答