Switch com atributo final

9 respostas
P

Salve pessoal,

seguinte, alguem poderia me explicar o porque do seguinte codigo nao funcionar assim:
final int a =6;
		final int b;
		b =2;
		int x = 0;
		switch(x){
		
		case a:
		case b:
		}
e qnd eu mudo para:
final int a =6;
		[b]final int b =2;[/b]
		int x = 0;
		switch(x){
		
		case a:
		case b:
		}
ele funciona perfeitamente...

nao consegui entender o motivo pelo qual o conteudo do atributo tenha q ser definido no momento de sua criacao...

[]

9 Respostas

danielbussade

Olá o que acontece eh o seguinte o atributo final, quando usado com variável é pra definir uma constante. Ou seja uma variável somente de leitura, não pode receber nenhum valor após ser criado, por isso que tem que ser definido o valor na criação.

Deu pra entender??

Att

P

q papo estranho esse seu heim, “deu pra entender?”…rs…dô nada não…heheh…

até onde eu sei, para ser uma constante é necessario definir um atributo como STATIC e FINAL…e nada me impede de definir o valor de um atributo FINAL dps de ter sido criado…caso contrario daria erro na hora de compilar…

faz sentido o q vc falou, mas será q é SÓ isso?!

danielbussade

É o deu pra entender pegou mal mesmo, hauauh

Kra realmente, eu achava que depois de marcada como final, eu não poderia atribuir valor a ela, mas testei aqui e funciona normalmente.
Outr coisa interessante é que dentro do método main eu não posso declarar algo do tipo

public static final int=10;

Resumindo, fui tentar te responde e me confundi ainda mais, huauha, vou deixar o tópico para outra pessoa esclarecer.

Valeu

P

junte-se aos bons…hehehe…brincadeira…

esse exemplo eu tirei do livro da K&B…e não consegui compreender de forma clara…vamos aguardar alguém que saiba

=)

danielbussade

Olá aindei pesquisando e descobri o seguinte:

Acho que o java herdou isto do c++:

“O switch por especificação , compara um valor em relação a várias constantes”.

Por isso eu nao consigo usar:

int x=10;
int a=a;
int b=2;
switch(x) {
 case a:
 case b:

Mas quando coloco o modifcador final, ou transforma variavel em uma constante! E naquele seu primeiro caso:

final int x;
x=2;

O x não é considerado “constante”, porque ele nao foi inicializado na criação, podendo sofrer alteração de valor,
agora experimente fazer o seguinte:

final int x=10;
x=5;

Isto não compila, porque o x agora é uma constante é pode ser usado no switch!

Att

P

isso nao compila pq vc nao pode alterar o valor de um atributo FINAL e ja com valor…neh?!

LPJava

pardal_nb:
danielbussade:

O x não é considerado “constante”, porque ele nao foi inicializado na criação, podendo sofrer alteração de valor,
agora experimente fazer o seguinte:

final int x=10;
x=5;

Isto não compila, porque o x agora é uma constante é pode ser usado no switch!

Att

isso nao compila pq vc nao pode alterar o valor de um atributo FINAL e ja com valor…neh?!

Sim, apos ter dado o valor ja era… nao pode ser mais alterado.

danielbussade

[/quote]
isso nao compila pq vc nao pode alterar o valor de um atributo FINAL e ja com valor…neh?!

[quote]

Exatamente!!!

Raff

danielbussade:
É o deu pra entender pegou mal mesmo, hauauh

Kra realmente, eu achava que depois de marcada como final, eu não poderia atribuir valor a ela, mas testei aqui e funciona normalmente.
Outr coisa interessante é que dentro do método main eu não posso declarar algo do tipo

public static final int=10;

Resumindo, fui tentar te responde e me confundi ainda mais, huauha, vou deixar o tópico para outra pessoa esclarecer.

Valeu

Amigo isso acontece pelo seguinte motivo de uma variavel local, não se dever usar nenhum tipo de modificador de acesso… o único modificador que se poder usar dentro de uma metodo é o [color=red]final[/color]

Criado 28 de novembro de 2007
Ultima resposta 10 de dez. de 2007
Respostas 9
Participantes 4