Constantes de Java y modificadores estáticos

En java, constantes conocidas como palabra clave (final) con un valor que nunca cambiará. He visto a algunas personas crear constantes sin declarar un modificador estático. Mi pregunta es, ¿las constantes deben declararse como estáticas? Si es así o si no, ¿por qué?

Respuesta 1

Si asigna un valor a la finalvariable al declararla, no tiene sentido que no sea static, ya que cada instancia tendría su propia variable con el mismo valor, lo cual es un desperdicio.

Sin embargo, si necesita una variable de instancia cuyo valor solo se puede establecer una vez (pero diferentes instancias pueden tener valores diferentes), esa variable debería ser finalpero no static.

Por ejemplo :

class Person 
{
    final int id;
    public Person(int id) {
        this.id = id;
    }
}
Respuesta: 2

Primero deberá comprender qué hacen las constantes (es decir, qué sucede cuando marca un campo / variable local como final).

Cuando un campo primitivo / de cadena se marca como final, se convierte en una constante de tiempo de compilación , es decir, su valor se pasa como parte del propio código de bytes. Por lo tanto, su valor no se calcula / genera en tiempo de ejecución . Esto le brinda un beneficio de rendimiento.

La palabra clave staticse usa para decir: este campo NO es exclusivo para cada instancia de una clase . También podría tener finalconstantes no estáticas . Además, si una variable local del método (primitiva) se marca como final, también se convierte en una constante.

Entonces, No, staticno tiene nada que ver con las constantes. Es una elección de diseño .

Respuesta: 3

Las constantes con la finalpalabra clave nunca cambiarán ... en realidad no puede cambiar la instancia a la que hace referencia este campo, pero puede cambiar los valores dentro de esta instancia.

Imagina este ejemplo:

class SomeClass {
    final Car MYCAR;
    ...
}

Con este código no podrá cambiar la referencia de MYCAR:

MYCAR = new Car(.....);

Pero puedes hacer algo como:

MYCAR.setPrice(10000);

Entonces, sí, hay un punto en NO hacer este campo staticsi alguna instancia SomeClassnecesita tener su propia copia del objeto, MYCARpero no desea que nadie cambie la referencia de este objeto.

Respuesta: 4

Lo que quieras. Yo personalmente usaría estática. No necesita crear un objeto cuando lo declara estático. También puede hacer un archivo 'constantes', donde almacena todas las constantes como.public final static ...

Entonces, básicamente, usa static final si es una 'constante' utilizada por todos los objetos. Si no, simplemente hazlo final y pásalo por el constructor.

Respuesta: 5

Técnicamente, la palabra clave finales suficiente para una constante, ya que no puede cambiar el valor de las variables finales una vez asignadas.

static debe usarse si la constante no está vinculada a una instancia de objeto particular.

Por ejemplo, considere que tiene una Circleclase y un método para calcular el área. Necesitas la constante Pipara este propósito. Piconstante no cambia de círculo a círculo. Por lo tanto, tiene sentido declarar a Pi como una final estática.

Respuesta: 6

Estoy tratando de crear un hash md5 [único] de múltiples cadenas [en Java]. Es decir, quiero md5 (cadena1, cadena2, cadena3, ..., cadenaN) Actualmente estoy tratando de concatenar todas las cadenas con algunas raramente ...

¿Cuál de las siguientes bases de datos es mejor para una gran aplicación de escritorio: Firebird, JavaDB, hsqldb? Necesito rendimiento, facilidad de uso y licencia totalmente gratuita.

Digamos que tengo una clase 'Perro' con muchos valores de Cadena y quiero todos esos valores en una Lista, ¿habría alguna forma mejor que agregar cada valor por sí mismos? Por ejemplo, toma esta clase ficticia, nota ...

Tengo una situación similar a una pregunta anterior sobre la emisión de XML. Estoy analizando datos en un SAX ContentHandler mientras los serializo en una secuencia. Sospecho que la solución en el enlace ...