静态方法和变量是什么?

10
有人能否给出一个简明易懂的静态变量和静态方法的定义?它们与非静态变量和方法有什么区别?
5个回答

15
在Java中,static表示类方法和类变量(与实例方法和实例变量相对)。这些方法和变量可以在没有实例的情况下访问。
与此相反,实例方法和实例变量必须通过对象访问。例如,length()作用于一个对象:
String a = "hello";
int len = a.length();

相比之下,valueOf 不能操作一个对象; 此外,当它被调用时它会创建一个新的对象:
String x = String.valueOf(123.45);

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

7
我认为这不是一个容易回答的问题,因为它在不同的语言中意义略有不同。如果我要用最普遍的术语来描述,那么静态变量是一种在类的所有实例之间共享的变量。静态方法是可以在类上调用的方法,并且通常不需要对类进行实例化。再次说明,如果我选择三种不同的语言,我会给出三种不同的答案。维基百科可能也有助于定义这些术语。 http://en.wikipedia.org/wiki/Method_(computer_programming http://en.wikipedia.org/wiki/Static_variable

我特别是在谈论Java。 - WAMoz56

6
“static”关键字可能会让人感到困惑,因为在它产生的C语言中,它有多重含义。当用于函数内声明变量时,它表示该变量具有函数外的生命周期。它本质上是一个仅限于函数的私有全局变量。如果全局变量是静态的,那么它本质上就是该源文件的私有全局变量。在这两种情况下,变量只有一个内存位置,就像全局变量一样。只是编译器防止你在函数或编译单元之外访问它。
我认为“static”一词之所以被使用,是因为静态变量的位置永远不会改变,与普通的局部变量相反,后者将在调用函数时根据堆栈的状态在某个位置拥有内存位置。
在创建C++时,此关键字被重新定义为指代类级别的属性和方法。我认为,这样做的想法是静态方法或属性是一种类似于全局的东西,但是只能在类中使用。如果考虑它们在内存中的布局方式,这似乎是有一定道理的,因为静态属性将像全局变量一样具有单个地址。唯一的区别是编译器不允许您在类外部使用它。
自从Java(和其他语言)采用了受C++启发的语法以来,“static”用于指代类方法和属性。这是不幸的,因为这个关键字的使用与英语含义几乎没有关系。
但总的来说,这就是它的意思。在大多数语言中,如果它是“静态的”,那么整个程序中只有一个。将其视为具有单个固定内存地址的东西。

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类,而是使用了静态的calculatePower方法。

1

静态变量是所有类实例都使用的变量,而普通变量则会重新初始化。静态方法可以在不创建对象的情况下调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接