Uso da palavra reservada final

Java

09/04/2009

Olá amigos, sou iniciante em java e estou com uma dúvida,gostária de saber para que server a palavra reservada "final", e quando usala. EX: public static final int[b] Obrigado. :roll: [/b]
Tiago Martins

Tiago Martins

Curtidas 1

Melhor post

Daniel Martins

Daniel Martins

09/04/2009

Depende de onde a palavra final é utilizada. Por exemplo, se for utilizada numa classe, isso indica que ela não poderá ser estendida:
public final class MyClass {}

// Isso não é permitido
public class MyOtherClass extends MyClass {}
Algo semelhante acontece se utilizamos a palavra final em um método, indicando que o método não poderá ser sobrescrito:
public class MyClass {
    public final void foo() {}
}

public class MyOtherClass extends MyClass {
    public void foo() {} // Não é permitido sobrescrever o método
}
Se a palavra for usada em uma variável, isso indica que tal variável na verdade será uma constante, pois não será permitido que se modifique o valor da mesma uma vez que um valor seja atribuído:
public class MyClass {

    public void foo() {
        final int teste = 0;
        teste++; // Não é permitido
    }
}

// Ou...

public class MyClass {

    private final int teste;

    public MyClass() {
        teste = 10; // Ok, pois inicializamos o valor no construtor.
    }

    public void foo() {
        teste++; // Não é permitido...
    }
}

// Ou...

public class MyClass {

    private final int teste = 10;

    public MyClass() {
        teste = 10; // Não é permitido...
    }

    public void foo() {
        teste++; // Não é permitido...
    }
}
Existem outros usos da palavra-chafe final que não irei explicar por se tratar de assuntos mais avançados. Mas é isso aí... para ficar mais fácil de entender, eu recomendo que você compre um livro sobre Java Básico, onde essas e outras questões são abordadas em detalhes. Procure aqui no fórum sobre tais livros. []s!
GOSTEI 2

Mais Respostas

Gabriel Millian

Gabriel Millian

09/04/2009

Quando usada na definição de uma variável, significa que a variável não pode assumir outro valor, tornando-se uma constante. http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.12.4 quando usada na definição de um método, significa que o método não poderá ser sobrescrito. http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.3.3 quando usada na definição de uma classe, significa que a classe não vai admitir herança. http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.1.1.2
GOSTEI 1
Tiago Martins

Tiago Martins

09/04/2009

Brigadão irmão, ficou clarissimo. :?
GOSTEI 0
Camilo Lopes

Camilo Lopes

09/04/2009

[b]final[/b] que dizer imutavel se vc declarar uma class como final ela nao pode ser extends, se vc declarar um metodo como final ele nao pode ser subcrito, se vc declarar uma variavel como final o seu valor nao pode ser alterado.. percebe o final faz? proteção.... apenas.. usar final quando tiver certeza que nao vai existir algo mais especifico para sua class ou metodo... a class String ela é final.. por isso que falamos Strings sao imutaveis..
GOSTEI 0
Camilo Lopes

Camilo Lopes

09/04/2009

Ups, näo é täo fácil assim [quote="camilolopes"]... a class String ela é final.. por isso que falamos Strings sao imutaveis..
A String é imutável pelo fato de näo ter como mudar o seu conteúdo, mas näo por causa da classe ser final! Exemplo:
public final class Letras {

    private final char[] value;
    
    public Letras(String str) {
        value = str.toCharArray();
    }
    
    public void toUpperCase() {
        for (int i = 0; i < value.length; i++) {
            value[i] = Character.toUpperCase(value[i]);
        }
    }
    
    @Override
    public String toString() {
        return new String(value);
    }
}
se se remover o metodo toUpperCase, Letras seria imutável. []]]
GOSTEI 0
POSTAR