curso java

Upload: natanael-paes

Post on 22-Jul-2015

113 views

Category:

Documents


0 download

TRANSCRIPT

IntroduoTendo sido originalmente concebida para o desenvolvimento de pequenos aplicativos e programas de controle de aparelhos eletrodomsticos e eletroeletrnicos, Java mostrou-se ideal para ser usada na rede Internet. O que a torna to atraente o fato de programas escritos em Java poderem ser executados virtualmente em qualquer plataforma, mas principalmente em Windows, Unix e Mac. Em meio a essa pluralidade, Java um idioma comum, falado por todos. Isto significa que Java ideal para expressar idias em forma de programas universalmente aceitos. Soma-se a isso o fato de programas Java poderem ser embutidos em documentos HTML, podendo assim ser divulgados pela rede. Diferente da linguagem C, no apenas o cdigo fonte que pode ser compartilhado pela rede, mas o prprio cdigo executvel compilado, chamadobytecodes. Em contraste com a letargia de documentos tradicionais, Java acrescenta a interatividade entre o usurio e o documento que est sendo consultado, tornando-o mais expressivo, agradvel e surpreendente. Java ideal para a elaborao de material educacional, pois permite ilustrar claramente os conceitos enquanto possibilita um ensino individualizado. Um exemplo excelente para ilustrar a utilidade da Java no ensino de matemtica o livro eletrnico de geometria euclideana, Elementos de Euclides na qual, a ilustrao da demonstrao iterativa graas Aplet Java. Java foi desenvolvida por um grupo de pesquisadores da SUN Microsystems por volta de 1990, pouco antes da exploso da Internet. Essa linguagem possui estrutura muito semelhante da linguagem C, da qual descende imediatamente. Java tem em comum com a linguagem C++ o fato de ser orientada a objetos e mantm com esta uma alto grau de semelhana. Esse paradigma de programao consiste de um grau a mais na abstrao da programao, em comparao com a programao estruturada, e tem se mostrado extremamente til na produo de programas cada vez mais sofisticados, em menor tempo e com maior qualidade. A programao orientada a objetos (OOP) hoje universalmente adotada como padro de mercado, e muitas linguagens tradicionais foram aperfeioadas para implementar esse paradigma, como C++, Object Pascal, etc. H uma certa curiosidade por detrs do nome dado a essa linguagem de programao. Java o nome de uma ilha do Pacfico, onde se produz uma certa variedade de caf homnimo. A inspirao bateu equipe de desenvolvimento ao saborear esse caf em uma lanchonete local. Deram-se conta de como era extremamente apreciado por profissionais da rea de software (ao menos nos Estados Unidos), de modo que no foi menos justo fazer-lhe homenagem ao batizar uma nova linguagem de programao. Atualmente, o site JavaSoftmantm informaes atualizadas sobre o desenvolvimento da linguagem Java e suas relaes com o mercado, assim como utilitrios e ferramentas disponveis para serem baixados gratuitamente.

Como Java executadoUm programa fonte escrito em linguagem Java traduzido pelo compilador para os bytecodes, isto , o cdigo de mquina de um processador virtual, chamadoJava Virtual Machine (JVM). A JVM um programa capaz de interpretar os bytecodes produzidos pelo compilador, executando o programa cerca de 20 vezes mais lento do que C. Pode parecer ruim, mas perfeitamente adequado para a maioria das aplicaes. Com isto, um programa Java pode ser executado em qualquer plataforma, desde que esteja dotada de uma JVM. o caso dos programas navegadores mais populares, como o Netscape Navigator e o Internet Explorer, que j vm com uma JVM. A vantagem desta tcnica evidente: garantir uma maior portabilidade para os programas Java em cdigo-fonte e compilados. Porm, as JVM tendem a ser programas extensos que consomem muitos recursos, restringindo assim o tamanho das aplicaes escritas em Java. Atualmente, j existem compiladores capazes de traduzir bytecodes para instrues de mquina nativas, como o Just In Time compiler (ou JIT), tornando os programas ainda mais rpidos. Este compilador requer uma verso especfica para cada plataforma onde se pretende que o programa Java seja executado. Em contrapartida maior velocidade de execuo est tambm uma maior necessidade de memria, pois os bytecodes compilados, em geral, ficam trs vezes maiores do que o original. Uma alternativa bem mais interessante, e talvez muito mais vivel, a implementao da JVM em hardware na forma de uma placa ou microchip. A primeira iniciativa neste sentido da Sun Microelectronics, que est produzindo os chips picoJava ITM, microJavaTM e UltraJavaTM. Estes so capazes executar diretamente bytecodes, acelerando em milhares de vezes a velocidade de execuo. Isto permitir o desenvolvimento vivel de

aplicativos cada vez mais complexos, abrangentes e funcionais. Espera-se que estas solues sejam brevemente empregadas na fabricao de telefones celulares, pagers, jogos, organizadores pessoais digitais, impressoras e eletrodomsticos de consumo, alm aplicaes mais srias como estaes de trabalho dotadas do sistema operacional JavaOSTM. Trata-se certamente do futuro das solues para aplicaes de rede.

[ndice, seguinte] J se tornou clssica a idia de que para aprender uma nova linguagem de programao no se deve ir direto descrio sua formal. Ao invs disso, melhor examinar cuidadosamente um pequeno programa escrito nessa linguagem, o mais simples possvel, mas que permita "quebrar o gelo". Isso faz sentido pois, por exemplo, quando vamos aprender Ingls, ou outro idioma qualquer, no iniciamos com a leitura compenetrada de um livro de gramtica, mas aprendemos algumas estruturas simples e procuramos exercit-las, adiando o estudo rigoroso para quando estivermos suficientemente maduros. Ao compreender as diversas partes componentes do exemplo, j teremos dado um grande passo para podermos escrever qualquer programa. Seguindo essa linha, apresentamos nosso primeiro programa, o clssico "Al pessoal!". O objetivo deste programa simplesmente escrever na tela a frase "Al pessoal!". Vejamos como o cdigo fonte: public class AloPessoal { public static void main(String args[]) { System.out.println("Alo pessoal!"); } }

Digitando o programaQue tal colocarmos a mo na massa e digitarmos esse programinha? Para isso, recomendvel utilizar um editor de texto simples como o Notepad ou Bloco de Notas do Windows. Se estiver no Unix, use preferencialmente o TextEdit ou o vi. O nome do arquivo deve ser exatamente igual ao nome que aparece aps a palavra class na primeira linha do programa e dever ter .java como sufixo. Assim sendo, o nome dever ser "AloPessoal.java". Cuidado para digitar corretamente as maisculas e minsculas, pois a linguagem Java sensvel ao tipo de caixa das letras.

Compilando o cdigo fontePara criar o cdigo binrio, chamamos o compilador Java atravs da linha de comando, do seguinte modo: javac AloPessoal.java Com isso, ser criado um arquivo binrio (desde que tudo corra bem) com mesmo nome do arquivo original, mas com sufixo .class no lugar de .java. No nosso caso, teramos um arquivo AloPessoal.class. Entre as (muitas) coisas que

poderiam dar errado nesse momento, o cdigo fonte pode conter erros. Esse no dever ser o caso, se tiver digitado o programa exatamente como aparece acima. Se, porm, o compilador emitir mensagens de erro, ser preciso identificar as linhas que esto incorretas, corrig-las no editor, e chamar o compilador novamente. As linhas que contm algum tipo de incorreo so listadas pelo compilador juntamente com seu nmero, facilitando sua localizao no editor.

Executando o cdigoPara podermos executar o programa necessrio chamar o interpretador Java, pois, como vimos, os bytecodes foram feitos para rodar em uma Java Virtual Machine. Podemos faz-lo do seguinte modo: java [nome da classe] onde [nome da classe] o nome do arquivo sem o sufixo .class. Em nosso caso, este ser AloPessoal. Ao executar o programa, ele dever exibir na tela a frase: Alo pessoal! Se isto no ocorrer, volte atrs e verifique se o programa foi digitado exatamente como aparece na listagem acima. Este um programa muito simples. Porm, a boa compreenso das estruturas presentes nele dever permitir a programao fluente em Java em pouco tempo.

Entendendo a estrutura do programaTodo programa Java, deve conter ao menos uma declarao da forma public class [nome] { public static void main(String args[]) { ... } } Onde [nome] o nome da classe e a parte "..." o cdigo Java vlido, a ser executado no programa. O nome de uma classe um identificador, como qualquer outro presente no programa, porisso no deve conter espaos ou outros caracteres grficos, isto , deve ser um nome composto de uma seqncia de caracteres que seja vlida para um identificador. Outros exemplos de identificadores so nomes de variveis, nomes de comandos, etc. Vamos adiar um pouco a complicao sobre o que vem a ser uma classe, pois isso depende de alguns conceitos da programao orientada a objetos. Por hora, vamos apenas aceitar que todo programa Java deve conter ao menos uma classe, e que dentro de uma classe que vo os dados e os procedimentos. Notemos ainda que todo programa Java (mas no as applets) deve ter uma classe dotada de um procedimento chamado main. Os procedimentos em Java so chamados mtodos. Os mtodos encerram um conjunto de declaraes de dados e de comandos que so executados mediante a chamada do mtodo por seu nome. Vamos estudar os mtodos em detalhe mais adiante. O mtodo main o ponto onde se d o incio da execuo do programa, isto , um mtodo chamado automaticamente pela JVM. Voltando ao nosso programinha AloPessoal, o cdigo a ser executado System.out.println("Alo pessoal!"); System.out.println o nome de uma funo que serve para escrever informaes textuais na tela. Os dados a serem escritos, devem estar delimitados entre os parnteses "(" e ")". "Alo pessoal!" uma frase. Em computao, uma palavra ou uma frase que tenha funo literal denominadastring. Em Java, a representao de uma string constante se d colocando os caracteres entre aspas, por exemplo: "Imagem", "Rio de Janeiro", "Braslia", etc, so strings constantes. Note que existe um ; (ponto e vrgula) no final da linha, logo aps o ")". Em Java, obrigatrio colocar um ponto e vrgula aps cada comando. Isso porque um comando pode ser quebrado em mltiplas linhas, sendo necessrio sinalizar de algum modo onde que o comando termina.

Java sensvel ao tipo de caixa, isto , distingue caixa alta (maisculo) da caixa baixa (minsculo). Os programadores acostumados a linguagem C e C++ vo certamente sentir-se em casa; porm os programadores acostumados linguagem PASCAL devem ficar mais atentos.

Mais exemplosPodemos escrever "Alo pessoal!" escrevendo primeiro, "Alo " e depois, "pessoal!". Para isso, o programa deve ser alterado da seguinte forma: public class Alo { public static void main(String args[]) { System.out.print("Alo "); System.out.println("pessoal!"); } } Para escrever dados genricos na tela, existe o comando System.out.printque escreve o dado e mantm o carro na mesma linha. H tambm oSystem.out.println que escreve dados e muda o carro para a prxima linha. Podemos concatenar dois ou mais strings usando o operador "+". Por exemplo, "Alo " + "pessoal!" o mesmo que "Alo pessoal!". Para escrever um nmero, basta escrever[string]+n onde [string] um string qualquer e n um nmero. Por exemplo: public class Numero { public static void main(String args[]) { System.out.println("O valor " + 29); } } Como o lado esquerdo da expresso um string, 29 convertido para string"29" e concatenado com "O valor ". Compilando e executando esse exemplo como fizemos anteriormente, devemos obter na tela: O valor 29 Observemos que os comandos System.out.print e System.out.printlnescrevem uma informao de cada vez. Desta forma, precisamos usar "+" para unir "O valor e " com 29 para formar uma nica string. No exemplo acima, nada impede que os dados sejam escritos em duas etapas: primeiro, "O valor e " e depois, 29. Neste caso, teramos: public class Numero { public static void main(String args[]) { System.out.print("O valor e "); System.out.println(29); } } Entretanto, a primeira abordagem parece mais razovel pois torna a programao mais clara e concisa, alm de economizar comandos.

Usando variveisUma varivel simplesmente um espao vago, reservado e rotulado para armazenar dados. Toda varivel tem um nome que a identifica univocamente e um valor, que corresponde informao a ela atribuida. Por exemplo, int n;especifica que n o nome de uma varivel que pode armazenar um nmero inteiro como valor. Em geral, num contexto onde aparece o nome de uma varivel ocorre a substituio por seu valor. O valor de uma varivel pode mudar muitas vezes durante a execuo de um programa, por meio de atribuies de valor.

H diversos tipos de variveis em Java, correspondendo aos vrios tipos de dados aceitos. A discusso sobre esses tipos de dados ser feita no prximo captulo. Antes porm, vamos fazer um pequeno programa que declara uma varivel interira, atribui a ela uma constante, e imprime seu valor na tela. public class Numero { public static void main(String args[]) { int n; n = 17+21; System.out.println("O valor numrico " + n); } } O local onde uma varivel est declarada extremamente importante. Uma varivel conhecida apenas dentro de algum escopo. Por exemplo, uma varivel declarada no escopo de uma classe (fora de um mtodo) conhecida por qualquer mtodo que esteja declarado dentro dessa mesma classe, enquanto uma varivel declarada no escopo de um procedimento conhecida apenas por esse procedimento. H ainda outros tipos de escopo, como veremos mais adiante. O sinal "=" um operador, utilizado para atribuir um valor a uma varivel. Por exemplo, n = 1; faz com que o valor 1 seja armazenado na varivel n. H tambm os operadores usuais de adio, subtrao, multiplicao e diviso de nmeros. Estes so representados pelos smbolos "+ ", "-", "*" e "/", respectivamente. Ao executar o programa acima (claro, depois de compil-lo), ele escreve O valor numerico 38

Introduzindo comentrios no cdigoUm comentrio uma poro de texto que no tem funo para o compilador Java, mas til ao leitor humano. Assim sendo, um comentrio identificado mas ignorado completamente pelo compilador Java. A utilidade dos comentrios bvia: deve conter explicaes sobre um particular desenvolvimento do cdigo, permitindo ao leitor compreender claramente o que se deseja realizar. Os comentrios so introduzidos no cdigo Java de duas formas distintas: Colocado em qualquer parte do programa e delimitado entre "/*" e "*/". Escrevendo "//" antes do comentrio, que se estender at o final da linha. Por exemplo, o cdigo: // // Este um exemplo de como somar dois numeros // public class Numero { public static void main(String args[]) { /* Mtodo principal */ double x,y; // estes sao numeros reais de dupla precisao // System.out.print("x = 2.0"); /* inicializando o "x" */ x = 2; y = 3.0; /* iniciando o y, e fazendo y = y+x; */ y = y + x; // escrevendo a soma System.out.println("x+y = " + (x+y)); } } /* fim de Numero */ equivalente ao cdigo: public class Numero { public static void main(String args[]) { double x,y; x = 2; y = 3.0;

y = y + x;

System.out.println("x+y = " + (x+y)); }

} double um tipo de dado que indica um nmero real de dupla preciso. Veja a tabela no incio da prxima seo. No prximo captulo, vamos estudar detalhadamente os tipos de dados aceitos pela linguagem Java.

[anterior, ndice, seguinte] O trabalho com computadores, desde os mais simples como escrever mensagens na tela, at os mais complexos como resolver equaes ou desenhar imagens tridimensionais em animao, consiste essencialmente em manipulao de dados. Os dados representados em um computador podem ser nmeros, caracteres ou simples valores. A linguagem Java oferece diversos tipos tipos de dados com os quais podemos trabalhar. Este captulo cobrir os tipos de dados mais importantes. Na verdade 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 e sero abordados em detalhe no que segue, enquanto os tipos de referncias consistem em arrays, classes e interfaces. Estes sero vistos em captulos subseqntes. Eis uma viso geral dos tipos que sero abordados neste captulo: Tipo boolean Pode assumir o valor true ou o valor false char byte Caractere em notao Unicode de 16 bits. Serve para a armazenagem de 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 possvels cobrem a faixa de -2-15=-32.768 a 215-1=32.767 int Inteiro de 32 bits em notao de complemento de dois. Pode assumir valores entre -231=2.147.483.648 e 231-1=2.147.483.647. long Inteiro de 64 bits em notao de complemento de dois. Pode assumir valores entre -263 e 263-1. Representa nmeros em notao de ponto flutuante normalizada em preciso simples de 32 bits em conformidade com a norma IEEE 754-1985. O menor valor positivo represntvel por esse tipo 1.40239846e-46 e o maior 3.40282347e+38 Representa nmeros em notao de ponto flutuante normalizada em preciso dupla de 64 bits em conformidade com a norma IEEE 754-1985. O menor valor positivo representvel 4.94065645841246544e324 e o maior 1.7976931348623157e+308 Descrio

short

float

double

Ao contrrio do que acontece com outras linguagens de programao, as caractersticas dos tipos de dados listados acima idependem da plataforma em que o programa dever ser executado. Dessa forma, os tipos de dados primitivos so realmente nicos e garantem a capacidade de intercmbio de informaes entre diversos tipos de computadores, aliviando o programador da preocupao e da rdua tarefa de converter dados em formatos apropriados para a portagem.

Tipo BooleanEste o tipo de dado mais simples encontrado em Java. Uma varivel booleanapode assumir apenas um entre dois valores: true ou false. Algumas operaes possveis em Java como ay, etc tm como resultado um valor booleano, que pode ser armazenado para uso futuro em variveis booleanas. Estas operaes so chamadas operaes lgicas. As variveis booleanas so tipicamente empregadas para sinalizar alguma condio ou a ocorrncia de algum evento em um programa Java. Por exemplo: boolean fim_do_arquivo = false;

a declarao de uma varivel do tipo boolean, cujo nome fim_do_arquivo. O valor false direita do sinal "=" indica que a varivel recebe esse valor como valor inicial. Sem essa especificao o valor de uma varivel impredicvel, podendo ser qualquer um dos valores possveis para seu tipo (neste caso trueou false). Aproveitando o ensejo, h nessa linha a essncia da declarao de qualquer varivel em Java:

1.Informar o tipo de dado que deseja declarar (boolean) 2.Informar o nome que ser usado para batizar a varivel (fim_do_arquivo) 3.Atribuir varivel um valor inicial (= false)4.Terminar a declarao com um ponto-e-vrgula ";".

Uma palavra sobre identificadoresNa declarao acima usamos o nome fim_do_arquivo para designar a varivel. Um nome de varivel, assim como nome de um mtodo, classe, rtulo e dezenas de outros itens lexicogrficos, constitui o que chamado umidentificador. Uma vez criado, um identificador representa sempre o mesmo objeto a ele associado, em qualquer contexto em que seja empregado. As seguintes regras regem a criao de identificadores: O primeiro caracter de um identificador deve ser uma letra. Os demais caracteres podem ser quaisquer seqncias de numerais e letras No apenas os numerais e letras latinas podem ser empregadas, como tambm letras de quaisquer outro alfabeto Devido a razes histricas, o underscore "_" e o sinal de dolar "$" so considerados letras e podem ser usados nos identificadores

Assim como em outras linguagens, como C e C++, os identificadores distinguem o tipo de caixa das letras,isto , as maisculas so consideradas distintas das minsculas. Isso significa quefim_de_arquivo um identificador diferente de Fim_De_Arquivo

Os identificadores no podem ser palavras chave, como: class, for,while, public, etc

Tipos de dados inteirosOs tipos de dados primitivos byte, int, char, short e long constituem tipos de dados inteiros. Isso porque variveis desses tipos podem conter um valor numrico inteiro dentro da faixa estabelecida para cada tipo indiivdual. Por exemplo, um byte pode conter um inteiro entre -128 e 127, enquanto um shortpode conter um valor entre -32.768 e 32.767. J o tipo long suficiente para contar todos os mosquitos do Pantanal Matogrossense. H diversas razes para se utilizar um ou outro dos tipos inteiros em uma aplicao. Em geral, no sensato declarar todas as variveis inteiras do programa como long. Raramente os programas necessitam trabalhar com dados inteiros que permitam fazer uso da mxima capacidade de armazenagem de um long. Alm disso, variveis grandes consomem mais memria do que variveis menores, como short. Obs: Se alguma operao aritmtica cria um resultado que excede um dos limites estabelecidos para o tipo inteiro empregado, no h qualquer indicao de erro para avisar sobre essa ocorrncia. Ao invs disso, um complemento de dois do valor obtido ser o resultado. Por exemplo, se a varivel for do tipo byte, ocorrem os seguintes resultados: 127+1 = -128, 127+9=-120 e 127+127=-2. Entretanto, uma excesso do tipo ArithmeticException levantada caso ocorra uma diviso por zero. As excesses e seus mecanismos sero abordados no Captulo 8. Vejamos o seguinte cdigo: public class Arith { public static void main(String args[]) { byte a = 127; short b = 32767; int c = 2147483647; long d = 9223372036854775807L; int e = 0;

a += 1; b += 1; c += 1; d += 1; System.out.println("Valor System.out.println("Valor System.out.println("Valor System.out.println("Valor d /= e; // Vai dar erro } } com seu respectivo resultado de execuo:

de a = de b = de c = de d = porque

" " " " e

+ + + + =

a); b); c); d); 0

C:\Usr\Waldeck>java Arith Valor de a = -128 Valor de b = -32768 Valor de c = -2147483648 Valor de d = -9223372036854775808 java.lang.ArithmeticException: / by zero at Arith.main(Arith.java:18) C:\Usr\Waldeck> Seguem abaixo alguns exemplos de declaraes de variveis de tipo inteiro: byte Contador = 1; int AnguloEmGraus = -45; char Indice = 6; A diferena entre essas declaraes e a declarao de dados booleanos vista acima est no tipo de dado especificado e no valor atribudo a cada varivel.

Operaes com inteirosPodemos realizar uma srie de operaes com os dados do tipo inteiro. A tabela seguinte mostra uma lista completa. Operao Descrio

=, +=, -=, *=, /=, %= Operadores de atribuio ==, != = +, +, -, *, /, % +=, -=, *=, /=, %= ++, -, >>> =, >>>= ~ &, |, ^ &=, |=, ^= Operadores de igualdade e diferena Operadores de desigualdade Operadores unrios Adio, subtrao, multiplicao, diviso e mdulo Operadores de atribuio com adio, subtrao, multiplicao, diviso e mdulo Incremento e decremento Operadores de deslocamento de bits Operadores de atribuio com deslocamento de bits Operador lgico de negao Operadores lgicos E, OU e OU-exclusivo Operadores de atribuio com operao lgica E, OU e OU-exclusivo

Muitos das operaes que aparecem na lista acima so familiares e praticamente no requerem explicao. H outros, porm, que pode ser um tanto quanto ambguos. o caso dos operadores de atribuio aritmticos. Estes consistem de atalhos para atribuir um novo valor a uma varivel onde esse novo valor depende do valor anterior l armazenado. Por

exemplo: += adiciona um valor ao valor antigo de uma varivel e a soma passa a ser o novo valor. Esse padro tambm obedecido para as operaes -=, *=, /= e %=. Temos assim as seguintes correspondncias: x += 5 x=x+5 x -= y x = x - y x *= 2 x = x * 2 z /= 4 z = z / 4 etc. Os operadores de incremento e decremento referem-se a apenas uma varivel (logo so chamados de unrios). Por exemplo, o operador de incremento soma um ao operando conforme o exemplo: x++; uma maneira muito mais concisa de se escrever x = x + 1. Mas no s, esses operadores se comportam de modo diferente quando seguem ou precedem o nome de uma varivel. Se o operador precede o nome da varivel, ento o incremento (ou decremento) ocorre antes que o valor da varivel seja tomado para a expresso aritmtica. No seguinte exemplo, o valor das variveis x e y ser 6: int x = 5; int y = ++x; Porm, no prximo exemplo o valor de x ser 6 enquando que o valor de y ser 5: int x = 5; int y = x++; Vejamos alguns exemplos de declaraes e de utilizaes de operaes envolvendo tipos inteiros: byte j = 60; short k = 24; int l = 30; long m = 12L; long resuldato = 0L; resultado resultado resultado resultado resultado resultado += j; += k; /= m; -= l; = -resultado; = %= m; // // // // // // resultado resultado resultado resultado resultado resultado = = = = = = 60 (0 mais 60) 84 (60 mais 24) 7 (84 dividido por 12) -23(7 menos 30) 23 ( -(-23) ) 11 (resto de 23 div. 12)

Tipo caracterUma varivel do tipo char armazena um caractere Unicode. Um caractere Unicode um caractere de 16 bits, sendo que de 0 a 225 correspondem aos caracteres do cdigo ASCII (a tabela ASCII uma tabela padronizada internacionalmente de associaes entre caractere e a sua representao numrica no computador). Uma constante do tipo caractere representada colocando-se entre apstrofos, ou pelo valor numrico correspondente na tabela Unicode (ou ASCII), ou ainda, pela sequncia '\x' onde x especifica o caractere a ser referido. Esta especificao de sequncia de escape obedece s mesmas convenes do C/C++. Por exemplo: 'a', 'f', '\n', etc, so constantes do tipo char.

Tipos de ponto flutuanteEm Java, existem duas categorias de de variveis de ponto flutuante: floatarmazena valores numricos em ponto flutuante de preciso simples e doublede preciso dupla. Ambas seguem norma: IEEE Standard for Binary Floating Point Arithmetic, ANSI/IEEE Std. 754-1985 (IEEE, New York). O fato de obedecer a essa norma que torna os tipos de dados aceitos pela linguagem Java to portveis. Esses dados sero aceitos por qualquer plataforma, independendo do tipo desistema operacional e do fabricante do computador. A representao dos valores em ponto flutuante pode ser feita usando a notao decimal (exemplo: -24.321) ou a notao cientfica (exemplo: 2.52E-31).

Alm dos possveis valores numricos que uma varivel de ponto flutuante pode assumir h tambm os seguintes: menos infinito mais infinito zero NAN - not a number Estes so requeridos pela norma. O mais infinito usado, por exemplo, ao somarmos 1 ao maior valor possivelmente representvel por esse sistema. Muitas das operaes realizveis com inteiros (porm no todas) tm anlogas para nmeros de ponto flutuante. Eis um resumo: Operao Descrio

=, +=, -=, *=, /= Operadores de atribuio ==, != = +, +, -, *, / +=, -=, *=, /= ++, -Operadores de igualdade e diferena Operadores de desigualdade Sinais unrios Adio, subtrao, multiplicao e diviso Operadores de atribuio com adio, subtrao, multiplicao e diviso Operadores unrios de incremento e decremento

[anterior, ndice, seguinte] Semelhante s liguagens C, C++ e Pascal, a linguagem Java tambm d suporte a vetores e matrizes (arrays) de diversas formas. Os vetores constituem uma forma muito conveniente de organizar informaes em fileira. Por exemplo, podemos formar um vetor com as notas de cinco alunos de uma sala de aula do seguinte modo: float nota[] = { 7.8, 8.4, 4.2, 1.8, 6.4 }; Neste caso nota[0] a nota do primeiro aluno, isto , 7.8, nota[1] a nota do segundo, ou seja, 8.4, e assim por diante. A utilizao de vetores e matrizes em Java envolve trs etapas:

1.Declarar o vetor ou matriz. Para isto, basta acrescentar um par de colchetes antes ou depois do nome davarivel. Por exemplo: int ind[]; double A[][],T[][][]; int []nota;

2.Reservar

espao de memria e definir o tamanho. preciso definir o tamanho do vetor, isto , a quantidade total de elementos que ter de armazenar. Em seguida necessrio reservar espao de memria para armazenar os elementos. Isto feito de maneira simples pelo operadornew: ind = new int[10]; nota = new int[70]; A = new double[10][20];

3.Armazenar elementos no vetor ou matriz. Para armazenar uma informao em um dos elementos de umvetor ou matriz, necessrio fornecer um ndice que indique a posio desse elemento. Por exemplo, para armazenar um valor na quarta posio do vetor nota, fazemos o seguinte: nota[3] = 5.2; Como podemos observar, os ndices comeam em zero e vo at o nmero de posies reservadas, menos um. No vetor nota criado acima, os ndices vlidos vo de 0 at 69. Caso haja a tentativa de atribuir um valor a um elemento cujo ndice esteja fora desse intervalo, ocorrer um erro que impedir a execuo do programa.

Por isso, necessrio um certo cuidado ao manejar com esses ndices, garantindo o perfeito funcionamento do programa. Existe, porm, um atalho para esses trs passos quando desejamos criar um vetor com valores atribudos de modo esttico. Foi o que fizemos no primeiro exemplo acima, declarando o vetor nota com as notas de cinco alunos. Nesse caso, espao suficiente para as notas de cinco alunos foi reservado e as notas foram guardadas em respectivas posies do vetor. Entretanto, nem sempre to fcil assim. Em geral, estaremos interessados em trabalhar com vetores muito muito maiores, e cujos elementos sejam provenientes de outras fontes, que variam com o tempo. Assim, seremos obrigados a seguir os passos acima. Eis mais alguns exemplos de vetores e matrizes: // 12 primeiros termos da seqncia de Fibonacci: long Fibonacci[] = {1,1,2,3,5,8,13,34,55,89,144}; // Tabela de sen(n*pi/6), n=0,1,2,...5 float seno[] = {0.0000,0.5000,0.8660,1.0000,0.8660,0.5000}; // Tabela de log(1+n), n=0,2...99: double tlog[] = new double[100]; for(int n=0; n >>> < = < == != & ^ | && Multiplicao, diviso e mdulo (inteiros) Adio, subtrao Translao (bit a bit) esquerda, direita sinalizada, e direita no sinalizada (o bit de sinal ser 0)

Operador relacional: menor, menor ou igual, maior ou igual, maior

Igualdade: igual, diferente Operador lgico e bit a bit Ou exclusivo (xor) bit a bit Operador lgico ou bit a bit Operador lgico e condicional

|| ?: = op=

Operador lgico ou condicional Condicional: if-then-else compacto Atribuio

Converso entre tipos de dadosAo trabalhar com expresses, salvo quando todos os operando so do mesmo tipo, inevitvel ter que considerar converses entre um tipo de dado e outro. H basicamente dois tipos de converses de dados. O primeiro se refere a converso implicita na qual, os dados so convertidos automaticamente, praticamente sem a preocupao do programador. Isto ocorre no caso de converso de dados de tipo interio para real e de nmeros para strings. Por exemplo: double x; int i = 20; x = i; Neste caso o valor do inteiro i convertido automaticamente para um double antes de ser armazenado na varivel x. As regras de converso implcita empregadas pela linguagem Java so as seguintes:

os operadores unrios ++ e -- convertem um tipo byte e short so convertidos para um int, e os demaistipos no so afetados

para

os operadores binrios, as regras so um pouco mais complicadas. Para operaes envolvendo apenas inteiros, se um dos operandos forlong, o outro ser convertido para um long antes de realizar a operao, a qual resultar num long. Caso contrrio, ambos os operandos so convertidos para um int e o resultado ser tambm um int, a menos que o resultado da operao seja grande demais para caber num int. Nesse caso, o resultado ser convertido para um long. Para operaes envolvendo nmeros de ponto flutuante, se um dos operadores fordouble, o outro ser convertido para double antes de realizar a operao e o resultado ser um double. Do contrrio, ambos os operando so convertidos para float, e o resultado ser um float. Algumas vezes, porm, as converses implcitas no so suficientes para garantir um resultado esperado em uma expresso. Nesses cados, importante podermos controlar precisamente a ocorrncia de uma converso de tipo. Isto pode ser feito por meio de um operador unrio de converso. Por exemplo: float eventos = 25.7; float dias = 7.2; x = (int)(eventos / dias); O resultado da expresso acima ser precisamente 3, isto a parte inteira de 25.7 dividido por 7.2. A diferena que o operador de converso de tipo (int)transformou o valor do quociente 25.7/7.2 em um inteiro, truncando as casas decimais. Note que o operador de converso um operador unrio de maior precedncia, logo, tivemos de colocar a diviso entre parnteses para garantir que o resultado dessa diviso formasse um nico operando. A converso entre quaisquer inteiros e entre inteiros e nmeros de ponto flutuante permitida. Porm, no permitido converter dados do tipo boolean para nenhum outro tipo, enquanto a converso entre objetos somente permitida para classes parentes. Vejamos ainda um outro exemplo de utilizao do operador de converso de tipo: int a = 3; int b = 2; double x; x = a / b; Neste exemplo, desejamos que a varivel x tenha o valor do quociente entre a eb. Como x um dado de ponto flutuante, presume-se que o resultado desejado neste exemplo seja, digamos, x=3/2=1.5. Como porm os operandos da diviso so ambos inteiros, o resultado ser tambm um inteiro, isto , teremos x = 1.0. Para contornar essa situao, podemos converter explicitamente um dos operandos para um dado em ponto flutuante, fazendo: x = (double)a / b;

Observamos que a converso entre inteiros de maior comprimento para inteiros de menor comprimento pode causar perda de informao na representao dos valores. Caso o valor a ser convertido ocupe mais bits do que o tipo da varivel recebendo esse valor, ento o valor truncado. int l = 393; byte b; b = l; System.out.println("O valor de b " + b); Neste exemplo teremos como resultado: O Valor de b -119 Por que isso aconteceu? Fica mais fcil de compreender isso se interpretarmos os nmeros acima na notao binria. O nmero 393 representado em base dois pelo nmero 110001001, que tem 9 bits de comprimento (omitimos os zeros no significativos). Como a varivel b do tipo byte e seu comprimento de apenas 8 bits, teremos os 8 primeiros bits da direita para a esquerda atribudos ab, isto , 10001001, que representa o nmero -119 em base dois, na notao de complemento de dois.

[anterior, ndice, seguinte]

Execuo Condicional if-then-else compacto Execuo seletiva de mltiplos comandos Execuo seletiva por valores Lao de iterao enquanto/faa Lao de iterao faa/enquanto Lao de iterao com contagem break e continueControle de fluxo a habilidade de ajustar a maneira como um programa realiza suas tarefas. Por meio de instrues especiais, chamadas comandos, essas tarefas podem ser executadas seletivamente, repetidamente ou excepcionalmente. No fosse o controle de fluxo, um programa poderia executar apenas uma nica seqncia de tarefas, perdendo completamente uma das caractersticas mais interessantes da programao: a dinmica. Podemos classificar os comandos aceitos pela linguagem Java em basicamente quatro categorias: Comando Tomada de decises Laos ou repeties Apontamento e tratamento de excesses outros Execuo Condicional A forma mais simples de controle de fluxo o comando if-else. Ele empregado para executar seletivamente ou condicionalmente um outro comando mediante um critrio de seleo. Esse critrio dado por uma expresso, cujo valor resultante deve ser um dado do tipo booleano, isto , trueou false. Se esse valor for true, ento o outro comando executado; se forfalse, a excecusso do programa segue adiante. A sintaxe para esse comando if ([condio]) [comando] // Executado se a condio for true Uma variao do comando if-else permite escolher alternadamente entre dois outros comandos a executar. Nesse caso, se o valor da expresso condicional que define o critrio de seleo for true, ento o primeiro dos outros dois comandos executado, do contrrio, o segundo. Palavras-chave if-else, switch-case for, while, do-while try-catch-finally, throw break, continue, label:, return

if([condio]) [comando 1] else [comando 2] Por exemplo:

// Executado se a condio for true // Executado se a condio for false

import java.io.StreamTokenizer; public class sqrt { public static void main(String args[]) { double x; StreamTokenizer inp = new StreamTokenizer(System.in); // L um dado double a partir do teclado System.out.print("x = "); System.out.flush(); try { inp.nextToken(); x = inp.nval; } catch(java.io.IOException e) { x = 0; } // Decide se possvel calcular a raiz quadrada do // nmero dado. Sendo possvel, calcula-a. Do contrrio // emite uma mensagem de aviso if(x >= 0) System.out.println("raiz quadrada de x e " + sqrt(x)); else System.out.println("x e negativo"); } } E se toda uma lista de comandos deve ser executada seletivamente? A esta altura, convm dizer que h uma maneira bastante conveniente de agrupar longas seqncias de comandos formando uma unidade lgica. Trata-se da noo de bloco de comandos. Este consiste basicamente de uma lista de comandos delimitados por chaves { }. Para efeitos de programao, um bloco de comandos interpretado como se fosse um nico comando. Eis alguns exemplos de blocos de comandos: 1.{

System.out.print("x System.out.println(x); } 2.{ temp = y; y = x; x = temp; }

=

");

Desse modo, podemos fazer tambm a execuo seletiva de blocos de comandos conforme ilustra o seguinte programa para discutir sobre as razes de uma equao do segundo grau ax2+bx+c=0: import java.io.StreamTokenizer; public class baskhara { public static void main(String args[]) { double a, b, c, delta; StreamTokenizer in = new StreamTokenizer(System.in); // Requisitando do usurio os dados sobre a equao a ser // analisada.

// try { System.out.println("Digite os coeficientes da equao ax^2+bx+c = 0"); System.out.print("a = "); System.out.flush(); in.nextToken(); a = in.nval; System.out.print("b = "); System.out.flush(); in.nextToken(); b = in.nval; System.out.print("c = "); System.out.flush(); in.nextToken(); c = in.nval; } catch(java.io.IOException e) { System.out.println("Falha na entrada dos dados."); a = 0; b = 0; c = 0; } // Calculando o discriminante da equao // delta = b*b - 4*a*c; System.out.println( "Equao: ("+a+")x^2+("+b+")x+("+c+")" ); // Decidindo sobre o nmero de razes da equao mediante o // valor do discriminante calculado acima // if ( delta > 0 ) { // A eq. tem duas razes reais double r, d, x1, x2; r = Math.sqrt(delta); d = 2*a; x1 = ( -b - r ) / d; x2 = ( -b + r ) / d; System.out.println("A equao tem duas solues reais: "); System.out.println(" x1 = " + x1); System.out.println(" x2 = " + x2); } else if ( delta < 0 ) // A eq. no tem razes reais System.out.println("A equao no tem razes reais."); else { // A eq. tem uma raiz real dupla double x; x = -b / (2*a); System.out.println("A equao tem uma nica raiz real:"); System.out.println(" x1 = x2 = " + x); } System.out.println("Fim da discusso."); } } if-then-else compacto O if-else compacto no propriamente um comando, mas um operador que realiza avaliao seletiva de seus operandos, mediante o valor de uma expresso booleana semelhante do comando if-else. Se essa expresso fortrue, ento um primeiro operando avaliado; se for false ento o segundo operando avaliado. A sua sintaxe [expresso condicional] ? [expresso 1] : [expresso 2]

onde [condio condicional] deve resultar em true ou false,[expresso 1] e [expresso 2] so os operandos, que podem ser expresses quaisquer. O valor resultante da aplicao do operador if-elsecompacto obviamente igual ao valor do operando que tiver sido avaliado. O tipo desse valor obedece s regras de converso entre tipos de dados discutida anteriormente. Para melhor ilustrar o if-else compacto, consideremos o seguinte comando: y = x < 1 ? x*x : 2-x;

Este logicamente equivalente seguinte seqncia de comandos: if (x