Curso de Java SE Orientado a Objetos

Curso de Java SE Orientado a Objetos

Anahí Salgado Díaz de la Vega

Anahí Salgado Díaz de la Vega

Static: Variables y Métodos Estáticos

7/38
Recursos
Transcripción

Los métodos y variables estáticos nos ayudan a ejecutar o conseguir algún código desde clases no han sido instanciadas, ya que sus valores se guardan en la memoria de nuestro programa, no en diferentes objetos instanciados a través de una clase.

Las variables estáticas mantienen su valor durante todo el ciclo de vida de nuestro programa, por lo tanto, podemos alterar los valores de una variable estática desde una clase y consumir su valor alterado desde otra sin necesidad de conectar ambas clases.

También podemos importar los métodos estáticos de una clase para usarlos sin necesidad de escribir el nombre de la clase:

import static com.anncode.operaciones.Calculadora.*
import static java.lang.Math.*

public class Principal {
  public static void (String[] args) {
    int number = suma(3, 5);
    System.out.println(number + PI);
  }
}

Aportes 129

Preguntas 19

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Las variables static no pertenecen al objeto si no a la clase, si se modifica la variable static esto se verá reflejado en todos los objetos que hayan sido creados con esa clase.

Un ejemplo en donde usar static podría ser en un ID eje:

public class Doctor {
    //Atributos
    static int ID = 0;
    int id;

    Doctor(){
        id = ID;
        ID++;
    }

    public int getId(){
        return id;
    }
}
  	    Doctor d1 = new Doctor();
        Doctor d2 = new Doctor();
        Doctor d3 = new Doctor();
        System.out.println(d1.getId() + " " + d2.getId() + " " +d3.getId());
        //imprimirá 0,1,2
        //y cada vez que creemos un nuevo Doctor lo va a incrementar

¿Que es Static? se utiliza para definir métodos o variables de ese tipo estático. Utilizamos Static para llamar una variable sin utilizar un objeto. Se invoca en una clase que no tiene instancias de la clase.

¿Que nivel de Scope tiene una variable de tipo Static? Una variable de ese tipo, mantiene su ciclo de vida en todo el programa mientras este corriendo el programa.

Un problema común es que cuando se usa static en un método y al mismo tiempo se quiere manipular una variable, esa misma debe ser static sino saldrá error.

static
* se puede usar en toda la clase
* está definido por la palabra reservada static
* utilizamos static para llamar una variable sin utilizar un objeto
* Puede ser accedido indicando el nombre de la clase, la notación punto y el nombre del método
* se invoca en una clase que no tiene instancias de la clase
* las variables static no pertenecen al objeto sino a la clase, se se modifica la variable static esto se verá reflejado en todos los objetos que hayan sido creados con esa clase
* una variable de este tipo, mantiene su ciclo de vida en todo el programa mientras este corriendo el programa
* variable static puede mutarse(cambiar de valor), variable final es inmutable (no puede cambiar de valor)
* Un método estático solo puede acceder a datos estáticos
* método static pertenece a la clase y no al objeto
* un método estático puede llamar solo a otros métodos estáticos y no puede invocar un método no estático a partir de él

Formas de llamar a propiedades/métodos:

  1. A través de los objetos de la clase
  2. A través de la misma clase con los métodos estáticos

Métodos estáticos:
Podemos usarlo en toda la clase
Podemos accesar a ellos usando el nombre de la clase
No necesita instanciar objetos

Las variables y metodos static nos ahorran el crear un objeto y a la vez ahorramos memoria.
Tambien podemos poner nuestras propias constantes y metodos staticos en una clase especifica y mantener el codigo ordenado.

A los que se les complico un poco le dejo este ejemplo y un video donde se profundiza mas.
El ejemplo es de un comentrio que realizo otra persona no es mio, pero me gusto como lo explico de simple

Si no comprenden el uso de static espero que este ejemplo les sirva para entender…

Variable deuda Static

Supongamos que 2 personas tienen que pagar una deuda de 10.000. La persona 1 tiene 2.000 y decide rebajar la deuda. Al día siguiente la persona 2 verifica la cuenta y observa que debe 8.000 y decide poner 5.000 para rebajar la cuenta. A la mañana siguiente la persona 1 verifica la cuenta y observa que ya solo queda por pagar 3.000 y los paga y de esta forma la persona 1 y la persona 2 salieron de deudas… Por qué? Porque al ser la deuda static estaban compartiendo ambas personas la misma deuda, si una persona manipulaba el valor se veía reflejado en la otra persona, mientras que si no fuera Static si la persona 1 pagaba 10.000 para cancelar la deuda la persona 2 seguiría todavía con los mismos 10.000 ya que en este caso serían copias independientes.

Espero haberles ayudado 👍🏽

https://www.youtube.com/watch?v=QIV7FfXa-zY&list=PLU8oAlHdN5BktAXdEVCLUYzvDyqRQJ2lk&index=37

con esta clase , me convenzo mas que aprender programacion, es mucho mejor por videos grabados , que clases presenciales, ya que muchas veces en clases presenciales si no entendiste en un punto el resto de la clase seguiras perdido, a menos que tengas que preguntar otra vez , y en general, en un video grabado puedes revisarlo y lo que no entendiste googlearlo para saber a mas profundidad.

Class Notes

<h3>Static vs Non-Static methods</h3>

Non-Static: They require you to instantiate an object to use them

Static: They don’t need to be instantiated to be used

Example:

public class Calculator {
	
	public static int add(int a, int b){
		return a+b;
	}
}

In this case, whenever you want to use the add(a, b) method you won’t need to “create a new calculator” to use it. Since the method is a static one, we can do:

public class SomeOtherClass {

	public static void main(String[] args) {
		Calculator.add(1,2);
	}
}
<h3>Static vars</h3>

Remember Math.PI? This is an static variable, which means we can use it just by typing the name of the class and the var. An example of this could be:

public class Calculator {

	public static int someVar = 123;
}

Having this we can use the val of the var someVar located in the class Calculator. Ex:

public class SomeOtherClass {

	public static void main(String[] args) {
		int myVar = Calculator.someVar;
	}
}
<h3>Static Imports</h3>

Static imports allow you to use static methods and vars of a program without having to mention its class. Ex: instead of typing Math.PI to access the PI static var, we can just do import static java.lang.Math.*; to get all the static vars and methods from Math. So now we can just type PI, and we will get the same value as if we were to type Math.PI. Honestly, I don’t like this type of approach and will rather just type Math.PI to know its presidency.

Es importante resaltar que cuando se declara un atributo o variable de forma static en una clase, dicho atributo tendrá siempre el mismo valor o contenido para todos los objetos que se creen de dicha clase.

Para delimitar un poco la función que tiene la palabra reservada Static, lo mejor es pensar en qué atributos de nuestro programa van a tener un valor constante durante toda la ejecución o que cambiarán en muy pocas situaciones, de la misma forma hacerlo con los métodos, y así a ellos otorgarles la característica Static. Esto con la finalidad de que no se ocupe un espacio en memoria con cada objeto que se instancia de esa clase, y en lugar de eso, siempre se use la misma variable que está ocupando un solo lugar en memoria.

Les comparto los apuntes que tome esta clase, es muy completo y leyéndolo podrán comprender o tener noción de lo que vimos en la clase.

**EXELENTES clases de Anahí, es la mejor explicando. LA AMO. su forma de enseñar me hace tenerle amor al aprendizaje **

Excelente forma de compartir todo tu conocimiento, me ha ayudado mucho, gracias

STATIC: llamar una variable sin usar un objeto. Guárdenlo en su mente, lo van a necesitar

Para complementar… piensen en un programa que ejecute todos los cálculos de área y perímetro de distintas formas geométricas bidimensionales y tridimensionales. Claramente a las figuras que basen su forma en un círculo tendrán que usar PI para dichos cálculos. Si usamos distintos métodos en distintas clases, en cada una de ellas usamos un PI declarado sin la palabra reservada Static, en cada método habrá un espacio de memoria diferente para prácticamente el mismo valor: 3,1415… lo cual es inefciente

Siempre me costo entender bien como funciona el static, gracias esto me soluciono varias dudas, como su alcance en que es accedida por medio de los modificadores de acceso , que es usada por medio de otra clase a través del import y que es usada tanto en variables como en métodos.

Buenísima la clase para entender Static. Muchas veces no entendía esto.

Static sirve para crear miembros que pertenecen a la clase, y no a una instancia de la clase. Esto implica, entre otras cosas, que no es necesario crear un objeto de la clase para poder acceder a estos atributos y métodos.

podria ser algo como asi?

public class Ejecutor {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Estudiante e1 = new Estudiante();
		e1.mostrarInfo();
		Estudiante e2 = new Estudiante();
		e2.mostrarInfo();
		// accediendo a la variable b static de la clase creada
		e1.b++; // incrementa en 1
		// Accediendo directamente desde la clase, sin instanciar un objeto
		Estudiante.b++; // incrementa en 1
		// como se puede ver la variable b static es compartida por todas las
		// instancia de la clase
		e2.mostrarInfo();
	}
}

class Estudiante {
	int a; // se inicializa en cero por cada objeto creado
	static int b; // se inicializa en cero cuando la clase es cargada y no por
					// cada objeto creado

	Estudiante() {
		// Constructor que incremente en 1 la variable static b
		b++;
	}

	public void mostrarInfo() {
		System.out.println("Valor de a = " + a);
		System.out.println("Valor de b = " + b);
	}
	// en un método static solo puede declar o llamar variables static
	// se puede descomentar para ver el error
	// public static void incrementar(){
	// a++;
	// }
}

Me viene a la mente un clase que estoy haciendo para acceder a un web services, del cual tengo sus credenciales como son: usuario, contraseña, cadena; como son valores que no van a cambiar, puedo declararlos como statics y cada vez que requiera algun valor de estos puedo acceder a ellos, sin necesidad de un get así las puedo declarar :

public static String USER = “fulanito”;
public static String PASSWORD= “*****”;
public static String CHAIN = “21212121”;

https://www.youtube.com/watch?v=mvBX4-5-A4o
con este video me quedo todo mucho mas claro

Un uso de variable “static” podria ser como un contador de instancias de objetos. En este caso, la cantidad de doctores.

un valor de tipo estatico puede ser la fecha en la que se agenda la cita.

Variable static en atributos:
solo deben ser atributos estaticos cuando el valor no cambie en toda la aplicacion

Variable static en metodos:
Solo si el comportamiento no va cambiar

NOTA:
hay que tener en cuenta que si usamos static es por que:
1.- la variable va ser implementada, mas no modificada
2.- el metodo va ser unico e inmodificable.
3.- no repercutira en la aplicacion el cambio realizado.

Métodos y variables estáticos.
Utilizados para definir datos estáticos en la clase, donde son guardados en el programa.
Para utilizar los métodos estáticos, los importamos en la cabecera de nuestros programas sin la necesidad de que sean creados en la clase, y así poder consumir su valor alterado en dicha clase que estemos codificando, sin la necesidad de que tengan una relación.

Debido a esto, las variables static, mantienen su valor en todo el ciclo de vida del programa.

Otra forma de acceder a las variables estáticas es importándolas con la clase.

Otra forma de acceder a las variables estáticas es importándolas con la clase.

Otra forma de acceder a las variables estáticas es importándolas con la clase.

Otra forma de acceder a las variables estáticas es importándolas con la clase.

Otra forma de acceder a las variables estáticas es importándolas con la clase.

Otra forma de acceder a las variables estáticas es importándolas con la clase.

Forma de declarar y llamar una variable estática perteneciente a una clase

Forma de declarar y llamar a un método estático perteneciente a una clase.

Las variables y métodos estáticos en Java sirven para que puedan ser accedidos desde cualquier parte del código (inclusive desde otras clases) sin tener que crear un objeto. Un ejemplo muy común en donde se puede utilizar variables estáticas es cuando se necesita definir una configuración global en un proyecto.

Creo que el alcance de las variables Static serian algo asi como Protected.

Una Variable del tipo Static

public class Doctor {
    //Atributos.
    static int id;
    String name;
    String speciality;
    Doctor(){
        System.out.println("Costruyendo el Objeto Doctor");
    };

Creo que una variable static podría ser la variable conexion de una clase que conectora de base de datos.

Un ejemplo para una variable static es cuando se requiere llevar un registro consecutivo. Por ejemplo se tienen distintas clases y al momento de crear un objeto el contador valla sumando +1 sin importar la clase de la cual fue creado el objeto.

las propiedades static equivalen en lenguaje C a los #define y sirven para definir constantes y hacen el código más legible.

Si a alguien le sirve 😄 aquí están mis apuntes de las clase 😄

Para mi una variable estática es aquella que va a tener un alcance amplio en un desarrollo y la podre alteras en diferentes clases, se me ocurre como variable el nombre de "estado_Materia" puede haber diferentes entornos en el cual el estado puede cambiar por ejemplo puede ser "Sólido, Líquido y Gaseoso"... Yo puedo tener una masa y esta puede cambiar en muchos entornos.

static es un tipo de variable o método que se usa en toda la clase sin necesidad de instanciar un objeto, si ponemos static final entonces básicamente estamos declarando una constante cuyo valor no cambia

Un ejemplo muy común de las variables estáticas es contar el número de instancias que se han creado de una clase:

public class Flor {

    public static int totalDeFlores = 0;

    Flor(){
        totalDeFlores++;
    }
}

Considero que al crear y usar una variable estatica es como si crearamos una variable global que va estar presente en todo la ejecucción del programa, logicamente tiene una sintaxis diferente, pero basicamente es una variable que va ser global ya que esta presente en toda la ejecuón

Tenia problemas para comprender este tipo de dato. Esta clase fue de gran ayuda.

Los miembros estáticos mantiene su valor en toda la ejecución del programa. y no necesita crearse una referencia en memoria para ser accedidos

🤔 Una variable o método estático, puede ser usada en todas las clases que la implementen.







las variables estáticas son muy útiles para las clases de utilidades ya que son estándar de tal forma que ser importada pueda obtener los valores de la misma

Los métodos y variables estáticos podemos accederlos sin un objeto, es decir, no es necesario instanciar la clase para poder acceder a sus métodos y variables estáticos. El ciclo de vida de las variables estáticas es constante durante la ejecución del programa.
static es la palabra reservada para definir que un método o variable es estático.

Definir el ID como estático no me parece lo ideal porque es modificado con cada nueva instancia. Por esto definí una ID Global que registrará el último ID usado y ese sí lo definí como estático.

<h4>Main.java</h4>
public class Main {
    public static void main(String[] args) {
        Doctor doctor = new Doctor("Victor1");
        Doctor doctor2 = new Doctor("Victor2");
        Doctor doctor3 = new Doctor("Victor3");
//        doctor.name = "Victor Inojosa";
        doctor.showName();
        doctor2.showName();
        doctor3.showName();
        doctor.showId();
        doctor2.showId();
        doctor3.showId();
    }
}
<h4>Doctor.java</h4>
public class Doctor {
    static int globalId; //este id es global, no es unico para la instancia
    int id; //este es el id unico de la instancia
    String name;
    String specialty;

    Doctor(String name){
        System.out.println("Creating Doctor object");
        this.name = name;
        id = ++globalId;
    }

    public void showName(){
        System.out.println(name);
    }

    public void showId(){
        System.out.println("El ID es: " + id);
    }
}

No puedo usar el JDK ! Ahora hay que pegar $150

Static tiene un scope para todas las clases

El método estático en Java es un método que pertenece a la clase y no al objeto. Un método estático solo puede acceder a datos estáticos.

Es un método que pertenece a la clase y no al objeto (instancia)
Un método estático solo puede acceder a datos estáticos. No puede acceder a datos no estáticos (variables de instancia)
Un método estático puede llamar solo a otros métodos estáticos y no puede invocar un método no estático a partir de él.
Un método estático se puede acceder directamente por el nombre de la clase y no necesita ningún objeto
Un método estático no puede hacer referencia a “este” o “super” palabras clave de todos modos

Un ejemplo de variable static podría ser en contador de las citas asignadas al la clase doctor.

Yo opino que el alcance de sería global

Genial!!

Según los visto la variable static rompe el paradigma de programación orientada a objeto, porque no necesitamos crear un objecto para asignar o acceder a la variable static.

Hay que ir con cuidado al modificar variables estáticas dese clases diferentes.

public class Main {
    public static void main(String[] args) {
        System.out.println("Hola mundo");

        Doctor Ariel = new Doctor("Ariel Merino", "Neurología");
        Ariel.showName();
        Ariel.showSpeciality();
    }
}

Les juro que estuve utilizando Static en Unity sin saber realmente como funcionaba, pero por fin lo aclare jaja

Variables estáticas

Una variable estática es aquella que es visible para todas las clases que se encuentran en la misma raíz que esta, estas se ocupan para crear librerías. Un ejemplo de uno de estas variables podría ser la URL de algun archivo donde se escriban y lean datos.

Static es una variable o clase o metodo … etc, global que es vista por todo el codigo o otras clases llamandolas con import

las variables y metodos “static” tienen alcance global, se guardan en la memoria de nuestro programa, no en diferentes objetos instanciados. Mantiene el valor durante todo el ciclo de vida de nuestro programa y esto tiene grandes ventajas.

Variable estática: Pertenece a todas las instancias de la
clase, Puede estar como pública o como privada.
Si está marcada como pública, se puede acceder desde fuera de la clase, sin necesidad de una instancia de la clase.
Las variables de tipo static son, en algunos aspectos, parecidas a las
variables globales de algunos lenguajes.

variable static se usan para los valores globales y los métodos static se utilizan sin necesidad de instanciar el objeto donde se encuentran, aunque dependera del caso de uso. aunque no es muy recomendado, usar metodos static

a nivel de memoria pareciera que la palabra static reserva un lugar de memoria en el stack a la hora de compilar el programa.

El ámbito de static es de toda la clase.

Un ejemplo puede ser contar el número de Personas que participan en un Hospital, contando tanto cada Doctor como cada Patient creado.

variables estáticas dependen de la clase, no de el objeto.
no importando que clase u objeto la llame, esta no cambiara su valor (a no ser que asi se le indique)

Excelente explicación y uso de las variables y métodos estáticos para ahorrar memoria

Excelente explicacion de la aplicacion Static 😄

static le da el valor a las variables y a las funciones de poder ser llamados sin necesidad de declarar un objeto o instanciar la clase donde se encuentra.
solo se direccióna a la clase que la contiene “.” y se llama la función o la variable que queremos utilizar:
Doctor.funcion();

Static tiene un alcance global dentro de la clase que pertenezca. Para usarlos, a veces es necesario importar su clase y el paquete al que pertenece. Un ejemplo de static es el método .format() para controlar el número de decimales después del punto o coma.

No conocía la funcionalidad de la palabra reservada static, ahora voy a sacarle provecho en los siguientes proyectos que haga, muchas gracias por la clase.

gracias , que explicacion tan buena.

Supongo que los metodos y variables de una clase utilitaria serian buenos candidatos para ser static

gracias, increible material.

su scope seria todo el programa, y para mi seria una variable o método que se puede accesar global mente, pero si quisiéramos que fuese inmutable, la terminaríamos con final.


public static final int miVariable = 0

Muy bueno lo de importar una clase de manera estática!

Buen video

¿Se pierde eficiencia importando toda la clase static? es decir, ¿Es más eficiente importar solo los elementos estáticos que se vayan a usar o da lo mismo? Gracias 😃

Si entiendo bien uno importa la clase que contiene el método static, al realizar esto, se puede usar directamente el método sin hacer el llamado de la clase donde se encuentra 😄

Muy interesante!!

super claro 😃

Las variables estáticas, o de clase, son aquellas que pertenecen a la propia clase donde han sido declaradas, y dependiendo del modificador de visibilidad usado podrían ser sólo accedidas desde la propia clase en la que han sido declaradas. UnaClase compartirá una única copia de la variable variableGlobal independientemente del número de inicializaciones que hagamos de la clase, y el último valor de dicha variable será el que esté vigente en cada momento. Al ser una variable de clase, repito, no es necesario crear ninguna instancia de dicha clase para poder usarla (no es necesario invocar a new).

Static : llamar variable o método sin crear un objeto de la clase que lo contiene, siempre se debe utilizar el nombre de la clase para poder acceder a ellos.

Esto es muy practico para crear clases con funcionalidades del sistemas como consultas a las base de datos y no tener que instanciar la clase cada vez que queramos usarla. De verdad es muy util.

Que pasa si importo dos librerías como static y ambas contienen un método o una variable con el mismo nombre?

-Los métodos static se pueden usar en toda la clase
-Pueden ser accesados usando solamente el nombre de la clase ** sin tener una instancia de la misma**
-Las variables estáticas mantienen su ciclo de vida y alteraciones desde otras clases

Las variables estáticas, son accesibles tanto en referencia a la Clase como al objeto; es como que pertenecen propiamente a la clase; les veo gran utilidad como una constante.

static final int variable=3.14;

Static podría ser los métodos de los personajes

cuando no usar o no abusar del uso de métodos o variables static?

Genial.

Interesante!

static se usa para métodos, constantes y variables globales.

Me gustaría saber cual es la razón por las que les llamaron “static” a esos métodos (emoji pensando).

Lo que puedo inferir, es que las variables de tipo static tienen la característica de variables globales, no muy recomendadas por el acoplamiento que implica en soluciones modulares. Sin embargo, puedo visualizar la utilidad de esta característica de los elementos, en constantes y en métodos con una funcionalidad transversal como operaciones matemáticas simples u operaciones sobre campos de fechas.