Estaba leyendo el texto que me dieron en mi libro de texto y no estoy realmente seguro de entender lo que dice. Básicamente me dice que los métodos estáticos o métodos de clase incluyen la palabra clave "modificador" static. ¿Pero realmente no sé qué significa eso?
¿Podría alguien explicarme en términos realmente simples qué son los métodos estáticos o de clase?
Además, ¿podría obtener una explicación simple sobre qué son los métodos de instancia?
Esto es lo que me dan en el libro de texto:
Existen importantes implicaciones prácticas de la presencia o ausencia del modificador estático. Un método de clase pública puede invocarse y ejecutarse tan pronto como Java procese la definición de la clase a la que pertenece. Ese no es el caso de un método de instancia. Antes de que se pueda invocar y ejecutar un método de instancia pública, se debe crear una instancia de la clase a la que pertenece. Para usar un método de clase pública, solo necesita la clase. Por otro lado, antes de poder utilizar un método de instancia pública, debe tener una instancia de la clase.
La forma en que se invoca un método estático dentro de la definición de otro método varía según si los dos métodos pertenecen o no a la misma clase. En el ejemplo anterior, factorial y main son ambos métodos de la clase MainClass. Como resultado, la invocación de factorial en la definición de main simplemente hace referencia al nombre del método, "factorial".
fuente
static
(una clase, método o campo) en realidad no pertenece a nada, simplemente se cuelga en la clase con fines organizativos.Los métodos y variables que no se declaran como estáticos se conocen como métodos de instancia y variables de instancia. Para referirse a métodos y variables de instancia, primero debe instanciar la clase significa que primero debe crear un objeto de esa clase. Para estático, no necesita instanciar la clase u puede acceder a los métodos y variables con el nombre de la clase usando el signo de punto Qué esta en (.)
por ejemplo:
Person.staticMethod(); //accessing static method.
para el método no estático, debe crear una instancia de la clase.
Person person1 = new Person(); //instantiating person1.nonStaticMethod(); //accessing non-static method.
fuente
Los métodos estáticos, las variables pertenecen a toda la clase, no solo a una instancia de objeto. Un método estático, la variable se asocia con la clase como un todo en lugar de con instancias específicas de una clase. Cada objeto compartirá una copia común de los métodos estáticos, variables. Solo hay una copia por clase, sin importar cuántos objetos se creen a partir de ella.
fuente
Diferencia entre métodos estáticos y métodos de instancia
Los métodos de instancia son métodos que requieren que se cree un objeto de su clase antes de poder llamarlo. Los métodos estáticos son los métodos en Java que se pueden llamar sin crear un objeto de clase.
El método estático se declara con la palabra clave estática. El método de instancia no es una palabra clave estática.
Método estático significa que existirá como una sola copia para una clase. Pero los métodos de instancia existen como copias múltiples dependiendo del número de instancias creadas para esa clase.
Los métodos estáticos se pueden invocar mediante la referencia de clase. Los métodos de instancia o no estáticos se invocan mediante la referencia de objeto.
Los métodos estáticos no pueden acceder a métodos de instancia y variables de instancia directamente. El método de instancia puede acceder a variables estáticas y métodos estáticos directamente.
Referencia: geeksforgeeks
fuente
Métodos de instancia => invocados en una instancia específica de una clase específica. Method quiere saber en qué clase se invocó. La forma en que sucede hay un parámetro invisible llamado 'esto'. Dentro de 'this' tenemos miembros de la clase de instancia ya configurados con valores. 'Esto' no es una variable. Es un valor, no se puede cambiar y el valor es referencia al receptor de la llamada. Ej .: Llamas a reparadores (método de instancia) para arreglar tu TV (programa real). Viene con herramientas (parámetro 'este'). Viene con herramientas específicas necesarias para arreglar TV y también puede arreglar otras cosas.
En métodos estáticos => no existe tal cosa como 'esto'. Ej: El mismo reparador (método estático). Cuando lo llame, debe especificar a qué reparador llamar (como electricista). Y vendrá y arreglará tu televisor solamente. Pero no tiene herramientas para arreglar otras cosas (no existe el parámetro 'esto').
Los métodos estáticos suelen ser útiles para operaciones que no requieren ningún dato de una instancia de la clase (de 'esto') y pueden realizar su propósito previsto utilizando únicamente sus argumentos.
fuente
El comportamiento de un objeto depende de las variables y los métodos de esa clase. Cuando creamos una clase, creamos un objeto para ella. Para los métodos estáticos, no los requerimos, ya que los métodos estáticos significan que todos los objetos tendrán la misma copia, por lo que no es necesario un objeto. p.ej:
En el método de instancia, cada objeto tendrá un comportamiento diferente, por lo que deben llamar al método utilizando la instancia del objeto. p.ej:
Myclass x = new Myclass(); x.get();
fuente
Si se supone que el estado de un método no debe cambiarse o no va a utilizar ninguna variable de instancia.
Quieres llamar al método sin instancia.
Si solo funciona con los argumentos que se le proporcionan.
Las funciones de utilidad son un buen ejemplo de métodos estáticos. es decir, math.pow (), esta función no va a cambiar el estado para diferentes valores. Entonces es estático.
fuente
En resumen, los métodos estáticos y las variables estáticas son a nivel de clase, mientras que los métodos de instancia y las variables de instancia son a nivel de instancia o de objeto.
Esto significa que cada vez que se crea una instancia u objeto (usando new ClassName ()), este objeto conservará su propia copia de las variables instace. Si tiene cinco objetos diferentes de la misma clase, tendrá cinco copias diferentes de las variables de instancia. Pero las variables y métodos estáticos serán los mismos para los cinco objetos. Si necesita algo común para cada objeto creado, hágalo estático. Si necesita un método que no necesite datos específicos del objeto para funcionar, hágalo estático. El método estático solo funcionará con variables estáticas o devolverá datos sobre la base de argumentos pasados.
class A { int a; int b; public void setParameters(int a, int b){ this.a = a; this.b = b; } public int add(){ return this.a + this.b; } public static returnSum(int s1, int s2){ return (s1 + s2); } }
En el ejemplo anterior, cuando llamas a add () como:
A objA = new A(); objA.setParameters(1,2); //since it is instance method, call it using object objA.add(); // returns 3 B objB = new B(); objB.setParameters(3,2); objB.add(); // returns 5 //calling static method // since it is a class level method, you can call it using class itself A.returnSum(4,6); //returns 10 class B{ int s=8; int t = 8; public addition(int s,int t){ A.returnSum(s,t);//returns 16 } }
En primera clase, add () devolverá la suma de los datos pasados por un objeto específico. Pero el método estático se puede usar para obtener la suma de cualquier clase que no sea independiente de una instancia u objeto específico. Por lo tanto, para los métodos genéricos que solo necesitan argumentos para funcionar, se pueden hacer estáticos para mantenerlos todos SECOS.
fuente
Método de instancia vs método estático
El método de instancia puede acceder a los métodos de instancia y las variables de instancia directamente.
El método de instancia puede acceder a variables estáticas y métodos estáticos directamente.
Los métodos estáticos pueden acceder directamente a las variables estáticas y a los métodos estáticos.
Los métodos estáticos no pueden acceder a métodos de instancia y variables de instancia directamente. Deben usar una referencia al objeto. Y el método estático no puede usar esta palabra clave ya que no hay ninguna instancia para la que se pueda hacer referencia a "esto".
fuente
El modificador estático cuando se coloca delante de una función implica que solo existe una copia de esa función. Si el modificador estático no se coloca delante de la función, entonces con cada objeto o instancia de esa clase se realiza una nueva copia de esa función. :) Lo mismo ocurre con las variables.
fuente