什么是静态方法和变量?

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

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

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

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

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

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

 String x = String.valueOf(123.45); 

注意如何使用后跟一个点来调用实例方法. ,使用后跟一个点访问静态方法.

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

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

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

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

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

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

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

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

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

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

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

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

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

从键盘输入数据时,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类并使用了staticPowerPower方法