Você está na página 1de 5

Universidade Federal do ABC Disciplina: Linguagens de Programao (BC-0501) Assunto: Primeiro programa em Java (compilao e execuo)

Primeiro programa em Java (compilao e execuo)


Introduo
Este roteiro de aula prtica tem o objetivo de auxiliar o aluno a escrever, compilar e executar o seu primeiro programa na linguagem Java. Compilar significa traduzir o programa escrito em uma linguagem de programao de alto nvel (ex: Java) em uma linguagem de mquina, que pode ser compreendida e executada pelo processador (ex: Intel Pentium) do computador em um determinado sistema operacional (aqui em Linux). No caso de Java, o programa no compilado para uma plataforma (processador e sistema operacional) especfica, mas para uma linguagem chamada bytecode de uma mquina virtual (JVM Java Virtual Machine). A mquina virtual emulada em software em vrias plataformas diferentes, de modo que um mesmo programa em bytecode pode ser executado em todas elas. Essa caracterstica se chama portabilidade. O programa ser digitado pelo aluno usando um editor de textos comum (ex: gEdit ou Kate) e compilado manualmente atravs de linha de comando (terminal). Para os prximos programas em Java ser utilizado um ambiente (aplicao) mais amigvel, mas tambm mais complexo, chamado de IDE (Integrated Development Environment ou ambiente integrado de desenvolvimento). Em particular, apresentaremos o Netbeans.

Preparativos iniciais
Esta prtica supe que JDK (Java Standard Edition Development Kit). Caso no esteja, instalemos 1. Abra um terminal 2. Teste o compilador Java, digitando javac. Se uma mensagem grande, iniciada por Usage: javac <options> <source files> for impressa, ento o compilador foi executado. Seno, uma mensagem de erro ser apresentada.

Exerccio a Digitando o programa


3. Abra o gEdit (clicando em Applications->Accessories->gEdit) ou outro editor simples que salve o texto e digite o programa abaixo (sem os nmeros de linhas): 1 2 3 4 5 6 7 8 } } //Primeiro Programa em Java public class OlaUfabc { public static void main(String args[]) { System.out.println("Viva UFABC em Linux");

4. Explicao do programa: A linha 1 contem um comentrio, pois iniciada com // . A linha 2 contem a declarao da classe OlaUfabc. Por enquanto suficiente entender que uma classe precisa das palavras reservadas public e class e que OlaUfabc um nome qualquer, mas que como ser visto adiante, precisa ser igual ao nome do arquivo que vai conter a classe. 1

Na linha 3, o caractere { (abre chaves) indica que tudo o vem a seguir pertence classe OlaUfabc, at o seu encerramento com }. A linha 4 declara o mtodo principal (main) dessa classe, que ser executado quando o programa for iniciado. A declarao public static void main(String args[]) necessria exatamente desta forma (com o tempo, cada palavra ser compreendida, mas por enquanto suficiente saber que isso necessrio). Nem todas as classes precisam ter um mtodo main. Na linha 5, o caractere { (abre chaves) indica que tudo o vem a seguir pertence ao mtodo main, at o seu encerramento com }. A linha 6 contem o comando System.out.println(Viva UFABC em Linux); que imprime na tela (linha de comando) a mensagem Viva UFABC em Linux. System.out um objeto de sada padro e println um mtodo que imprime um string (conjunto de caracteres) e passa para a prxima linha. Existem outros mtodos para imprimir na tela como ser visto a seguir, alm de mtodos para imprimir em janelas grficas. Repare que no foi usada a crase, como seria necessrio em bom portugus. No entanto, existem alguns problemas com relao acentuao, principalmente quando se lida com programas que executam em linha de comando. Todos que j acessaram endereos na Internet, sem pontuao e cedilhas j experimentaram isso. As linhas 7 e 8 encerram o mtodo main e a classe OlaUfabc, respectivamente.

5. Salve o programa com o nome OlaUfabc.java, sem as aspas em uma pasta de fcil acesso, como home/ufabc/Desktop/. A extenso .java obrigatria em programas Java. O nome antes da extenso deve obrigatoriamente ser igual ao nome da classe public, observando que existe diferena entre letras maisculas e minsculas. Em ingls, diz-se que Java case sensitive porque o compilador sensvel a diferenas entre letras maisculas (upper case) e minsculas (lower case). Um arquivo pode conter vrias classes, mas apenas uma delas deve ser declarada como public. Entretanto, desaconselhado usar essa prtica de programao, ou seja, recomenda-se usar apenas uma classe public em cada arquivo .java.

Exerccio b Compilando e executando o programa


6. Assumindo que o JDK est devidamente 7. Para compilar o programa, use o compilador javac digitando o comando: jpgois@paranoid-android:Desktop:~/ javac OlaUfabc.java jpgois@paranoid-android:Desktop:~/ Caso no haja nenhum erro, a tela voltar para o terminal de comando sem mostrar nenhuma mensagem. Mensagens de erro sero mostradas caso contrrio (o que mais comum !, ou seja, muito difcil, mesmo para programadores experientes, digitar um programa e no cometer nenhum tipo de erro de sintaxe). 8. Observe que, se no houver nenhum erro de compilao, um arquivo com o nome OlaUfabc.class criado, contendo os bytecodes referente a este programa Java. jpgois@paranoid-android:Desktop:~/ ls OlaUfabc.class OlaUfabc.java 9. Para executar o programa, use o comando java", que carrega a JVM e interpreta os bytecodes. O comando e o seu resultado esperado so: jpgois@paranoid-android:Desktop:~/ java OlaUfabc Viva UFABC em Linux jpgois@paranoid-android:Desktop:~/ 2

Observe que a extenso .class no deve ser includa no nome do arquivo. Caso contrrio, ocorrer um erro.

Exerccio c Observando e compreendendo mensagens de erro


10. As possibilidades para a ocorrncia de erros quando se compila e executa um programa so muito grandes, e com a experincia se aprende a identificar e corrigir os mais comuns. Outros, no entanto, no so nada bvios e freqentemente consomem uma boa parte do tempo dos programadores. Alguns exemplos so apresentados a seguir (caso voc ainda no os tenha experimentado). 11. Erros referentes ao nome do arquivo .java errado. jpgois@paranoid-android:Desktop:~/javac OlhaUfabc.java (foi digitado Olha em vez de Ola). error: cannot read: OlhaUfabc.java 1 error jpgois@paranoid-android:Desktop:~/javac Ola Ufabc.java (Ola Ufabc com um espao em branco). javac: invalid flag: Ola Usage: javac <options> <source files> ... 12. Erros referentes ao arquivo .class. Exclua o arquivo OlaUfabc.class (pode usar o comando rm"). jpgois@paranoid-android:Desktop:~/java OlaUfabc Exception in thread "main" java.lang.NoClassDefFoundError: OlaUfabc Essa mensagem estranha (por enquanto) significa que o arquivo OlaUfabc.class no foi encontrado. 13. Compile novamente o programa, com javac e digite o comando: jpgois@paranoid-android:Desktop:~/java OlaUfabc.class Exception in thread "main" java.lang.NoClassDefFoundError: OlaUfabc/class Dessa vez, o erro ocorreu porque foi digitada a extenso .class , que deve ser omitida.. 14. Erros referentes ao nome do arquivo diferente do nome da classe public. Faa uma cpia do programa OlaUfabc.java para algo como MeuPrograma.java e tente compil-lo: jpgois@paranoid-android:Desktop:~/javac MeuPrograma.java MeuPrograma.java:3: class OlaUfabc is public, should be declared in a file OlaUfabc.java public class OlaUfabc ^ 1 error jpgois@paranoid-android:Desktop:~/ Essa mensagem identifica um erro na linha 3 (:3:), porque a classe OlaUfabc pblica e deve ser declarada em um arquivo chamado OlaUfabc.java. Experimente tambm alterar o nome do arquivo OlaUfabc.java para letras minsculas, ou seja, olaufabc.java. O compilador ir fazer a mesma reclamao. 3

15. Erros de sintaxe (escrita) no programa. Retire o caractere ; (ponto de virgula) do final da linha System.out.println(Viva UFABC em Linux);. jpgois@paranoid-android:Desktop:~/javac OlaUfabc.java OlaUfabc.java:8: ';' expected } ^ 1 error Essa mensagem reclama da falta do ;. Uma pergunta que surge facilmente : por que ele diz que o problema na linha 8, antes do } e no na linha 7, depois do )? A reposta que o ; no precisa necessariamente estar no final da linha e o compilador o procura nas prximas linhas at encontrar algo que no devia estar l, no caso o }. Experimente incluir o ; antes do } na linha 8 ou abrir uma linha depois da linha 7 e antes da linha 8 atual e incluir somente o ;, para confirmar como isso funciona. No entanto, no considerada uma boa prtica de programao, porque dificulta a legibilidade e compreenso do programa. 16. Experimente introduzir outros erros de sintaxe, como por exemplo, remover o } final ou alterar uma palavra public para publica.

Exerccio d Alterando o programa


17. Como j foi mencionado, existem outros mtodos para imprimir uma mensagem em uma tela de linha de comando, alm do println, que sero explorados agora. 18. Faa uma cpia do programa OlaUfabc.java para OlaUfabc2.java. Lembre-se de alterar o nome da classe pblica tambm. 19. Usando o mtodo print. Substitua a linha: 6 por 6 6.1 System.out.print ("Viva UFABC em "); System.out.println (" Linux "); System.out.println("Viva UFABC em Linux ");

Compile o programa. O resultado deve ser igual ao programa anterior, porque o mtodo print imprime a mensagem, mas no passa para a prxima linha 20. Substitua agora o mtodo print por println e veja o resultado. As mensagens Viva UFABC em e Linux devem ser impressas em linhas diferentes agora. 21. Usando o mtodo printf, para obter uma sada formatada. O printf consegue tratar de diferentes tipos de dados e no apenas strings (conjuntos de caracteres). Edite o arquivo chamado MeuPrograma.java criado anteriormente e faa as modificaes indicadas a seguir. 22. Pulando de linha com a seqncia de escape \n. Use o comando printf da seguinte forma: 6 System.out.printf("Viva UFABC em Linux\n "); O \n dentro do printf informa que a sada deve passar para a prxima linha. Insira outros \n em outros pontos da mensagem para ver o efeito. Existem outras seqncias de escape, como \t, \r e \\. Experimente-as. Observe que essas seqncias funcionam tambm com print e println, mas so mais freqentemente usadas com printf (por conta das origens na linguagem C). 23. Usando a sada formatada. Transforme a linha de impresso anterior em um comentrio (com //) e digite esta: System.out.printf("%s\n%s\n", " Viva UFABC ", " em Linux "); Agora o mtodo printf est sendo invocado (usado) com 3 argumentos, separados por vrgulas. O primeiro argumento contm o string de argumento composto de especificadores 4

de formato (iniciados por %) e seqncias de escape. Nesse caso, %s significa que vai ser formatado um string. Repare que existe dois %s no string de argumento e outros dois argumentos aps ele. necessrio que haja um casamento entre a quantidade de especificadores de formato e de argumentos aps o string de argumentos. Existem outros especificadores de formato, como para nmeros inteiros (%d) e reais (%f). 24. Novamente comente a linha de impresso anterior (com //) e digite esta: System.out.printf("%s\n%s%d\n%s%f\n", "Nome: Maria", "Idade: ", 19, "Altura: ", 1.69); Repare agora que a seqncia representa a formatao da sada e ficou mais complexa %s\n%s%d\n%s%3.2f\n. Existem cinco especificadores de formato e cinco argumentos aps o string de argumento. Os tipos dos especificadores devem coincidir com os tipos dos argumentos, ou seja, por exemplo %s com Idade: , %d com 19 e %f com 1.69. Experimente trocar a idade (19) por um nome, para observar um erro de execuo. Porm, nem sempre ocorrem erros desse tipo para nos avisar, porque Java tenta fazer converso de tipos em tempo de execuo. Algumas vezes o programa fica com um erro de lgica e pode imprimir resultados incorretos, inclusive em relatrios importantes (imagine, no balano de uma empresa, ou nome seu contra-cheque!). Para a altura ser impressa apenas com duas casas decimais, substitua %f por %.2f. Outra maneira de obter o mesmo efeito, mas misturando as mensagens com o string de argumento e separando dos verdadeiros valores : System.out.printf(Nome: %s\nIdade: %d\nAltura: %3.2f\n, Maria", 19, 1.69);

Exerccio para casa


1. Uma prtica comum entre programadores que o seu primeiro programa em uma linguagem de programao deve dizer ol para o mundo, em ingls Hello world!. Escreva um programa que imprima essa mensagem, lembrando-se de coincidir o nome do arquivo com o nome da classe. Faa pelo menos trs verses desse programa, para usar os mtodos System.out.print, System.out.println e System.out.printf. 2. Escreva um programa que imprime os nmeros de 1 a 10 em uma linha e de 11 a 20 na linha seguinte. Os nmeros devem ter um espao de alguns caracteres entre eles e os de baixo devem estar alinhados com os de cima. Dica: use a seqncia de escape \t para que os nmeros se posicionem em marcas de tabulao pr-definidas. 3. No programa anterior, os nmeros de baixo foram alinhados aos de cima pela esquerda, quando o comum para nmeros o alinhamento pela direita. Escreva um programa que faa o alinhamento pela direita. Dica: Use o especificador de formato %d indicando a quantidade de dgitos que o numero deve ter que voc obter o alinhamento pela direita. 4. Faa um programa que imprima a seguinte operao matemtica: 123 + 8 --131

Você também pode gostar