Anda di halaman 1dari 45

3.

Caractersticas Bsicas

Este captulo apresenta as caractersticas bsicas da linguagem, como identificadores, palavras chave, valores literais, tipos de dados e operadores.

3.1 Palavras chave e valores literais

Java possui 49 palavras chave, todas elas so escritas em minsculas:

byte - short - int - long - char - boolean - double - float - public - private protected - static - abstract - final - strictfp - transient - synchronized - native - void - class - interface - implements - extends - if - else - do - default - switch - case - break - continue - assert - const - goto - throws - throw - new - catch try - finally - return - this - package - import - instaceof - while - for - volatile super

Possui trs identificadores que so valores literais:

null, false, true

Cada uma dessas palavras sero vistas mais adiante no tutorial.

3.2 Tipos primitivos

Existem somente oito tipos primitivos em Java, todo o resto objeto. Estes tipos ficaram na linguagem pela sua velocidade de interao, e por isso no foram transformados em Objetos. Como no so objetos a sua declarao j cria a varivel em memria no necessitando de construtores.

Nesta seo os tipos Array e String no so tratados, pois no so

considerados tipos primitivos. Ambos so classes e sero tratadas no captulo sobre classes.

3.2.1 Numricos inteiros

Todos esses tipos possuem uma representao interna em complemento de dois. O valor default para esses atributos 0 e cada vez que se usar uma constante numrica no cdigo fonte ela ser um int a no ser que se coloque a constante? L? no final do nmero.

byte - Tamanho de 8 bits com sinal. Valores de - 128 a + 127. short - Tamanho de 16 bits com sinal. Valores de - 32.768 a + 32.767. int - Tamanho de 32 bits com sinal. Valores de - 2.147.483.648 a + 2.147.483.647. long - Tamanho de 64 bits com sinal. Valores de 9.223.372.036.854.775.808 a + 9.223.372.036.854.775.807.

Exemplo:

100L = > long 100 = > int 0L = > long 0 = > int

No existe os tipos unsigned, long int ou short int em Java.

3.2.2 Ponto flutuante

Os pontos flutuantes seguem a representao IEEE 754, sendo que 0.0 o valor default. No cdigo fonte, tudo o nmero com decimais ser um float a no ser que o caractere ? d ? ou ? D ? estejam no final do nmero.

float - Tamanho de 32 bits com sinal. Valores de - 1.40239846E-45 a + 3.40282347E + 38 (com nove dgitos significativos de preciso). double - Tamanho de 64 bits com sinal. Valores de 4.94065645841246544E-324 a + 1.79769313486231570E + 308 (com 18 dgitos significativos de preciso).

Exemplo:

100.0 = > float 100.00d = > double 0 = > float 0f = > float 0d = > double

3.2.3 Caractere

O caractere guarda o valor traduzido de um cdigo ASCII. Seu valor default o cdigo zero, \ 0;

char - Caractere Unicode com tamanho 16 bits sem sinal. Valores possveis 0 a 65535

O char tambm pode ser representado por um numero inteiro de 16 bits sem sinal, ou seja, pode-se atribuir uma varivel char o valor 100 ou o valor 65535, pois se est operando com os valores da tabela Unicode que representam caracteres de qualquer idioma.

3.2.4 Booleano

Tipos boleanos identificam verdadeiro ou falso e podem ser utilizados diretamente em expresses de retorno para testes como if, switch, while e for., porm no podem ser comparados com variveis ou constantes numricas como em C.

boolean - Valor indicando true ou false. Tamanho de 8 bit.

3.2.5 Valores padro

Abaixo segue uma lista com os valores padres de todos os tipos primitivos, sendo que no necessrio inicializar as variveis com esses valores, a mquina virtual cuidar desse trabalho.

* byte = 0; * short = 0; * int = 0;

* long = 0; * float = 0.0; * double = 0.0; * boolean = false; * char = ` \ u0000 '; * Object = null;

Um objeto, como veremos mais adiante, inicializado com valor null, pois ele necessita que a instncia seja criada explicitamente, o que no ocorre em tipos primitivos.

3.3 Identificadores

Os identificadores em Java iniciam com uma letra, um sublinhado ? _ ? ou um sinal de dlar " $ " e podem possuir nmeros aps o primeiro caractere da palavra. Pela premissa de ser case-sensitive existe uma diferenciao entre letras maisculas e minsculas. Identificadores vlidos so: identificador, meu_Carro, MeuCarro2, _atributo, $bola _2seg

Identificadores usados para determinar nomes de variveis, atributos de classe ou de instncia, parmetros e mtodos. 3.4 O operador de atribuio

O sinal de atribuio em Java o " = " igual ao " = " do C e ao ": = " do Delphi. Vale deixar gravado que a comparao feita com " = = " como no C. Uma atribuio feita com a seguinte sintaxe:

=;

Veja o exemplo:

public class Atribuio { public static void main (String [] args) { int x = 1; int y = 5; } }

No exemplo atribudo as variveis inteiras x e y os valores 1 e 5 respectivamente.

3.5 Literais

O valor literal um valor escrito no cdigo fonte e identificado como de um tipo primitivo.

int x = 1; // literal inteiro char u = 'a'; // literal char boolean b = true; // literal boolean double d = 002.11d; // literal double

H trs maneiras de representar literais numricos inteiros em Java:

- octal (base 8). Representado com um 0 na frente de cada valor numrico. Exemplo:

int x = 01; int x = 0931; int x = 021;

- hexadecimal (base 16). Representado com um 0x na frente de cada valor numrico. Exemplo:

int quinze = 0xF; // 15 (decimal) int vinte_e_nove = 0x1D; // 29 (decimal) int vinte_e_nove = 0x1D; // 29 (decimal) int valor = 0xBAFAFA; // 12253946 (decimal) int valor = 0XBaFaFa; / / 12253946 (decimal)

- decimal (base 10). Representado normalmente como o primeiro exemplo.

Caracteres tambm possuem representao especial. Todo o caractere se encontra entre aspas simples, porm pode-se atribuir um valor inteiro ao caractere sem precisar de uma converso explcita. Alguns exemplos so:

char a = 'A'; // letra A char b = '&'; // caractere & char c = '\u004D'; // letra M (Unicode) char d = '\n'; // Pula de linha char e = '\t'; // Tab char f = '\r'; // Retorno de carro char g = '\b'; // Backspace char h = '\f'; // FormFeed char i = '\\'; // Barra char j = '\''; // Apostrofo char k = '\"'; // Aspas duplas char l = 65; // char recebe o valor de um int char m = (char) -1; // fora do intervalo, converso explcita char n = (char) 100000; // fora do intervalo, converso explcita

3.6 Converses entre tipos primitivos

Existem duas maneiras de fazer converses de tipos:

1. Converso implcita, quando o tamanho de uma varivel maior que o tamanho da varivel ou o valor que est sendo atribudo. Exemplo:

int y = 10; nbsp; long x = y;

O tamanho de int menor que o de long, portanto perfeitamente aceitvel.

2. Converso explcita, quando o tamanho de uma varivel menor que o tamanho da varivel ou o valor que est sendo atribudo. Exemplo:

long y = 10L; nbsp; int x = (int) y;

O tamanho de long maior que o de int, portanto necessita indicar uma converso. Esta indicativa feita pelo tipo da varivel, que ir receber o valor, entre parnteses: (int). Se esta informao no for colocada, ocorreria um erro de compilao indicando tipos incompatveis. Outra forma usar as constantes de identificao de tipos para fazer uma converso explcita, como em: long y = 10L;

3.7 Operadores aritmticos

Operadores aritmticos so aqueles que efetuam operaes aritmticas em um ou mais tipos primitivos. A seguir so apresentados os operadores aritmticos unrios, que atuam sobre um nico identificador.

Op Nome

Uso

Descrio

++ Incremento var++ / ++var Retorna e adiciona / adiciona e retorna. -- Decremento var-- / --var Retorna e subtrai / subtrai e retorna.

- Negativo + Positivo

-var +var

Inverte o sinal da varivel No tem efeito.

Abaixo esto os operadores aritmticos que atuam sobre duas variveis.

Op + -

Nome Adio Subtrao

Uso Descrio x + y Soma x com y. x - y Subtrai y de x.

* Multiplicao x * y Multiplica x por y. / % Diviso Resto x / y Divide x por y. x % y Resto da diviso de x por y.

3.8 Operadores relacionais e lgicos

Os operadores relacionais e lgicos so utilizados em testes e condies de entrada em um fluxo do programa. Abaixo esto todos eles relacionados.

Op > >= < <= ==

Nome Maior que

Uso x>y x >= y x<y

Descrio x maior que y. x maior ou igual a y. x menor que y x menor ou igual a y. x igual a y.

Maior ou igual a Menor que Menor ou igual a Igual a

x <= y

x == y

!= ! && ||

Diferente de

x != y !y x && y x ||y

x diferente de y. contrrio de y. x e y. x ou y.

NO lgico (NOT) E lgico (AND) OU lgico (OR)

instanceof Verif Instncia

x instanceof X x instncia da classe X

3.9 Operadores bitwise

Os operadores bitwise so aqueles que alteram o valor das variveis em operaes lgicas diretamente no processador, tornando-as muito mais performticas. Estas operaes so geralmente chamadas de ? tratamento por bits ? pois so operaes que comparam e modificam a varivel bit por bit.

Op ~ & | ^ << >>

Nome Inverso E lgico OU lgico

Uso ~x x&y x|y

Descrio Inverso dos bits de x. AND bit a bit entre x e y. OR bit a bit entre x e y. XOR bit a bit entre x e y. Desloc. a dir os bits de x, y vezes. Desloca a direita os bits de x, y vezes. Preenche zero a esquerda de x, y vezes.

OU excl. lgico x ^ y Desloc. a esq. x << y Desloc. a dir. x >> y

>>> Desloc. a dir. x >>> y

3.10 O operador de atribuio composto

J foi apresentado o operador de atribuio " = ". Porm este operador pode funcionar em conjunto com outros operadores reduzindo o tempo de processamento de determinadas chamadas. O operador de atribuio composto junta um operador aritmtico ou de bitwise com o operador de atribuio. sempre utilizado na sintaxe var = var como no exemplo abaixo:

public class OperadorAtribuicaoComposto { public static void main (String [] args) { int x = 1; x + = 5; } }

Neste exemplo a varivel inteira x inicializada com 1 e na linha seguinte realizado uma operao composta: A soma e atribuio. Esta instruo semelhante a esta: x = x + 5;. O resultado em x ser 6. Outros exemplos so:

public class OperadorAtribuicaoComposto { public static void main (String [] args) { int x = 1; // Atribui 1 a x x += 5; // Equivalente a x = x + 5; x igual a 6 x *= 2; // Equivalente a x = x * 2; x igual a 12 x /= 2; // Equivalente a x = x / 2; X igual a 6 x -= 3; // Equivalente a x = x - 3; x igual a 3 x %= 5; // Equivalente a x = x % 5; x igual a 3 x |= 4; // Equivalente a x = x | 4; x igual a 7

x ^= 1; / / Equivalente a x = x ^ 1; x igual a 6 x &= 255; / / Equivalente a x = x & 255; x igual a 6 x <<= 2; / / Equivalente a x = x << 2; x igual a 24 x >>= 4; // Equivalente a x = x > > 3; x igual a 1

x >>>= 7; / / Equivalente a x = x > > > 7; x igual a 0 } }

3.11 Precedncia de operadores

Tabela de precedncia de operadores em ordem decrescente, ou seja, o que est mais acima, ocorre antes. Precedncia

+ + - - + - ! (cast) */% +<< >> >>> <>< = > = instanceof = =! = & ^ | && ||

?: = * = / = % = + = - = << = >> = >>> = & = | =

4 Comandos de deciso, repetio e desvio

Este captulo apresentar o extremamente necessrio para a construo de qualquer sistema em Java. Declarao de variveis, comandos de deciso, repetio e desvio de fluxo no programa. 4.1 Declarao e Inicializao de Variveis A declarao de variveis em Java pode ser feita em qualquer local do cdigo fonte desde que esteja dentro de uma classe. Quando a declarao da varivel feita globalmente, ou seja, na estrutura da classe, dita que a varivel um atributo, caso contrrio ela continua sendo chamada de varivel. O escopo ou a vida de uma varivel em Java dura de acordo com o bloco onde ela foi declarada. A varivel criada no primeiro acesso a ela e destruda aps o interpretador sair do bloco de execuo ao qual ela pertence.

Em Java a declarao de variveis feita pelo tipo e depois um identificador. A declarao muitas vezes acompanhada pela inicializao a qual acrescenta o sinal de atribuio e um valor literal ou varivel.

A declarao de uma varivel feita no formato:

Tipo identificador [= valor_inicial];

Observando o exemplo 4.1 pode-se identificar vrias maneiras de declarar

inicializar tipos primitivos e objetos. Na linha 3 existe uma declarao simples, ela est criando uma varivel byte e o valor de bt ser 0. Na linha 4 h a declarao de trs variveis do tipo short: sht1, sht2 e sht3. Todas as trs sero inicializadas com zero. Na linha 5 existe a declarao de um inteiro i e a sua inicializao atribuindo o valor 9 para a varivel. Na linha 6 h duas variveis sendo criadas: f1 e f2, ambas recebero o mesmo valor 98.76. Na ltima linha existe a declarao de uma varivel de tipo complexa String. String a classe que armazena uma cadeia de caracteres sem tamanho definido em Java. No exemplo, ela est sendo inicializada com a cadeia " TESTE ". Exemplo:

public class DeclarandoVariveis { int atributo = 9; // Declarando uma varivel global => Atributo.

public void main(String[] args) { byte bt; // Declarao simples

short sht1, sht2, sht3; // Declarao mltipla int i = 9; // Declarao e inicializao // Declarao e inicializao mltipla // Declarao e criao de um objeto String

float f1, f2 = 98.76 String str = "TESTE" } }

4.2 Instrues de Desvio

Linguagens de alto nvel implementam vrias estruturas de controle do fluxo do programa para facilitar o desenvolvimento de programas e promover um melhor estilo de programao. Os comandos de seleo e repetio so mais empricos do que os comandos tradicionais em linguagem de mquina.

Java possui duas instrues de desvio condicionais mais uma palavra reservada que no deve ser usada. Todas elas existem em vrias outras linguagens e plataformas.

4.2.1 Comando: if

O comando if executa um trecho de cdigo apenas uma vez, dependendo de sua condio. A sintaxe segue a sintaxe abaixo.

if ( <condio> ) { <comandos> } else { <comandos> }

A condio uma expresso da linguagem java e pode ser qualquer conjunto de operaes que retornem um valor booleano. Ex: (i > = 0) ou (a = = 5 & & b! = 5 | | c = = a) O " comandos 1 " e " comandos 2 " so um conjunto de um ou mais comandos da linguagem Java. No caso de ser apenas um comando o uso de {} no necessrio.

Se a condio for verdadeira o interpretador executar o " comandos 1 " caso contrrio o bloco " comandos 2 " ser executado. Exemplo:

public class ExemploIf {

public static void main(String[] args) { int i = 8; // If que dir se o valor do i igual a 1 ou igual a dois. if (i \% 2) System.out.println("Oito divisvel por dois"); else System.out.println("Oito no divisvel por dois");

// Verifica se o nome Vitor. String nome = "Vitor"; if (nome.equals("Vitor")) { System.out.println("Nome Vitor"); } else { System.out.println("Nome no Vitor"); } } }

No primeiro if do exemplo testado se o valor de i divisvel por 2, ou seja, se valor de i par. Se for divisvel, impresso o texto Oito divisvel por dois, caso contrrio impresso o texto Oito no divisvel por dois na linha de comando.

No segundo exemplo feito um teste para saber se a varivel String nome igual a Vitor. Em comparao de objetos sempre usa-se o mtodo equals. Se o valor de nome for Vitor impresso Nome Vitor, caso contrrio impresso Nome no Vitor.

4.2.2 Comando: switch

O comando switch o mesmo do C e semelhante ao case do Delphi. Permite selecionar o bloco de cdigo a ser executado baseado no teste lgico de uma expresso. O switch a forma evoluda para o if, podendo tratar mais de dois blocos de execuo.

Sintaxe:

switch ( <expresso> ) { case <valor1>:<comandos 1> [break;] case <valor2>:<comandos 2> [break;] case <valor3>:<comandos 3> [break;] case <valor4>:<comandos 4> [break;] ... default: <comandos default> }

O comando switch executa a expresso e compara o valor encontrado com os valores: , , , etc. Quando encontra a igualdade ele executa o bloco de comandos daquele valor. A execuo continuar at o final do switch ou at que ele encontre um break;. Exemplos:

public class ExemploSwitch { public static void main(String[] args) { int i = 2; // Switch que ir imprimir na tela o valor 2 switch (i) { case 1 : System.out.println("Valor de i 1"); break; case 2 : System.out.println("Valor de i 2"); break; case 3 : System.out.println("Valor de i 3"); break; default: System.out.println("Default"); }

// Switch que ir imprimir na tela o valor "Vitor" String nome = "Vitor"; switch (nome.hashcode()) { case "Vitor".hashCode() : System.out.println("Valor de nome Vitor"); break; case "Paulo".hashCode() : System.out.println("Valor de nome Paulo"); break; default: System.out.println("Default"); } } }

No necessrio utilizar as chaves ({}) para delimitar um bloco de comandos, pois o interpretador executar todos eles at encontrar um break ou o switch finalizar.

A nica limitao do switch que a deve retornar um valor numrico inteiro, qualquer um de seus quatro tipos primitivos. O switch no funciona com String, float, char e boolean por exemplo. E por este motivo que no segundo switch do exemplo utilizado o mtodo hashcode (), que retorna um cdigo inteiro nico para cada String diferente.

4.2.3 Comando: goto

H um consenso entre os desenvolvedores de software de que instrues goto devem ser usadas somente para criar estruturas de controle, de seleo ou repetio, caso elas no existam na linguagem trabalhada. E exatamente por isso que, embora a palavra goto seja uma palavra reservada do Java, ela no pode ser utilizada, o compilador Java acusar erro se encontr-la no cdigo.

Os especialistas afirmam que o goto polui o cdigo fonte e se no for utilizado adequadamente pode se tornar um problema maior do que o prprio software.

4.3 Laos

Laos controlam uma repetio de execuo de acordo com uma condio imposta. Em Java, assim como tantas outras linguagens, existem trs tipos de lao: for, while e do.. while.

4.3.1 Comando: for

O comando for cria um lao de repetio no fluxo do programa baseado em trs parmetros:

expresso inicial: Onde executado apenas uma vez, na entrada do lao. condio: executado a cada iterao do lao e determina quando o programa deve sair do mesmo. Caso a condio seja verdadeira, repete-se os do lao uma vez, caso seja falsa, o programa pula para a prxima instruo seguinte ao lao. incremento: uma operao normal, executada a cada iterao. Geralmente usada para incrementar contadores ou configurar variveis.

Sintaxe:

for (<expresso inicial>; <condio>; <incremento>) { <comandos> }

Exemplos:

public class ExemploFor { public static void main(String[] args) { for (int i=0; i<10; i++) {

System.out.println("Contador " + i); }

for (;;) { System.out.println("Lao infinito."); } } }

O primeiro for do exemplo acima ir apresentar 10 mensagens indicando o contador de 0 at 9. Quando o valor do inteiro i ser igual a 10 o interpretador java alternar o fluxo para o incio do outro for.

No segundo for do exemplo o cdigo entra num lao infinito, ou seja o programa no termina, sequer sair do lao, j que no existe condio para que tal evento ocorra.

4.3.2 Comando: while

O comando while utilizada quando no se quer que o corpo do lao seja necessariamente executado. A expresso de comparao avaliada antes que o lao seja executado, enquanto ela for verdadeira os so repetidos.

Sintaxe:

while (<condio>) { <comandos>

Exemplos:

public class ExemploWhile { public static void main(String[] args) { int i=0; while(i++<10) { System.out.println("Contador " + i); }

while(true) { System.out.println("Lao infinito."); } } }

Assim como nos exemplos com o comando for, o primeiro exemplo imprime contadores de 0 at 9 e o segundo um lao infinito, pois o resultado da condio sempre ser verdadeiro.

4.3.3 Comando: do.. while

O comando do.. while utilizada quando se quer que o corpo do lao seja executado pelo menos uma vez. A expresso de comparao avaliada depois que o lao foi executado, enquanto ela for verdadeira os so repetidos.

Sintaxe:

do { <comandos> } while (<condio>);

Exemplos:

public class ExemploDoWhile { public static void main(String[] args) { int i=0; do { System.out.println("Contador " + i); } while(++i<10)

do { System.out.println("Lao infinito."); } while(true); } }

Assim como nos exemplos anteriores, o primeiro exemplo do comando do.. while imprime contadores de 0 at 9 e o segundo um lao infinito, pois o resultado da condio sempre ser verdadeiro. Embora a diferena entre os dois comandos while sejam mnimas, cada uma utilizada em uma determinada ocasio.

4.4 Comandos: break e continue

a declarao de desvio usada para sair de um lao antes do normal. O tipo determina para onde transferido o controle. O break transfere o controle para o final de uma construo de lao (for, do, while ou switch). O lao vai encerrar independentemente de seu valor de comparao e a declarao aps o lao ser executada. Exemplo:

int i = 0; while (true) { System.out.println(i); if ( i++ >= 10 ) break; }

Este exemplo imprime os valores da varivel i de 0 at 9.

A declarao continue faz com que a execuo do programa volte imediatamente para o incio do lao, porm para a prxima interao. O

continue faz o interpretador pular para a prxima iterao e obriga-o a testar a condio. Exemplo:

for (int i = -10; i<10; i++) { if ( i == 0 ) continue; System.out.println(i); }

No exemplo, impresso os valores de - 10 at 9 pulando o nmero zero. 5. Orientao a Objetos

Java uma linguagem orientada a objetos e, com isso, no possvel desenvolver nenhum programa sem seguir tal paradigma. Um sistema orientado a objetos composto por um conjunto de classes e objetos bem definidos que interagem entre si, de modo a gerar o resultado esperado.

5.1 O que ?

O avano das tecnologias na rea de anlise, projeto, desenvolvimento e qualidade de software permite que aplicaes mais flexveis e poderosas sejam construdas. A necessidade de integrar estas aplicaes criou uma nova metodologia de anlise e desenvolvimento: a Orientao Objetos.

A Orientao Objetos modela o mundo real com classes e instncias. Cada classe a estrutura de uma varivel, ou seja, um tipo de dado. Nela, so declarados atributos e mtodos que podero ser executados ou acessados nas instncias da mesma classe. As classes possuem uma funo muito importante na modelagem orientada a objetos, elas dividem o problema,

modularizam a aplicao e baixam o nvel de acoplamento do software.

Variveis de uma classe so chamadas de instncias de classe. Por exemplo: Se existe uma classe Pessoa existe a instncia (varivel) pessoa que do tipo Pessoa. Um Objeto, ou instncia, uma entidade cujas informaes podem incluir desde suas caractersticas at suas atividades, ou seja, uma abstrao de um domnio de um problema.

Abaixo h uma srie de definies sobre a arquitetura de orientao a objetos em Java.

Pacote: Conjunto de classes e demais arquivos que possuem interesses comuns ou atuam com dependncias entre si. Fisicamente so pastas do sistema operacional. Instncia, objeto: Uma varivel do tipo de uma classe. Construtor: Responsvel por iniciar a criao e inicializao de uma instncia de classe. Mtodo: Funes referenciados aquela classe. Modificador de acesso: Descreve que outras classes podem ter acesso a classe que est se criando. Tambm usado para indicar que uma classe pode ser acessada de fora de seu pacote. Hierarquia de classes: Um grupo de classes que esto relacionadas por herana. Superclasse: a classe que estendida por uma determinada classe. Subclasse: a classe que estende determinada classe. Classe base: A classe de determinada hierarquia que uma superclasse de todas as outras classes. A classe? pai de todas?

5.2 Criando a primeira classe

Nesta apostila j foram criadas vrias classes demonstrando outras funcionalidades da linguagem. Nos exemplos anteriores todo o cdigo que continha um public class declarava uma classe. Porm, os exemplos anteriores tinham propsitos de explicar cada tpico, e portanto no faziam muito sentido. Neste exemplo, ser construdo uma classe Pessoa, que manter os dados e as aes relativas aos dados de pessoa.

public class Pessoa { String nome; Date nascimento; double dinheiroNaCarteira;

public Pessoa(String nome, Date nasc) { this.nome = nome; this.nascimento = nasc; }

public void gastar(double valor) { dinheiroNaCarteira -= valor; }

public void receber(double valor) { dinheiroNaCarteira += valor; } }

A classe pblica Pessoa acima possui trs variveis, tambm chamados de atributos de instncia: nome, nascimento, dinheiroNaCarteira. Esses atributos sero criados a cada nova instncia de Pessoa que existir no sistema. H, tambm, dois mtodos: gastar (double valor) e receber (double valor). Eles retiram e incluem dinheiro na carteira da Pessoa respectivamente.

Entre eles existe a definio de um construtor: public Pessoa (String nome, Date nasc). O construtor um mtodo sem retorno, invocado quando ocorre a criao de um Objeto. Esta classe pessoa s pode ser criada passando dois parmetros: o nome e a data de nascimento. Se este mtodo no existisse, o java criaria um construtor padro, sem parmetros, para que a classe possa ser instanciada.

Algumas classes precisam evitar ser instanciadas, para ter essa proteo cria-se um construtor privado que no recebe parmetro e tambm no possui corpo. construdo para evitar que o Java crie o construtor default.

No necessrio definio de atributos, mtodos ou construtores para que uma classe possa ser compilada. A declarao abaixo vlida, o javac compila corretamente e pode-se cri-la na aplicao, mesmo que sem nenhum mtodo, construtor ou atributo:

public class NoFazNada { }

O cdigo abaixo usa a classe Pessoa como um exemplo de aplicao Orientada a Objetos.

public class GerenciadorDePessoas {

public static void main(String args[]) { // Cria uma classe que formata datas. // capaz de formatar de String para uma // Date e de um Date para um String. SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");

// Cria um Objeto de Pessoa. Pessoa pVitor; pVitor = new Pessoa("Vitor Fernando Pamplona", formatador.parse("07/11/1983"));

// Vitor Recebeu 1000 reais // Inclui R$ 1000 na carteira da // pessoa p criada na linha anterior pVitor.receber(1000.00);

// Cria um outro objeto de pessoa, o Joo Pessoa pJoo = new Pessoa("Joo da Silva", formatador.parse("18/02/1970"));

// Joo recebeu R$ 500 e gastou R$ 100 pJoo.receber(500.00); pJoo.gastar(100.00); } }

Primeiramente criado um formatador de datas para que se possa converter uma data formatada em String em um tipo Date do Java. Este formatador uma instncia da classe SimpleDateFormat e, como qualquer outra criao de objeto, usa o comando new para criar uma instncia.

Na linha seguinte, existe a declarao da varivel pVitor que da classe Pessoa. Esta varivel ainda no est criada, portanto o valor que ali se encontra null. Aps, criado a varivel, ou melhor, a instncia da classe Pessoa, com escopo do mtodo. Esta instncia j inicializada com o nome Vitor Fernando Pamplona e a data de nascimento 07 / 11 / 1983. Na linha abaixo invocado o mtodo receber da classe Pessoa passando como parmetro o double 1000.00.

5.3 Modificadores

Em Java existem uma srie de palavras-chave que se comportam como modificadores de classes, mtodos e atributos. Alguns desses modificadores j foram usados nesta apostila como a palavra-chave public, por exemplo. Um modificador pode ser utilizado antes da palavra class, antes do retorno de um mtodo ou antes da declarao de um atributo.

Abaixo segue uma tabela com todos os modificadores de acesso do Java. A ordem de declarao dos modificadores no importa.

Palavra-chave

Em uma classe

Em um m todo

Em um atributo

public

Acesso total

Acesso total

Acesso total.

private

No aplicvel

Acesso pela classe

Acesso pela classe

protected

No aplicvel

Acesso pelo pacote

Acesso pelo pacote

default

Somente pacote

Acesso pelo pacote

Acesso pelo pacote

abstract

No instncia

Deve ser sobrescrito

No aplicvel.

final

Sem herana

No pode ser sobrescrito

CONSTANTE..

static

No aplicvel

Acesso pela classe

Acesso pela classe

native

No aplicvel

Indica cdigo nativo

No aplicvel

transient

No aplicvel

No aplicvel

Cache

synchonized

No aplicvel

Sem acesso simultneo.

No aplicvel

5.4 Mtodos

Um mtodo em Java uma sub-rotina semelhante as funes de C e Pascal. Os mtodos tm um retorno e podem conter parmetros. A Sintaxe de um mtodo a seguinte:

[modif] <retorno> <nome> ([<tipo param>],[...]) { <corpo do mtodo>

Ao declarar um mtodo possvel adicionar modificadores, vistos na seo anterior, antes de informar o tipo de retorno. O modificador esttico declara que o mtodo ter um determinado tipo de comportamento dentro do programa orientado a objetos. Na declarao de um mtodo os modificadores precedem o tipo de retorno, que precede o nome do mtodo e a lista de parmetros. O corpo do mtodo colocado entre chaves.

Buscando o exemplo da classe pessoa:

//<modif> <ret> <nome> <parametro> public void gastar(double valor) { // Corpo dinheiroNaCarteira -= valor; }

O corpo do mtodo pode conter declaraes de variveis e comandos. As variveis no ficam restritas a declarao somente antes dos comandos, como acontece em C ou em um local pr-determinado como em Pascal, ao contrrio, podem ser declaradas em qualquer lugar. O tipo de retorno de um mtodo pode ser primitivo ou de referncia, ou como no mtodo main, pode ser void, ou seja, no retorna nada.

Em Java todos os argumentos so passados por valor. No existe passagem por referncia. Se for varivel primitiva o valor da varivel passada no parmetro e pode ser alterada a vontade dentro da funo que nada sofrer a varivel externa. Com objetos o que muda que o valor passado no parmetro da funo a referncia para o objeto, ou seja, se um objeto for

alterado dentro da funo, o objeto externo tambm ser alterado, exceto nas instrues objeto = null;

5.5 Interfaces

Interfaces foram concebidas para criar um modelo de implementao aumentando o baixo acoplamento entre determinadas partes de um software. Uma interface no pode possuir atributos de instncia e nem mtodos com implementao, mas pode possuir atributos de estticos (de classe) e cabealhos de mtodos que devero ser desenvolvidos nas classes que implementaro a interface.

Muitas vezes as interfaces representam aes ou papis para as classes. Um exemplo comum de interface a Serializable que se encontra dentro do pacote java.io e muito utilizada em aplicaes corporativas. Quando uma classe implementa Serializable ela no precisa implementar nenhum mtodo definido na interface, mas com esta ao o programador indica ao java que a classe pode ser serializada, transformada em um conjunto de bits para serem armazenados ou transmitidos. A serializao de uma instncia armazena todos os seus dados e consegue criar um objeto semelhante na desserializao.

O uso de interfaces semelhante ao de classes como mostrado abaixo.

public interface Impressao { public void imprimir(); }

public class Pessoa implements Impressao { private String nome; ... public void imprimir() {

Impressora imp = new Impressora("LPT1"); imp.print("Pessoa: " + nome); ... } }

public class Documento implements Impressao { private String nmero; ... public void imprimir() { Impressora imp = new Impressora("LPT1"); imp.print("Documento: " + nmero); ... } }

No exemplo acima possvel identificar uma interface Impresso que implementada pela classe Pessoa e pela classe Documento. Essas duas classes foram obrigadas a implementar o mtodo public void imprimir () definido na interface. Se isso no acontecesse o javac, o compilador do java, no permitiria a compilao das classes.

Para implementar uma interface, usa-se a palavra-chave implements seguida do nome da interface, ou interfaces, visto que no h limite para quantidade de classes em implementao.

correto afirmar que as classes ganharam um papel, uma ao de

impresso, e esto aptas a executar todos os tens necessrios para realizar tal tarefa.

5.6 Abstract Class

Uma classe abstrata quase uma interface, com a exceo que ela pode conter implementaes. Uma classe abstrata usada para manter alguma programao nas classes ? Pai ?, porm no pode ser instanciada. Para ser utilizada como instncia, uma classe abstrata deve ser estendida por uma classe no abstrata.

public abstract class Veculo{ private String nome; private String marca; private String modelo;

// sets e gets

public abstract void andar(); }

public class Carro extends Veculo { public void andar() { acelerar(); }

private void acelerar() { ...

} }

public class Bicicleta extends Veculo { public void andar() { pedalar(); }

private void pedalar() { .... } }

Como possvel observar no exemplo acima, a classe Veculo no pode ser instanciada por ser abstrata, e ela ganhou esta caracterstica por conter mtodos abstratos, no caso o mtodo andar (). Por este motivo, foram criadas duas classes estendendo Veculo: Carro e Bicicleta. Ambas implementam a sua maneira de andar.

Para criar uma extenso de qualquer classe, usa-se a palavra-chave extends. O Java no permite a herana mltipla, como em C, portanto no possvel estender de duas ou mais classes. A soluo deste problema trabalhar com interfaces.

5.7 this e super

Estas duas palavras-chave da linguagem so aplicadas a mtodos no

estticos, ou seja, de instncia. A this utilizada para referenciar variveis ou mtodos da instncia atual e o super utilizada para associar a mtodos da classe ? pai ?. Por exemplo:

public class Pai { public int lanar(int numero) { return 6 \% numero; } }

public class Filho extends Pai { private int numero; ... public int lanar(int numero) { if (numero == 0) { return this.numero; // retorna o atributo da classe } super.lanar(numero); // Chave o lanar da classe pai. } }

A classe Pai possui um mtodo lanar retornando um inteiro. A classe filho, que estende de Pai foi criada para tratar uma diviso por zero que poder ocorrer na classe Pai. Portanto, se for zero, retorna um nmero predefinido como atributo na classe Filho, caso contrrio retorna o resultado do clculo da classe Pai. Este um excelente exemplo de polimorfismo e sobrescrita de mtodos que veremos a seguir.

O Java associa automaticamente a todas as variveis e mtodos referenciados com a palavra this. Por isso, na maioria dos casos torna-se redundante o uso em todas as variveis da palavra this. Existem casos em se faz necessrio o uso da palavra this. Por exemplo, voc pode necessitar chamar apenas uma parte do mtodo passando uma instncia do argumento do objeto. (Chamar um classe de forma localizada);

5.8 Sobrescrita e Sobrecarga

O Java permite que voc tenha mtodos com o mesmo nome, mas com assinaturas diferentes, isto chama-se sobrecarga. O interpretador determinar qual mtodo deve ser invocado pelo tipo de parmetro passado. Os trecho abaixo vlido para uma compilao Java.

... public void print( int i ) { ... } public void print( float f ) { ... } public void print( String s) { ... } ...

Quando voc escreve o cdigo para chamar um desses mtodos, a chamada dever coincidir com tipos de dados da lista de parmetros de algum dos mtodos.

Diferente da sobrecarga, a sobrescrita acontece quando um mtodo existe em uma classe ? pai ? e reescrito na classe ? filha ? para alterar o comportamento. A assinatura do mtodo deve ser igual na classe ? pai ? e na classe ? filha ?. Como um exemplo abaixo est o cdigo desenvolvido na seo this e super.

public class Pai { public int lanar(int numero) { return 6 \% numero; } }

public class Filho extends Pai { public int lanar(int numero) { if (numero == 0) { return this.numero; // retorna o atributo da classe } super.lanar(numero); // Chama o lanar da classe pai. } }

O mtodo public int lanar (int numero) existe na classe filha e na pai, o primeiro a ser invocado o Filho, e, via a palavra chave super, o interpretador chamar o mtodo pai. Caso no houver o comando super.lanar (numero); o mtodo pai no seria invocado.

5.9 Cast ou converso de Objetos

O cast ou a converso de objetos em java realizada de duas maneiras, de acordo com a converso de tipos primitivos: implcito e explcito. Primeiramente, toda a classe ? filha ? pode ser associada a uma declarao de class ou interface ? pai ?. Esta a forma implcita, pois no necessita de nenhum recurso para ser efetuado, como no exemplo abaixo:

... Pai objeto = new Filho(); ...

No exemplo, o objeto filho declarado como uma instncia de Pai. O inverso deste caso ocorre quando tem-se um objeto ? pai ? e sabe-se que ele uma instncia de determinada classe ? filho ?. Esta forma a explcita, pois necessrio informar ao compilador, qual a classe que deseja-se fazer o cast.

... Pai objeto = new Filho(); ... Filho objFilho = (Filho)objeto; ...

No exemplo, o objeto declarado como sendo instncia de Pai, mas criado uma instncia de Filho. Na linha seguinte, associado a uma varivel declarada como Filho o valor de objeto, que foi declarado como Pai mas possvel saber que ele um Filho.

5.9.1 Operador instanceof

O operador instanceof utilizado para casts explcitos que no se tem conhecimento da classe real do objeto. Por exemplo:

... public void write(Collection c) { if (c instanceof List) write((List) c); else write((Set) c); } ...

No exemplo, a instncia de Collection testada para verificar se um List ou um Set. De acordo com o valor dela, chamada uma funo write usando sobrecarga de mtodos. 6 Tratamento de Excees

As excees em Java so classes que herdam de java.lang.Throwable. Basicamente existem trs tipos de excees que so herdadas de Throwable:

Error: Exceo grave que normalmente no pode ser tratado, como falhas fsicas e condies anormais de funcionamento. Exception: Excees genricas que devem ser tratadas utilizando declaraes throws ou criar o tratamento para a exceo com try catch. RuntimeException: So excees que podem ser lanadas durante a execuo da JVM. Podem ser tratadas, porm no precisam ser tratadas com throws ou com try catch

Em Java pode-se escolher onde se quer tratar a exceo. Se for para tratar no mesmo mtodo que ela ocorreu, usa-se a instruo:

try { <comandos> } catch (<Exceo>) { <comandos> } catch (<Outra Exceo>) { <comandos> } finally { <comandos> }

A instruo try, como seu nome j fala, tenta executar um bloco de comandos. Ao ocorrer qualquer erro a JVM passar o controle para um dos catch, o que mais se apropriar para a exceo lanada.

Se a JVM no encontrar um catch apropriado e se houver uma clusula finally ela executada, se no houver um finally o Java repassa a exceo para o mtodo que chamou este, e assim continua at que a exceo seja simplesmente lanada na tela para o usurio.

6.1 Instruo throws

As classes que herdam de Exception precisam ser mapeadas como possibilidade de erro no cdigo Java. Quem controla essa obrigatoriedade o

compilador. Por exemplo, a classe java.sql.SQLException utilizada para tratamento nas excees de SQL quanto conecta-se a um banco de dados. Esta classe precisa ser obrigatoriamente testada, caso contrrio o programa no compila.

Para trat-la pode-se usar a instruo try no mesmo mtodo, porm, as vezes, necessrio que essa execuo seja tratada no mtodo que chamou este. Neste caso, coloca-se a instruo throws na assinatura do mtodo afirmando para o compilador que os mtodos que chamarem este devem tratar SQLException obrigatoriamente.

.... public void salvaObjeto(Cliente c) { try { abreTransao(); incluiNoBanco(c); // throws SQLException commitTransao(); } catch (SQLException e) { System.out.println("Erro ao salvar um cliente. " + e.getMessage()); } }

public void incluiNoBanco(Cliente c) throws SQLException { ... banco.execute("INSERT INTO CLIENTE (....) values (....)"); ... }

No exemplo, o compilador obriga que a funo salvaObjeto trate a exceo SQLException.

6.2 Lanando uma exceo

Para lanar uma exceo usa-se a instruo throw, diferente de throws visto na seo anterior. No exemplo abaixo o parmetro nome da funo setNome necessita estar preenchido e ser diferente de. Caso isso no acontea lanada uma exceo da classe IllegalArgumentException. Como a java.lang.IllegalArgumentException herda de RunTimeException ela no precisa ser tratada, mas se ocorrer aparecer o erro para o usurio.

public void setNome(String nome) { if (nome == null || nome.equals("")) { throw new IllegalArgumentException("Nome deve ser preenchido"). } this.nome = nome; }

isso a. Espero que tenham gostado do tutorial, pois deu um trabalho para escrever isso tudo! hehe. Se quiser continuar a aprender sobre java, leia os tutoriais para certificao de SCJP do Kuesley nos links abaixo: Tutoriais para Certificao Java

Anda mungkin juga menyukai