Java Basico Modulo 02
Java Basico Modulo 02
www.t2ti.com
1
O Curso Java Starter foi projetado com o objetivo de ajudar quelas pessoas que tm uma base de lgica de programao e desejam entrar no mercado de trabalho sabendo Java, A estrutura do curso formada por mdulos em PDF e por mini-cursos em vdeo. O aluno deve baixar esse material e estud-lo. Deve realizar os exerccios propostos. Todas as dvidas devem ser enviadas para a lista de discusso que est disponvel para inscrio na pgina do Curso Java Starter no site www.t2ti.com. As dvidas sero respondidas pelos instrutores Albert Eije, Cludio de Barros e Miguel Kojiio, alm dos demais participantes da lista. Nosso objetivo que aps o estudo do Curso Java Starter o aluno no tenha dificuldades para acompanhar um curso avanado onde poder aprender a desenvolver aplicativos para Web, utilizando tecnologias como Servlets e JSP e frameworks como Struts e JSF, alm do desenvolvimento para dispositivos mveis. Albert Eije trabalha com informtica desde 1993. Durante esse perodo j trabalhou com vrias linguagens de programao: Clipper, PHP, Delphi, C, Java, etc. Atualmente mantm o site www.alberteije.com. Cludio de Barros Tecnlogo em Processamento de Dados. Miguel Kojiio bacharel em Sistemas de Informao, profissional certificado Java (SCJP 1.5). O curso Java Starter surgiu da idia dos trs amigos que trabalham juntos em uma instituio financeira de grande porte.
www.t2ti.com
2
Mdulo
02
Introduo
seus projetos Java.
Se voc est achando essa parte do curso muito terica, no se preocupe com isso. Voc vai usar quase tudo que est sendo visto aqui quando for criar uma aplicao Java, seja ela desktop, para web ou mobile. Assista aos mini-cursos NetBeans e Eclipe para observar como instalar e utilizar essas IDEs. Voc pode escolher qualquer umas das duas para desenvolver os
Tipos de Dados
Observe a tabela a seguir, sobre os tipos de dados. Esses tipos so conhecidos como Tipos de Dados Primitivos. Como podemos observar a linguagem Java oferece diversos tipos de dados com os quais podemos trabalhar. H basicamente duas categorias em que se encaixam os tipos de dados: tipos primitivos e tipos de referncias. Os tipos primitivos correspondem a dados mais simples ou escalares, enquanto os tipos de referncias consistem em arrays, classes e interfaces. Estes sero vistos nos mdulos subseqentes. Vamos a uma descrio curta sobre cada um dos tipos:
Tipo
boolean char byte short
Descrio
Pode ser contido em 1 bit, porm o seu tamanho no precisamente definido. Assume os valores true ou false. Caractere em notao Unicode de 16 bits. Serve para armazenar dados alfanumricos. Tambm pode ser usado como um dado inteiro com valores na faixa entre 0 e 65535. Inteiro de 8 bits em notao de complemento de dois. Pode assumir valores entre -27=-128 e 27-1=127. Inteiro de 16 bits em notao de complemento de dois. Os valores possveis
www.t2ti.com
3
int long
float
double
www.t2ti.com
4
www.t2ti.com
5
www.t2ti.com
6
/* Abaixo simplesmente inserimos o valor do int em um long que o dobro de um int. Ou seja, sem problemas! */ l = i; System.out.println("valor de l = "+l); System.out.println("-----------------------------"); /* Sada da impresso: valor de l = 1000 ----------------------------*/ /* Chegamos aos nmeros com ponto flutuante (casas decimais). */ System.out.println("============================="); System.out.println("ponto flutuante"); System.out.println("============================="); d = 125.32; System.out.println("valor de d = " + d); d = 125.32d; System.out.println("valor de d = " + d); d = 125.32f; System.out.println("valor de d = " + d); /* no primeiro caso atribuimos 125.32 variavel d. sem problemas. funciona legal, como podemos ver na Sada da impresso. Logo depois atribuimos 125.32d. Mas pra que serve esse "d" depois do valor? Indica que estou afirmando para o Java que a constante (125.32) um double. Os dois casos acima so idnticos. Como assim? Para o Java, o tipo padro de um literal com ponto flutuante double. Portanto, no precisa colocar o "d" depois do literal se quiser que ela seja double. literal --> 125.32 Mas o terceiro caso interessante. Atribuimos varivel d o seguinte valor: 125.32f. Dessa vez estamos inserindo um float num double. problema nenhum, pois o float 32 bit e o double 64 bit. Mas, observe a Sada da impresso. Por que o nmero depois da casa decimal ficou to quebrado? Investigue e comente na lista. Sada da impresso: ============================= ponto flutuante
www.t2ti.com
7
www.t2ti.com
8
www.t2ti.com
9
Pelo que podemos observar no programa anterior, as converses em Java ocorrem da seguinte maneira, sem perda de informao:
Um byte pode ser convertido em um short, int, long, float ou double Um short pode ser convertido em um int, long, float ou double Um char pode ser convertido em um int, long, float ou double Um int pode ser convertido em um long, float ou double Um long pode ser convertido em um float ou double Um float pode ser convertido em um double
www.t2ti.com
10
J as converses explcitas, o casting, permitido em todos os tipos (exceto o boolean), mas o programador deve estar ciente que poder haver perda de bits.
Operadores
Os operadores em Java so muito parecidos com os da linguagem C. No entanto, existe alguns operadores novos. Analise cuidadosamente a tabela abaixo e faa diversos testes com esses operadores para se acostumar com eles. Durante o desenvolvimento de seus sistemas voc utilizar, e muito, a maioria desses operadores. Grupo = operadores organizados em grupos; Operador = cada um dos operadores; Precedncia = ordem de precedncia dos operadores; A = associatividade do operador (esquerda ou direita); Operando = operandos do operador; Descrio = descrio da operao. Alguns operadores relacionados abaixo no sero comentados agora porque so utilizados com objetos ou tipos referncias, assunto que ser estudado mais a frente. Eles esto com a cor da linha diferente. Os demais j podem ser implementados nos exerccios deste mdulo. importante frisar que voc deve praticar bastante o uso desses operadores. Crie uma classe com um mtodo Main, similar a que fizemos no programa anterior e implemente diversas situaes onde voc possa analisar o uso de cada um dos
www.t2ti.com
11
Grupo
Delimitador Delimitador
Operador
. [] (argumentos)
Precedncia A Operando
1 E objeto,membro vetor mtodo, lista de argumentos varivel 2 D varivel varivel inteiro booleana 3 D classe, lista de argumentos tipo, qualquer coero 4 5 6 E E E nmero, nmero nmero, nmero String, qualquer inteiro, inteiro inteiro, inteiro inteiro, inteiro 7 E nmero, nmero nmero, nmero referncia, tipo
Descrio
acesso a um membro de um objeto ou classe. acesso ao elemento de um vetor acesso a elemento do vetor ps-incremento, psdecremento pr-incremento, prdecremento mais e menos unrio complemento de 1 (binrio) Negao cujo resultado lgico (true/false) criao de objeto converso de tipo multiplicao, diviso e mdulo (resto) adio e subtrao concatenao desl. a esquerda deslocamento a direita com sinal deslocamento a direita com zeros menor que, menor ou igual a maior que, maior ou igual a verificao de tipo
aritmtico aritmtico aritmtico binrio binrio classe converso aritmtico aritmtico String binrio binrio binrio condicional condicional condicional
++ e -++ e -+e~ ! new (tipo) */% ++ += << >> >>> < <= > >= instanceof
www.t2ti.com
12
Grupo
lgico binrio lgico lgico lgico condicional atribuio
Operador
^ | | && || ?: = *= /= %= += -= <<= >>= >>>= &= ^= |=
Precedncia
A Operando
Descrio
XOR (OU exclusivo) booleano OU sobre bits OU booleano E condicional OU condicional operador ternrio, condicional atribuio com operao
Em se tratando de precedncia bom lembrar que os parnteses podem ser usados para modific-la. 2 + 6 * 5 = 32 (2 + 6) * 5 = 40
Controle de Fluxo
O controle de fluxo efetuado atravs do uso de condicionais, que so
www.t2ti.com
13
if-else
Sintaxe:
if (expresso booleana) instruo_simples; if (expresso booleana) { instrues } if (expresso booleana) { instrues } else if (expresso booleana) { instrues } else { instrues }
Quando existe apenas uma instruo aps o if no precisamos abrir um bloco com as chaves. Se existirem mais instrues a abertura do bloco necessria. Se houver mais de uma condio usa-se o else como podemos observar na segunda coluna acima. Veja o exemplo abaixo e comente o mesmo na lista de discusso.
if ( ano < 0) { System.out.println("No um ano!"); } else if ( (ano%4==0 && ano%100!=0) || (ano%400==0) ) { System.out.println(" bissexto!"); } else { System.out.println("No bissexto!"); }
while e do-while
Sintaxe:
while (expreso booleana) { instrues; } do { instrues; } while (expreso booleana );
No caso do while as instrues sero executadas enquanto a expresso booleana for verdadeira. O do-while executa a instruo pelo menos uma vez e continua executando enquanto a expresso booleana for verdadeira. Observe os exemplos seguintes.
www.t2ti.com
14
for
Sintaxe:
for ( inicializao; expresses booleanas; passo da repetio ) instruo_simples; for ( inicializao; expresses booleanas; passo da repetio ) { instrues; }
O for pode conter apenas uma instruo no seu corpo. Neste caso no necessrio abrir um bloco. Isso assim porque o for j implementa alguns comandos na sua assinatura, ou seja, no seu cabealho, como a inicializao da varivel e o passo da repetio, ou seja, o incremento/decremento da varivel. Veja os exemplos:
//esse t bem fcil. for ( int x = 0; x < 10; x++ ) { System.out.println ("item " + x); } //esse j no to simples s de olhar. for ( int x = 0, int y = 25; x < 10 && (y % 2 == 0); x++, y = y - 1 ) { System.out.println (x + y); } //tambm podemos fazer um lao infinito com o for for ( ; ; ) { if (obj.z == 0) { break; } }
www.t2ti.com
15
break e continue
Voc deve ter observado que quando fizemos os laos infinitos com o while e com o for utilizamos um comando break. Para que ele serve? Este comando serve para quebrar o lao, ou seja, ele far com que o lao seja interrompido. O comando continue tambm influi dentro de um lao. Mas ele no vai quebrar o lao. Ele interrompe aquela iterao do lao e reinicia o bloco com a prxima iterao.
E se tivermos com um lao dentro de outro e quisermos quebrar o lao mais externo? O break ou continue agem no lao mais interno. Existe uma maneira: rotular nossos laos. Observe a imagem a seguir:
www.t2ti.com
16
switch (case)
Sintaxe:
switch(seletor_inteiro) { case valor_inteiro_1 : instrues; break; case valor_inteiro_2 : instrues; break; ... default: instrues; }
switch(letra) { case 'A' : System.out.println("A"); break; case 'B' : System.out.println("B"); break; ... default: System.out.println("?"); }
Palavras Reservadas
Toda linguagem possui palavras reservadas e isso no seria diferente em Java. Uma verso mais recente do Java pode ter mais palavras reservadas que uma anterior. A seguir voc pode ver uma imagem com boa parte das palavras reservadas em Java. Pesquise e descubra quais palavras reservadas no esto na lista abaixo. Comente na lista.
www.t2ti.com
17
Tente utilizar algumas dessas palavras como nome de variveis e veja como o compilador Java se comporta. Voc deve ter percebido que no utilizamos um tipo String neste mdulo. O Java possui um tipo String, no entanto, String no Java no um tipo primitivo. Falaremos sobre String em um mdulo posterior.
Entrada de Dados
Como eu fao para ler algo que o usurio digita no prompt? Observe o programa abaixo:
//importe a classe Scanner para utilizar a leitura pelo teclado //Similar ao #include do C import java.util.Scanner; public class Leitura { public static void main(String[] args) { // crie a varivel de leitura dos dados Scanner s = new Scanner(System.in); // use os mtodos de leitura especficos do tipo desejado System.out.print("digite uma linha: "); String linha = s.nextLine(); // le a linha System.out.print("digite um numero: "); int i = s.nextInt(); // le um inteiro System.out.print("digite um numero: "); double d = s.nextDouble(); // le um ponto-flutuante } }
Com o estudo do programa acima j d para voc solicitar que o usurio digite alguma coisa e utilizar o que o mesmo est digitando.
www.t2ti.com
18
Exerccios
Aprenda com quem tambm est aprendendo, veja e compartilhe as suas respostas no nosso Frum: Exerccios Mdulo 02 Tipos Primitivos, Operadores e Controle de Fluxo 01 - Escreva um programa que imprima o resultado das expresses abaixo: 321+2+1+3 2x34x5 2+63/7x9 3 % 4 8 02 - Escreva um programa que declare, inicialize e imprima as seguintes variveis: Inteiro i de 32 bits com valor 1 Inteiro j de 64 bits com valor 2 Ponto-flutuante p de 32 bits com valor 20.0 Ponto-flutuante q de 64 bits com valor 30.0 Boolean b com valor verdadeiro Caracter c com valor k 03 - Implemente um programa que recebe um nmero de 1 a 7 e imprime o dia da semana correspondente. 04 - Altere o programa do exerccio anterior para ficar recebendo o nmero dentro de um lao enquanto o nmero for diferente de 0 (zero). 05 - Implemente um programa que recebe repetidamente um nmero de 1 a 12, enquanto esse nmero for diferente de 0 (zero), e imprime o ms correspondente. Quando o nmero estiver fora do intervalo permitido, a mensagem ms invlido dever ser exibida. 06 - Escreva um lao while que execute 20 vezes, imprimindo o valor da varivel x que inicialmente est com valor 10. Converta este lao para um do-while. 07 - Escreva um programa que imprima na tela a soma dos nmeros mpares entre 1 e 30 e a multiplicao dos nmeros pares entre 1 e 30. 08 - Escreva um programa que percorra dois laos de 0 a 10, um interno ao outro, imprimindo os contadores, e quando estes forem iguais, o programa deve passar prxima interao do lao mais externo, caso contrrio, deve imprimir os valores dos contadores dos dois laos. 09 - Desenvolva um programa que solicita ao usurio um nmero inteiro de no mximo 4 dgitos. Inverta esse nmero. 10 Desenvolva um programa que dado um nmero inteiro o programa informe se o mesmo um nmero primo.
www.t2ti.com
19
www.t2ti.com
20
www.t2ti.com
21