(→Atributos) |
|||
Line 69: | Line 69: | ||
Um atributo declarado <code>final</code> não pode ser alterado, só podendo ser iniciado (i.e., valor definido por omissão ou pelo construtor - neste caso, apenas se não tiver sido definido por omissão). | Um atributo declarado <code>final</code> não pode ser alterado, só podendo ser iniciado (i.e., valor definido por omissão ou pelo construtor - neste caso, apenas se não tiver sido definido por omissão). | ||
− | + | <java5> | |
class A { | class A { | ||
// valor de _i não foi iniciado explicitamente | // valor de _i não foi iniciado explicitamente | ||
Line 78: | Line 78: | ||
//void f() { _i = 4; } | //void f() { _i = 4; } | ||
} | } | ||
− | + | </java5> | |
+ | <java5> | ||
class B { | class B { | ||
// _i já tem, por omissão, o valor 3 | // _i já tem, por omissão, o valor 3 | ||
Line 87: | Line 88: | ||
//void f() { _i = 4; } | //void f() { _i = 4; } | ||
} | } | ||
+ | </java5> | ||
=== Métodos === | === Métodos === |
Ver switch
.
Ver try
.
Tipo primitivo que representa um carácter de 16 bits, segundo a norma Unicode (ver também UTF-8).
Ver switch
.
Ver while
.
Tipo primitivo que representa um valor real em vírgula flutuante de 64 bits, segundo a norma IEEE 754.
Ver if
.
Ver class
.
A palavra chave final
implica que a entidade à qual é aplicada é de alguma forma imutável.
Um atributo declarado final
não pode ser alterado, só podendo ser iniciado (i.e., valor definido por omissão ou pelo construtor - neste caso, apenas se não tiver sido definido por omissão).
<java5>
class A { // valor de _i não foi iniciado explicitamente final int _i; // ok: _i fica com o valor final 3 A() { _i = 3; } // erro: não se pode alterar um atributo final //void f() { _i = 4; } }
</java5> <java5>
class B { // _i já tem, por omissão, o valor 3 final int _i = 3; // erro: não se pode alterar um atributo final //B() { _i = 3; } // erro: não se pode alterar um atributo final //void f() { _i = 4; } }
</java5>
Um método declarado final
numa classe não pode ser redefinido em nenhuma sublasse dessa classe.
class X { void f() { /* qualquer coisa */} } class Y extends X { // ok: redefinição de X.f() final void f() { /* ... */ } } class Z extends Y { // erro: f() é final em Y //void f() { /* ... */ } }
Quando aplicado a uma classe, final
impede que ela venha a ser especializada.
final class UmaClasse { /* definição da classe */ } // erro: não se pode derivar de uma classe final //class OutraClasse extends UmaClasse { /* ... */ }
As interfaces não podem ser afectadas por final
.
// ilegal //final interface UmInterface { /* definição da interface */ }
Ver try
.
Tipo primitivo que representa um valor real em vírgula flutuante de 32 bits, segundo a norma IEEE 754.
Ver interface
.
Tipo primitivo que representa um valor inteiro de 32 bits.
Tipo primitivo que representa um valor inteiro de 64 bits.
Operador.
Tipo primitivo que representa um valor inteiro de 16 bits.
Referência para o objecto "actual", i.e., para o objecto no contexto do qual se executa o código onde aparece a referência. O exemplo seguinte, embora não siga as regras de nomenclatura, ilustra o uso de this
como forma de desambiguar as variáveis no construtor.
class A { int x; A(int x) { this.x = x; } }
O seguinte exemplo mostra o uso como auto-referência: o objecto passa-se a si próprio como argumento de uma operação:
class A { void f(A a) { /* operação sobre um "a" do tipo "A" */ } void g() { f(this); // operação sobre objecto do tipo "A" (o próprio) } }
Num construtor, esta palavra reservada pode ser utilizada para chamar explicitamente outro construtor da mesma classe. Quando é utilizado desta forma, this
pode ocorrer apenas uma vez e deve aparecer como a primeira instrução do construtor.
class A { A(int i) { /* qualquer coisa */ } A(float f, int i) { this(i); // chamada ao primeiro construtor /* resto do segundo construtor */ } }
Tipo primitivo que representa a ausência de valor retorno de um método.