¿Cuál es la diferencia entre final y estático en Java?


La mejor respuesta

Uh, son conceptos completamente diferentes.

Un miembro marcado como estático pertenece a la clase, más que a una instancia en particular. A veces, las clases solo pueden tener miembros estáticos, con un ejemplo obvio es la clase java.lang. Double que «encajona» primitivas dobles: puede obtener el valor de un doble individual a través de un método de instancia (myDouble.doubleValue()) pero obtener cosas «universales» a través de miembros estáticos (Double.MAX\_VALUE).

Un miembro marcado como final no puede * tener su valor (que es su valor si es primitivo, o su referencia si objeto) cambió una vez inicializado. Es posible que aún pueda cambiar las propiedades de un objeto (puede ser mutable ) pero no puedes * reemplazar el objeto con otro. (* Técnicamente, puede «hacer trampa» con la reflexión, la manipulación del código de bytes u otras formas de «romper las reglas», pero si lo hace, presumiblemente conoce usted re «hacer trampa».)

Responder

Para saber cuándo usar

private static final X x;

Debe saber cuál es el uso de esas palabras clave.

Veamos

  1. privado: se usa cuando desea restringir a cierto miembro de una clase a no ser accesible fuera de esa clase.
  2. static – Cuando declaras cualquier miembro estático, está vinculado a su clase y no a un objeto. Para simplificarlo, el miembro estático se inicializará cuando se cargue la clase. Entonces, cada vez que actualice el valor de ese miembro, también se actualizarán todos los lugares donde se hace referencia a él. Por lo tanto, se accede al miembro estático por el nombre de la clase y no a sus objetos, ya que el valor del miembro permanecerá igual independientemente de los objetos.
  3. final: esta palabra clave, cuando se usa con variables miembro, define que una vez que se carga la clase y se asigna el valor, no se puede cambiar.

Así que veamos qué sucede cuando declara una variable como la siguiente:

private static final String PRIVATE\_STATIC\_FINAL\_STRING = "String";

Ahora,

PRIVATE\_STATIC\_FINAL\_STRING se define como privado, por lo que ganó «No ser accesible fuera de la clase declarante». También está definido como estático, por lo que su valor seguirá siendo el mismo independientemente de los objetos de su clase. Y está definido como final, por lo que una vez que se carga la clase, su valor no cambiará.

Por lo tanto, PRIVATE\_STATIC\_FINAL\_STRING funcionará como una cadena de nivel de clase no modificable que no será accesible fuera de la clase de declaración.

Espero que esto le ayude a aclarar sus dudas. Si necesita más ayuda, puede comunicarse conmigo y trataré de ayudarlo tanto como pueda.

¡Buena suerte y feliz aprendizaje!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *