Operadores Lógicos e Métodos Final

 

Como eu tenho em mente que todos que lêem este artigo não tem conhecimento profundo em Java então trato como se todos tivessem o mesmo conhecimento que eu tinha na hora que fiz a minha primeira certificação. O que vamos ver são os operadores lógicos em Java que são os &, |, &&, ||.

 

Os dois primeiros são conhecidos como operadores de bit a bit, podem ser usados em expressões booleanas. Eles são conhecidos como operadores de curto-circuito ou também de operadores de abreviação.

·         && - E de abreviação;

·         || - OU de abreviação;

 

O operador && é semelhante ao operador &, exceto por ele avaliar somente valores booleanos e também não podem ser usados como operador bit a bit. Temos que lembrarmos que para uma operação ser verdadeira os dois operandos também precisam ser.

 

if ((3>4) && (3 < 5)) {}

 

O recurso é muito importante, pois ele não perde seu tempo em avaliações inúteis. Isto é, no exemplo acima o operando avalia o primeiro lado esquerdo, caso o seu resultado seja falso ele não perde tempo em verificar o segundo operando.

 

O operador || segue o mesmo exemplo do operador && sabendo nós que ele avalia o OU e não o E. Fique bem atento e não esqueça os operadores de abreviação somente funcionam em BOOLEANOS. O exame pode tentar passar para vocês uma comparação de inteiros do tipo, if (6 && 3) {} onde parece que estamos tentando usar um operador bit a bit mas o código nem mesmo será compilado.

 

Operadores Lógicos que não são de Abreviação

Os operadores lógicos de bit a bit & e | também podem ser utilizados em expressões. Então vejamos que mesmo que uma expressão como a citada lá em cima a primeira for falsa (lado esquerdo) ele executará o teste na segunda expressão (lado direito). Então podemos dizer que os operadores | e & também podem ser utilizados como operadores lógicos, mas raramente são empregados em operações lógicas por sua ineficiência.

 

Vamos ver o seguinte:

(5 & 16) è Resultado é: 5;

(1 | 34) è Resultado é: 34;

 

Métodos Finais

A palavra reservada final impede que o método seja sobreposto em uma subclasse isso é, ele pode ser herdado porem não pode ser sobrescrito. O que podemos dizer é que quando criamos um método uma classe ou até mesmo variáveis do tipo final não podemos sobrescrevê-las. O método serve para que quando uma subclasse a chame da mesma maneira que foi criada, sem que haja mudanças em seu comportamento. Já quando isso acontece com uma classe ela não pode ser herdada, isso quer dizer que eu não posso usá-la como uma subclasse, ele já é a classe final e está no seu auge do perfeccionismo. Já uma variável ela não pode mudar seu valor quando recebe seu valor inicial, por exemplo, final int a = 5; até o final do programa ou da execução do seu bloco a variável a sempre será 5, é importante saber que seu valor não muda.

 

Muito Importante

 

final int j;

 

Quando eu crio essa variável não significa que ela tem seu valor 0; na verdade se ela é uma variável ela obrigatoriamente tem que ser inicializada senão eu não posso usá-la, quando ela recebe seu valor, por exemplo:

 

j = 10;

 

A partir daí ela não pode mais mudar, agora ela é sempre 10 até o final de sua vida no programa ou no escopo. Agora o que mais da dor de cabeça para os candidatos a Sun Programmer é os arrays, não por que ele é difícil porque ele não é, e sim como o Java trata os arrays. Para o Java array é uma variável de referencia, um objeto criado para que se possa trabalhar então vamos entender como ele trabalha para que possamos entender o final no array.

 

int[] a = {10,15,20,25};

 

Olhando o código acima temos que entender como funciona as variáveis de referencia no Java, pois são as variáveis mais importantes, são elas que trabalham com objetos. Qual a diferença entre o código acima e o código que eu vou colocar agora?

 

String a2 = “Angelo”;

 

Olhamos a variável a2 e dizemos que seu valor é “Angelo”; e a variável é do tipo string certo? Errado!! A variável é do tipo reference. O que instancia a variável a um objeto criado. Se formos olhar bem no Java veremos que o valor da variável s2 não é “Angelo”, e sim um valor de referencia que a JVM cria para denotar que esta variável esta ligada a um objeto.

 

avfolmfig01.jpg 

 

Entendendo como funciona. A variável a2 cria um valor que eu chamei de 0x1 (Hipotético) para se referenciar a um objeto que no desenho é o peixe, então na verdade seu valor para a JVM não é “Angelo” e sim o valor 0x1 toda a vez que essa variável for chamada ele olha seu valor e sabe qual objeto essa referencia significa. Mas por que eu tenho que entender isso?

 

Bom como eu falai para vocês os arrays também são reference e como isso seus valores não podem ser mudados se ela foi colocado como final então se eu tentar colocar o seguinte código será que ele funciona?

 

final int[] a = {15,20,25,30};

a[0] = 10;

 

Será que funciona? Sim funciona... Por quê? Ela é final e já recebeu seu valor, sim mas quem ta dizendo que eu estou mudando o valor do array? Eu estou mudando o valor da sua referencia. O a ainda está em 0x1, e ele criou várias referencias para a casa 0,1,2 e 3 e essas referencias não foram alteradas e sim os objetos. Lembre-se o que não pode ser alterado é o valor, e o 0x1 não foi alterado. Dica que cai muita gente nas certificações. Um abraço e até a próxima.