Foros del Web » Programación para mayores de 30 ;) » Java »

constantes en java

Estas en el tema de constantes en java en el foro de Java en Foros del Web. hola!! yo estoy acostumbrada a programar en C pero ahora con esto de la OO me sale un problema. Yo en C se almacenar constantes ...
  #1 (permalink)  
Antiguo 14/05/2007, 03:25
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
constantes en java

hola!!

yo estoy acostumbrada a programar en C pero ahora con esto de la OO me sale un problema. Yo en C se almacenar constantes y demas, pero para el proyecto que desarrollo no se como hacerlo.aplicacion en la que uso struts, hibernate, mysql->como puedo almacenar constantes y luego poder consultarlas?

gracias
  #2 (permalink)  
Antiguo 14/05/2007, 03:36
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: constantes en java

Para crear constantes en java se usa final
  #3 (permalink)  
Antiguo 14/05/2007, 04:08
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: constantes en java

entonces yo podria hacer algo como esto:

final float var;

......continuo con el programa.....
var=numero.getnumero();
......sigo ahciendo cosas

y de este modo que la variable var pueda valer diferentes valores segun lo que me devuelva numero.getnumero()?

es decir, que la primera vez que se ejecute la funcion var pueda valer 8 y la siguiente(si he hecho un cambio en el objeto numero)que valga 15?

Seria posible?
  #4 (permalink)  
Antiguo 14/05/2007, 06:36
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Re: constantes en java

Hola:

Si pones final, no puedes cambiarle el valor, sólo vale el que pongas la primera vez.

Si haces esto

final float var=3.7;

eso vale 3.7 y ya no se puede cambiar.

Si además pones static, podrás acceder al valor de la constante sin necesidad de instanciar la clase y sólo tendras una constante definida, y no una por cada instancia de la clase

public static final float var = 3.7;

Echa un ojo, por ejemplo, a cómo se declara la constante PI en la clase Math

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 15/05/2007, 19:28
Avatar de zempox  
Fecha de Ingreso: mayo-2007
Mensajes: 32
Antigüedad: 16 años, 11 meses
Puntos: 1
Re: constantes en java

float var;
var=numero.getnumero();

tienes q declararla como una variable no como constante
porque sino no va a poder cambiar de valor...... declaras var llevas a cabo otras operaciones y el valor de var puede cambiar....
  #6 (permalink)  
Antiguo 15/05/2007, 20:50
Avatar de Yaraher  
Fecha de Ingreso: abril-2007
Ubicación: Lima, Perú
Mensajes: 262
Antigüedad: 17 años
Puntos: 9
Re: constantes en java

Algo bastante sencillo que puedes hacer es declarar una Clase Estática Configuracion, por ejemplo.
Código:
public static class Config
Así, en ella puedes definir los atributos constantes que quieras mantener a lo largo de tu aplicación, accediendo directamente a estos:

Código:
Config.setVar(numero.getNumero());
De todas formas, si colocas final, sólo se podrá colocar un valor único a tu variable durante la ejecución del programa, así que como dices, efectivamente, puedes asignarle un valor la primera vez que corre, y otro la siguiente vez que lo haga, ya que serían dos instancias de ejecución diferentes, pero no hacer lo mismo durante la misma ejecución del programa.
  #7 (permalink)  
Antiguo 15/05/2007, 23:18
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: constantes en java

Cita:
Iniciado por cris_maco Ver Mensaje
entonces yo podria hacer algo como esto:
final float var;

......continuo con el programa.....
var=numero.getnumero();
......sigo ahciendo cosas

y de este modo que la variable var pueda valer diferentes valores segun lo que me devuelva numero.getnumero()?

es decir, que la primera vez que se ejecute la funcion var pueda valer 8 y la siguiente(si he hecho un cambio en el objeto numero)que valga 15?

Seria posible?
Poderse se puede, pero tienes que asegurarte de que en cualquier ejecucion de un programa, sólo se pueda asignar el valor a esa variable UNA vez. De hecho el compilador no te dejara compilar el programa si existe la posibilidad de que le hagas dos asignaciones.

S!
  #8 (permalink)  
Antiguo 16/05/2007, 08:52
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: constantes en java

Cita:
Iniciado por cris_maco Ver Mensaje
entonces yo podria hacer algo como esto:

final float var;

......continuo con el programa.....
var=numero.getnumero();
......sigo ahciendo cosas

y de este modo que la variable var pueda valer diferentes valores segun lo que me devuelva numero.getnumero()?

es decir, que la primera vez que se ejecute la funcion var pueda valer 8 y la siguiente(si he hecho un cambio en el objeto numero)que valga 15?

Seria posible?
Pero cris,... Que tiene que ver eso con una constante???

Constante = no cambia de valor durante toda la ejecucion del programa.
  #9 (permalink)  
Antiguo 16/05/2007, 09:36
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: constantes en java

sí, tienes razon...Verás es que lo que quiero hacer es que yo tengo una serie de cantidades y calculo el total y quiero ese total para que cuando añada una nueva cantidad no tenga que recalcular todo sino usar el antiguo total y sumarlo a la nueva cantidad.
Me explico:

Valor:2
Valor:7
Valor:75

Total:84
...
añado un nuevo elemento de valor:30

pues que ese 30 se sume al 84 y que 114 pase a ser el nuevo total

que tal ahora?
  #10 (permalink)  
Antiguo 16/05/2007, 10:29
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: constantes en java

Mucho mejor.

Necesitas una variable 'static' es decir, una variable que compartan todos los objetos instanciados de la clase.

Obviamente ha de ser variable, usease, olvidate del final.

Saludos.

static float total;
  #11 (permalink)  
Antiguo 16/05/2007, 14:33
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: constantes en java

Ah, yo pensaba que querias que en cada ejecucion pudiera valer una cosa distinta. Si el valor puede cambiar en una misma ejecucion, ha de ser una variable, sin final.
  #12 (permalink)  
Antiguo 16/05/2007, 15:06
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: constantes en java

pues yo diria que son ejecuciones distintas ya que cada vez que añado un valor instancio el objeto que se encarga de calcular los valores que luego se sumaran.
Es que no quiero estar todo el dia recalculando porque si ademas la base de datos llega a crecer mucho...
  #13 (permalink)  
Antiguo 16/05/2007, 15:46
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Re: constantes en java

Hola:

Si pones static la variable es compartida y solo hay una para todas las instancias de la clase. Si no pones static, cada instancia tiene la suya propia.

Si pones final y la inicializas al declararla, ya no puedes cambiarle el valor.

Si pones final y no la inicializas al declararla, aunque sea final, puedes asignarle valor una sola vez. La segunda vez falla. Si es static final, sólo puedes asignarle valor una sola vez independientemente de cuantas instancias hagas. Si es final pero no es static, como cada instancia tiene su propia variable, cada instancia puede asignar un valor distinto, pero solo una vez. Por ejemplo, si haces

class A
{
public final int valor;
...
}

A a = new A();
A b = new A();

a.valor y b.valor pueden tener valores distintos.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #14 (permalink)  
Antiguo 16/05/2007, 22:40
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: constantes en java

Cita:
Iniciado por cris_maco Ver Mensaje
pues yo diria que son ejecuciones distintas ya que cada vez que añado un valor instancio el objeto que se encarga de calcular los valores que luego se sumaran.
Es que no quiero estar todo el dia recalculando porque si ademas la base de datos llega a crecer mucho...
Instanciar un objeto y ejecutar la JVM son cosas distintas. No acabo de entender exactamente lo que quieres hacer o cual es el problema, así que no puedo decir mucho más .

S!
  #15 (permalink)  
Antiguo 17/05/2007, 00:52
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: constantes en java

Cita:
Iniciado por cris_maco Ver Mensaje
pues yo diria que son ejecuciones distintas ya que cada vez que añado un valor instancio el objeto que se encarga de calcular los valores que luego se sumaran.
Es que no quiero estar todo el dia recalculando porque si ademas la base de datos llega a crecer mucho...
Casi.

Son objetos nuevos pero si la variable es static, es compartida. Es decir, todos los objetos instanciados usaran la misma variable, la cual, se instanciara la primera vez.

O si lo prefieres, ya que hablas de C, para una variable static, todos los objetos de la clase, usaran el mismo puntero a la misma direccion de memoria para la variable.

Si el objeto1 ha puesto la variable total (static) a 4, en la siguiente ejecucion el objeto 2 al añadirle 7, modificara la misma variable, y total pasara a valer 11. El objeto3 le restara 4 unidades y valdra 7....

Si total no fuese static el objeto1 crearia su propia variable total la cual valdria 4, objeto2 tendria su propia vairable total que valdria 7 y el objeto3 tendria su propia variable total que valdria -4.

Se parecen como un huevo a una castaña.

Saludos.

Última edición por elAntonie; 17/05/2007 a las 00:58
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:33.