2012-05-04 15 views

Respuesta

7

No creo que esta sea una pregunta fácil de responder porque significa algo ligeramente diferente según el idioma. Si tuviera que ponerlo en los términos más generales que probablemente varían de persona a persona:

Una variable estática es una variable que se comparte en todas las instancias de una clase.

Un método estático es un método que se puede invocar en una clase y, por lo general, no requiere la creación de una instancia de la clase.

De nuevo, si tuviera que elegir tres idiomas diferentes, daría tres respuestas diferentes.

Wikipedia también podría ayudar un poco a definir estas cosas.

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

+0

Estoy hablando de Java en particular. – WAMoz56

15

En Java, static denota class methods y de clase de variables (en contraposición a los métodos de instancia y variables de instancia). Se puede acceder a estos métodos y variables sin una instancia presente.

Contraste esto con los métodos de instancia y las variables de instancia: se debe acceder a ellos a través de un objeto. Por ejemplo, length() opera sobre un objeto:

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

En contraste, valueOf no puede operar sobre un objeto; Por otra parte, se crea un nuevo objeto cuando se le llama:

String x = String.valueOf(123.45); 

Nota cómo los métodos de instancia se denominan utilizando <objectName> seguido de un punto ., mientras que se accede utilizando métodos estáticos <className> seguido de un punto ..

6

La palabra clave 'estática' puede ser confusa porque en C, donde se originó, tiene múltiples significados. Cuando se usa para declarar una variable en una función, significa que la variable tiene una vida fuera de la función. Es esencialmente un global que es privado para la función. Si una variable global es estática, es esencialmente privada para ese archivo fuente. En ambos casos, la variable tiene una sola ubicación de memoria al igual que un global. Es solo que el compilador le impide acceder a él, ya sea fuera de la función o de la unidad de compilación.

Supongo que se utilizó la palabra 'estática' ya que la ubicación de una variable estática nunca cambia, en oposición a una variable local normal, que tendrá una ubicación de memoria en la pila dependiendo de cómo se veía la pila cuando la función fue llamada.

Cuando se creó C++, esta palabra clave se reorientó para hacer referencia a las propiedades y métodos de nivel de clase. Supongo que el pensamiento era que un método o propiedad estática era una especie de global que era privado para la clase. Si piensas cómo se presentan en la memoria, tiene cierto sentido, ya que una propiedad estática tendrá una única dirección, como una variable global. La única diferencia es que el compilador no le permite usarlo fuera de la clase.

Dado que Java (y otros lenguajes) tienen una sintaxis inspirada en C++, el uso de 'static' para referirse a los métodos y las propiedades de la clase se usa también allí. Es desafortunado, porque el uso de esta palabra clave tiene poca relación con el significado en inglés.

Pero en general, esa es la manera de verlo. En la mayoría de los idiomas, si es 'estático', solo hay uno en el programa completo. Piense en ello como algo con una sola dirección de memoria fija.

1

variable estática es una variable utilizada por todas las instancias de una clase donde, como en las variables normales, la variable se inicializa de nuevo. Los métodos estáticos pueden significar llamarlos sin siquiera crear un objeto.

1

Mostraré ejemplos para comprender claramente los métodos estáticos.

Al introducir datos de java teclado utiliza clase escáner

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

Por lo tanto, significa que el método nextInt() no es estático.

El método estático es el método que se puede usar sin instanciar una clase.

mira el siguiente ejemplo:

public class Calculate { 

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


} 

Uso de método estático.

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

así que no instanciado el método utilizado calculatePower clase Calcular y que es estática

Cuestiones relacionadas