Escolar Documentos
Profissional Documentos
Cultura Documentos
01 Java Fundamentos
01 Java Fundamentos
Vamos fazer uma anlise desse pequeno programa: As linhas de 1 a 4 so comentrios no cdigo Java para auxiliar na interpretao e leitura do programa. A linha 5 declara uma classe chamada HelloWordlApp, ou seja, esse vai ser o nome do programa depois de compilado. Salve o arquivo obrigatoriamente com esse nome e seguindo a regra que ns j sabemos que o Java case sensitive, ou seja, faz distino entre letras maisculas e minsculas, por exemplo, ADILSON.java diferente de Adilson.java. O nome do arquivo salvo ser HelloWordlApp.java e o nome do arquivo compilado ser HelloWordlApp.class, mas tenha calma isso voc vai aprender logo, logo.
DICA: No padro sugerido pela SUN toda classe tem iniciais maisculas, todo mtodo em minscula e declarao de objetos tambm, pois vlido a existncia de um objeto com o mesmo nome da classe.
A linha 6 o mtodo principal que todo programa Java tem exceto os applets que aprenderemos o por que quando estiver estudando o captulo sobre Java applets. como se fosse a funo main() da linguagem C. A linha 7 mais um modelo de comentrio em Java. A linha 8 responsvel por imprimir a mensagem Hello World! na tela. como o comando printf da linguagem C. A linha 9 encerra o mtodo main(...) declarado na linha 6 e... E por ltimo a linha 10 encerra a classe HelloWordlApp declarada na linha 5. Fcil de entender esse programa, no mesmo? Bom, acho que voc entendeu e pode perceber que se comearmos com exemplos bem simples o Java acaba se tornando de certa forma at que fcil. O cdigo anterior gera a frase Hello World! em MS-DOS ou no terminal do sistema Linux. Caso queira execut-lo, primeiramente salve o arquivo e execute o comando javac HelloWordlApp.java para compilar e gerar o arquivo HelloWordlAp. class agora para executar o programa digite o comando java HelloWordlApp. OK! Seu programa esta a.
// Comentrios iniciais sobre o programa. package com.studyguide.myjava; import import import import com.unipar.cooperate.server.*; java.util.*; javax.swing.*; java.awt.*; //1 //2 //3
public class AloMundao { public final static void main(String[] args) { System.out.println("Alo Mundao Java!"); } } // fim do programa.
Resumindo, devemos saber em princpio que todos os programas em Java possuem 6 (seis) elementos bsicos, os quais podem ou estaram presente em seus programas conforme o cdigo anterior, onde:
(1) Pacote Java criado por terceiros. Esses pacotes podem incluir inmeras funcionalidades a mais para dar mais poder as suas aplicaes. (2) Classes definidas por voc mesmo ou classes de terceiros para aproveitamento de cdigo. Por exemplo, uma classe
para verificar CPF, CNPJ, RG, Ttulo Eleitoral, Inscrio Municipal/Estadual e assim por diante.
(3) Pacotes do prprio kit SDK da linguagem Java. (4) Classe principal a qual vai dar nome a sua aplicao. Todo programa em Java apresenta uma classe principal caso
(5) Mtodo principal o qual executar o programa. Todo programa em Java tem um mtodo principal semelhante
linguagem C/C++ caso siga esse exemplo. O mtodo main() muito flexvel, a ordem dos modificadores no importa, o argumento do tipo array de Strings ou varargs (Java 5) e o nome do argumento pode ser qualquer nome vlido.
static public void main(String[] args){...} public static void main(String... x) {...} // Java 5. static public void main(String xyz[]){...}
(6) Corpo do programa. Dentro do corpo do programa que so usados variveis, operadores, chamadas de mtodos
e classes (internas ou externas), outros programas, rotinas do sistema operacional, acesso a intranet e a Internet etc.
Voc no necessariamente ter que usar os passos (1) e (2) para desenvolver seus programas em Java. Isso acontecer com o tempo onde os programas ficam grandes e complexos. Como podemos ver, essa a regra para um programa linear, ou seja, um programa de um nico arquivo .java que vai ser compilado e executado. Essa regra vale para o modo texto e tambm para o modo grfico. No se preocupe agora com programas modulares, como, um programa semelhante a idia do Delphi onde temos vrios arquivos de formulrios que so partes de um programa. A estrutura bsica de programao em Java no difcil de ser seguida, pois ela define as seguintes regras: 1. Atribuio de nomes: Se o arquivo fonte possuir uma classe pblica, seu nome dever ser o mesmo que o dessa classe; 2. Total de classes: A linguagem Java sugere o mximo de uma classe pblica em um arquivo fonte. Porm o restante no sendo pblica pode ter quantas classes o programador desejar, no entanto, a SUN recomenda o mximo de linhas por arquivo fonte seja em nmero de 2.000 (dois mil), para no afetar a performance; 3. Layout: Um arquivo fonte .java pode conter trs elementos de nvel superior que so: a) Uma declarao de package opcional; b) Qualquer nmero de declaraes de importao e c) Declaraes de classe e de interface. Lembre-se de que esses itens devem aparecer nessa ordem. Isto , as instrues de importao (import) devem preceder todas as declaraes de classe e, se uma declarao de package for utilizada, dever preceder as classes e as importaes (import).
No decorrer do seu aprendizado do Java voc pode encontrar diferentes tipos de declarao para a classe System e para que voc no fique a ver navios aqui esto os trs tipos que voc poder encontrar: 1. System.out: Usada para a sada padro (tela) de informaes. Usamos para mostrar na tela informaes de processamento dos nossos programas; 2. System.in: Usada para entrada padro (teclado) de informaes. Usamos quando precisamos que o usurio fornea informaes ao sistema (aplicao); 3. System.err: Usada para sada padro (arquivo ou tela) e erros (informaes). Usamos quando precisamos analisar eventuais informaes decorrentes de erros em nossos aplicativos.
DICA: Por padro, todas as classes so subclasses da classe Object (classe mais alta de todas), mas no precisa se preocupar, pois isso j est implcito em todos os seus programas. comum e voc ver neste livro o uso dessa classe para verificao de objetos.
Agora acompanharemos outro exemplo de um programa que usa a mesma idia, porm para o modo grfico que usa o Swing (pacote Java para escrever aplicaes em modo grfico). Perceba que a idia a mesma, ou seja, a de mostrar a mensagem Hello World! na tela:
1. import javax.swing.*; 2. 3. public class HelloWorldSwing { 4. public static void main(String[] args) { 5. 6. JFrame frame = new JFrame("HelloWorldSwing"); 7. final JLabel label = new JLabel("Hello World"); 8. frame.getContentPane().add(label); 9. 10. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 11. 12. frame.pack(); 13. frame.setVisible(true); 14. } 15. }// Fim do programa.
Vamos analisar esse programa: A linha 1 importa do pacote Swing javax.swing.*; que responsvel pela parte grfica (janelas, botes, etc), ou seja, todos os componentes para o desenho de nossa interface, assim no precisaremos nos preocupar com os nomes de tais componentes. O pacote Swing melhor e mais moderno que o AWT. A linha 3 e 4 so declaraes da classe e do mtodo principal. A linha 6 informa a criao de um objeto chamado frame de uma classe JFrame. Isso , uma janela completa (bordas e botes) com o ttulo HelloWorldSwing. A linha 7 informa a criao de um objeto chamado label de uma classe chamada JLabel e ele vai colocar o texto HelloWorldSwing dentro da janela. A linha 8 insere o objeto label em um painel que est contido dentro do frame. assim, uma janela (frame) apresenta um painel que o getContentPane() e dentro desse painel inserimos todos os objetos que fazem parte da interface. A principal funo dos painis que eles servem para controlar o posicionamento de seus componentes para uma melhor organizao de sua aplicao. A linha 10 programa o boto X para fechar a janela. Por padro ele est desabilitado e no vai fechar a janela quando voc clicar nele, por isso que voc precisa dessa linha. Engraado n? Aps a verso 1.3 do Java somente essa linha basta para que o boto X tenha seu efeito de fechar a janela. Caso voc use uma verso anterior ao 1.3 (o que eu no recomendo), voc precisar criar um listener (ouvinte), que algo semelhante aos eventos do Visual Basic e do Delphi, Assim ele ficar ouvindo se algo aconteceu e poder ento executar uma ao (Action). As linha 12 e 13 so responsveis por disponibilizar a janela na tela. H outros modos de se disponibilizar uma janela na tela mesmo usando AWT e Swing, porm com o tempo voc aprender como fazer. As linhas 14 e 15 encerram a declarao da classe (linha 3) e do mtodo principal (linha 4).
4
Veja que interessante, o cdigo anterior gera a seguinte sada em Windows e em Linux:
Para exemplos simples, usualmente podemos tambm fazer uso das caixas de dilogos, onde essas possuem a vantagem de trazer botes j padronizados. Acompanhe o prximo exemplo:
import javax.swing.JOptionPane; public class AloMundoJOP { public static void main( String args[]) { JOptionPane.showMessageDialog(null,"Alo Mundo!\nBem Vindo ao Java."); System.exit(0); // Termina a aplicao. } }// Fim do programa.
No sistema Linux devido aos vrios gerenciadores de janelas a aparncia de seu aplicativo muda bastante. Experimente usar os gerenciadores KDE, Gnome, WindowMaker, IceWM, etc para ver como que fica a aparncia de seus programas. Devido a essa filosofia do Linux nossos programas ficam muito mais bonitos e interessantes de usar. Lembrando que no entraremos no conceito tcnico da programao, pois ns somente estamos fazendo uma anlise de um programa em cdigo Java. Eu sei que voc vai fazer a seguinte pergunta: Nossa, tudo isso s para colocar uma mensagem na tela?. Eu digo: S isso, e j pode ir se acostumando que voc vai digitar um bocado para aprender a programar em Java. Em Java quando estamos digitando nossos programas no brao, ou seja, sem contar com a ajuda de uma IDE (ambiente de desenvolvimento), usamos de muita digitao e, portanto MUITO importante desde j que nos acostumemos a corrigir on-time (na hora), os nossos erros, pois se faltar uma vrgula ou ponto e vrgula (com exceo dos comentrios todas as linhas de um programa em Java terminam com ponto e vrgula), teremos que procurar e isso poder gerar certo aborrecimento pelo tempo que vai ser gasto. Pois dificilmente nas primeiras tentativas de programao a gente acerta. Claro, que depois que voc tiver j uma boa base e idia do ambiente Java, voc vai escolher um programa para lhe ajudar a digitar melhor e depois vai escolher uma IDE para da comear a desenvolver suas aplicaes cada vez com um nvel maior e conseqentemente uma maior complexidade.
Imagine um sistema de banco de dados, com validao de usurio, conexes remotas, gerenciamento de backups, emisso de relatrios em texto, em PDF, HTML, etc e etc. Voc acha que isso simples de ser feito? Pois, acredite, no . Isso geralmente e deve ser feito em equipe e dependendo da complexidade de um sistema pode levar muito tempo. Eu no estou querendo lhe desanimar, muito pelo contrrio, estou lhe mostrando o quanto o Java tem para lhe oferecer e voc para aprender, e assim tornar-se um profissional qualificado.
Tambm podemos fazer importaes especficas para somente o que nos interessa, veremos essas importaes no captulo sobre colees.
import java.awt.Graphics; import javax.swing.JOptionPane; // Importa Graphics. // Importa JoptionPane.
Os pacotes de terceiros ou os que voc mesmo criar tem uma outra forma de serem declarados e vem antes do import para pacotes normais, ou seja, deve ser a primeira linha a ser declarada. Podem existir apenas comentrios antes dessa declarao. Embora aqui apaream vrios pacotes, apenas uma declarao de pacote vlida, o restante deve ser feito via importao. O uso de pacotes externos (pacotes prprios ou de terceiros) na linguagem Java tem a seguinte sintaxe:
package edu.org.meuspacotes.*; package edu.org.meuspacotes.CPF; // Tudo de meuspacotes. // Uma classe especfica.
Qual a vantagem de usar esses pacotes? Simples. Se for pacote da linguagem Java servir para voc poder programar seno, no tem como, e se for pacotes de terceiros, servir para que voc possa usar uma implementao existente no pacote para um objetivo especfico. Voc tambm pode desenvolver seus prprios pacotes, mas para isso o seu conhecimento em ambiente Java precisa estar bem amadurecido. A vantagem disso que poder redistribu-lo compartilhando assim seus conhecimentos e trocando experincia. Quando usamos uma IDE, ou seja, um ambiente de desenvolvimento de aplicativos como JBuilder, Eclipse ou NetBeans por exemplo, elas usam a regra package <diretrio_da_aplicao> a ser desenvolvida. Veja isso atravs dos fontes de sua aplicao e perceba que todos os demais programas (classes) dessa aplicao estaro fazendo referncia a esse diretrio.
NOTA: Em uma aplicao, por arquivo de classe apenas uma declarao package pode existir, pois na verdade trata-se de um diretrio de onde vo ser buscadas as classes. Tambm possvel coloc-lo como declarao import em alguns casos.
Descrio
Classes responsveis pela criao de aplicaes grficas usando AWT Abstract Window Toolkit, ou seja, um kit de ferramentas para construo de aplicativos baseados em janelas. Classes para criao de componentes reutilizveis, os famosos Java Beans. Classes responsveis pelo tratamento de controle de fluxo de dados de entrada e sada. Classes e mtodos responsveis usados na programao do diaa-dia da linguagem Java. Classe responsvel por mtodos matemticos usados na programao. Classes responsveis pelo acesso e trabalho atravs da rede. Classes responsveis por mtodos de execuo remota, os Java RMI. Classes e interfaces responsveis por mtodos de controlam o aspecto sobre segurana no sistema. Classes responsveis por mtodos de acesso a banco de dados usando a linguagem SQL. Classes para mtodos relacionados a formatao e customizao de formatos textos como data, hora, nmeros, streams etc. Classe de colees de framework, modelos de eventos, internacionalizao e mtodos de gerao de nmeros aleatrios, arrays e string tokeninzer. Classe responsvel por mtodos para tratamento de criptografia em Java. Classes e mtodos responsveis para manipulao de imagens, como entrada, sada, tratamento e exibio. Classes e interfaces para acesso ao naming service em Java (JNDI). Classes aplicaes de rede. Classes e mtodos para servios de impresso. Prov um framework (camada) para controle autenticao e autorizao. Classes e mtodos para trabalhar com multimdia. Classes e mtodos para desenvolvimento de aplicaes grficas mais modernas e elaboradas que AWT. Classes e mtodos para processamento em XML. Prov um mapeamento para API Corba am Java. Prov uma interface para DOM que componente API para Java XML. Contm classes e mtodos para processamento em XML.
Como podemos ver, esses so os pacotes bsicos da linguagem Java e acredite tem MUITA coisa para aprender com eles. Poderemos desenvolver qualquer aplicao com esses pacotes, a no ser que precisemos de um pacote muito especfico.
Pronto. Agora no tem mais desculpas para no mais documentar seus cdigos. Voc poder acentuar normalmente as palavras em seus comentrios, mas no em seus programas textos, pois a sada no ser como a esperada a no ser que voc use a classe de codificao de cdigos de pginas para que a sada de seus programas sejam acentuadas no console texto. Geralmente no fazemos isso, pois o console s vai servir para testarmos nosso aprendizado de fundamentos de programao, pois quando usamos o modo grfico a acentuao no apresenta nenhum problema.
Separadores de controle
A linguagem Java oferece um par de seqncias de caracteres de controle de programao unindo-se assim as regras de programao. So separadores simples cuja funo hierarquizar e controlar o fluxo de instrues em um arquivo Java. Esses separadores so: ( ) Parnteses: Tem como funo conter listas de parmetros em uma definio e chamada de mtodos. Tambm podemos utiliz-los para definir precedncia em expresses, controle de fluxo e para efetuar converses (casting) em tipos primitivos de dados; { } Chaves: Usamos para trabalhar e inicializar nossas matrizes/vetores/arrays. Tambm usamos para definio blocos de cdigos, classes e mtodos; [ ] Colchetes: Usamos para declarao de matrizes e tambm usamos quando estamos fazendo referncia aos valores e matrizes e para controle de ndice de argumentos passados via linha de comando; <> Maior e Menor: Usando no Java 5 para definio de tipos genricos, um novo conceito muito interessante e gil para armazenamentos de objetos quaisquer; ; Ponto e vrgula: Usamos para terminar uma linha de instruo em nossos arquivos Java; , Vrgula: Usamos para separao de identificadores em uma declarao de variveis. Tambm usamos dentro um lao for do mesmo modo que usamos na linguagem C/C++; . Ponto: Usamos para separar nomes de pacotes de terceiros e tambm de pacotes internos e usamos tambm para identificar mtodos externos de classes externas na atribuio de ao de objetos.
Ns podemos desenvolver uma aplicao para o modo texto, para o modo grfico usando Java AWT ou Swing e podemos desenvolver aplicao para a Internet atravs do uso de Java Applets. O nico cuidado quando estamos desenvolvendo aplicao em Java Applets que os applets apresentam restries quanto ao local em que esto sendo executado. Se voc for desenvolver uma aplicao que faa uso de acesso a disco (escrita/leitura), por exemplo, os applets no so recomendados, pois remotamente eles no tm esse direito. O lgico seria fazer ento uma aplicao normal, mas que pudesse ser executada remotamente com propriedades de leitura e escrita local. Os tipos de aplicaes que podemos escrever em Java so: 1. Aplicaes em modo texto e aplicaes em modo grfico usando AWT e/ou Swing; 2. Aplicaes grficas que rodam dentro do navegador usando applets; 3. Aplicaes embarcadas (Embeded Applications), ou seja, so as aplicaes que voc encontra nos celulares, palms, alguns relgios e outros dispositivos portteis.
Se souber projetar, at mesmo uma aplicao simples conseguir fazer usando um editor simples, acredite. Mas pode escolher qualquer um que achar melhor, e para um primeiro momento a digitao pura do cdigo melhor, pois assim voc vai ficando mais ntimo da linguagem e vai aprendendo como que funciona a filosofia da programao em linguagem Java. Ento, voc percebeu que o fundamento do Java vai ser mesmo no brao, isso bom porque voc vai realmente aprender Java sem os vcios de um ambiente integrado de desenvolvimento (IDE).
Depois que estiver bastante familiarizado como cdigo Java no brao mesmo, a ento eu lhe aconselho a usar uma IDE para seu desenvolvimento profissional e de suas aplicaes, mas isso tambm vai depender do que voc quer fazer e com que vai trabalhar.
10
No sistema Windows tem um aplicativo bem simples e muito bonzinho de usar que Editplus (www.editplus.com). Ele to pequeno que cabe em um disquete, tambm faz colorizao automtica do cdigo Java, alm de outros cdigos. Eu o recomendo para que voc se acostume com o estilo de programao em Java e alm do mais ele um shareware que no expira, ele apenas fica informando que o tempo de uso j venceu, mas permite que mesmo assim voc o continue usando. Se voc for trabalhar com aplicaes corporativas e banco de dados Oracle eu lhe aconselho o JDeveloper 10g (www.oracle. com) que j faz toda a integrao entre parte servidora, parte cliente e parte interface. Mas eu j lhe digo, prepare seu bolso e sua mquina, pois embora a primeira vista ele seja fcil de entender vai precisar fazer um curso sobre como usar o JDeveloper com bancos Oracle, os cursos no so nada baratos, embora o aplicativo seja gratuito digamos assim. E prepare sua mquina, pois eu lhe aconselho no mnimo uns 512 MB s para comear a brincar, uns 768 MB j da para ter uma rotina normal de trabalho, mas se quiser abusar pode dispor de 1 GB de RAM em sua mquina que voc realmente vai desenvolver aplicaes corporativas. Voc poder usar o JBuilder da Borland (www.borland.com) para aplicaes no to robustas e pesadas pois a curva de aprendizado do JBuilder menor que a do JDeveloper e voc consegue fazer coisas realmente com qualidade usando o JBuilder nas verses mais recentes. Voc tambm poder usar o Eclipse (www.eclipse.org) que o que a maioria dos usurios Java acaba aprendendo. O projeto Eclipse est bem maduro e esse framework de desenvolvimento Java a cada dia fica mais completo e robusto. O NetBeans (www.netbeans.org) alm de ser de uso livre muito bom e tambm apresenta uma curva de aprendizado pequena em relao aos outros e ainda vem incluso nas ltimas verses do kit de desenvolvimento do Java distribudo pela SUN. Sua interface passou por uma remodelagem para que ficasse mais intuitiva e fcil para o usurio. muito interessante desenvolver usando o NetBeans, pois com ele podemos criar aplicaes completas. O NetBeans nas ultimas verses como 5/6 ou superior trs uma excelente idia chamada de Matisse que um free layout auto ajustvel, o desenho de formulrios d-se de modo livre como se fosse em Delphi, mas quando um componente chega prximo ao outro ou na borda do formulrio automaticamente aparecerem guias de ajustes precisos para posicionamento do componente, isso era o que estava h tempos faltando em uma IDE de alto nvel. No entanto eu lhe aconselho que antes que voc opte por alguma dessas IDEs que procure se identificar com a faixa de mercado que est atuando ou trabalhando e depois procure se familiarizar com cada uma delas, por exemplo, tire uma semana para cada uma e nessa semana explore o mximo que puder. No entanto, se tem tempo para estudar as vrias IDEs Java que tem por a, procure na Internet que voc vai achar excelentes ferramentas para desenvolver em Java, tudo uma questo de tempo.
DICA: Defina bem a estrutura de seus programas em Java e evite usar arquivos muito grandes. No interessante usar um arquivo com mais de 2.000 (dois mil) linhas, se isso acontecer tente dividi-lo em classes para melhor gerenciamento.
Se estiver usando o Linux e for usar o editor vi use o usando o comando vi OlaMundo.java para criar seu arquivo e depois de digitado aperte a seqncia de teclas ESC:wq!. Assim voc salva e sai do editor.
/** /* // // Programa: Objetivo: Compilar: Executar: OlaMundo.java */ Mostrar a frase Ola Mundo! Na tela */ javac verbose OlaMundo.java java OlaMundo {
public class OlaMundo { public static void main(String[] args) System.out.println("Ola Mundo!"); } }// Fim do programa.
Tome cuidado para no errar na digitao e a frase Ola Mundo! entre aspas duplas e por enquanto sem acento, pois voc ainda no aprendeu a colocar acentuao em Java para o modo texto, pois sai uns caracteres estranhos. Para o modo grfico a acentuao normal. Lembre-se: As chaves no precisam necessariamente estar na mesma linha da declarao da classe e do mtodo principal, isso uma questo de gosto e de visualizao, no decorrer dos exemplos do livro voc ver dos dois jeitos, ou seja, abaixo da declarao e junto com as declaraes de classe e de mtodos.
/** Programa: OlaMundo2.java */ public class OlaMundo2 { public static void main(String[] args) { System.out.println("Ola Mundo!\n--------------------------------"); System.out.println("Aprendendo programar em JAVA...."); } }// Fim do programa.
H outro editor interessante que o Jedit (www.jedit.org), voc pode baixar a verso para MS Windows e rodar tambm no sistema Linux, pois ele tem a extenso .jar. Para executar no Linux simples, use o comando java jar /...caminho.../ jedit.jar. Onde caminho o diretrio que voc o instalou l no Windows. Eu gostei dele simplesmente por esse motivo.
12
No exemplo anterior o nome do arquivo OiMundo.java mas ele possui uma classe principal que se chama OlaMundo, ento, por conveno devemos gravar o arquivo como OlaMundo.java seno teremos erro de compilao. Bom, aps digitar um programa e verificar que no tem nenhum erro de digitao, sei que est ansioso para ver esse negcio funcionado. A compilao de um programa Java segue a seguinte sintaxe:
# javac opes arquivo.java
...e no momento devemos estar dentro do diretrio onde iremos compilar nosso programa. possvel estar fora do diretrio de compilao ou ento informar para onde que vo parar os arquivos .class que so os arquivos fonte .java depois de compilados. Calma l. Se olharmos no nosso diretrio poderemos verificar que o nosso arquivo OlaMundo. java est prontinho esperando para ser compilado. Para compilar o arquivo use o comando javac OlaMundo.java, e se tudo ocorreu bem, agora existe mais um arquivo chamado OlaMundo.class, esse o arquivo que foi compilado e agora vai ser interpretado (executado) pela JVM. Para executar agora o seu programa apenas use o comando java OlaMundo (sem o sufixo .class), automaticamente ser executado o arquivo .class que o arquivo compilado. Viu s que coisa mais simples do mundo. Se desejar ver mais detalhes sobre como a compilao est funcionando use o comando javac verbose OlaMundo.java, assim veremos o compilador passando por todas as classes internas do Java necessrias para o funcionamento do seu programa.
C:\estudos>javac -verbose OlaMundo.java [parsing started OlaMundo.java] [parsing completed 171ms] [search path for source files: [., C:\Arquivos de programas\QuickTime\QTSystem\Q TJava.zip]] [search path for class files: [C:\Arquivos de programas\Java\jdk1.5.0_10\jre\lib \rt.jar, C:\Arquivos de programas\Java\jdk1.5.0_10\jre\lib\jsse.jar, C:\Arquivos de programas\Java\jdk1.5.0_10\jre\lib\jce.jar, C:\Arquivos de programas\Java\jd k1.5.0_10\jre\lib\charsets.jar,... ... [wrote OlaMundo.class] [total 2781ms]
Voc pode compilar qualquer programa fonte .java mas somente poder executar o programa que possuir o mtodo main() e que haver apenas um por programa fonte, pois o restante sero usados como instncias e bibliotecas. Se tentar executar o programa sem o mtodo main() ser lanada uma exceo em tempo de run-time:
# java OlaMundoSemMain Exception in thread "main" java.lang.NoSuchMethodError: main
O compilador Java oferece algumas outras opes para voc compilar seus programas. Essas opes esto explicadas na tabela seguinte.
13
Descrio
Determina o path (caminho) no qual o compilador vai procurar por classes. Determina o diretrio no qual o compilador armazenar os arquivos .class de sada de compilao. Informa ao compilador para criar o arquivo de informao para debug. Informa ao compilador para no mostrar quando da compilao de um arquivo. Informa ao compilador para aperfeioar a compilao de um programa. Muito til, pois informa ao compilador para exibir as informaes sobre os procedimentos de compilao.
Mas se por algum motivo precisarmos compilar para ser usado com a JVM 1.4 estando o sistema com a JVM 1.5, usamos a seguinte linha de comando (O diretrio das bibliotecas para JVM 1.4 deve estar no sistema).
# javac -target 1.4 -bootclasspath jdk1.4.2/lib/classes.zip -extdirs "" ArqAntigo.java
Acompanhe aqui alguns exemplos. Informando ao compilador para incluir a classe classes.zip no arquivo Teste.java. A importncia disso que podemos fazer reaproveitamento de cdigos, por exemplo, vamos supor que voc criou uma classe para verificar CPF, RG, CNPJ, etc.
# javac -classpath c:\java\lib\classes.zip;c:\classes Teste.java
Informando ao compilador para incluir os arquivos compilados (de sada) .class no diretrio denominado compilados, desse modo todos os seus executveis interpretados estaro em um nico lugar.
# javac -d c:\classes\compilados applet.java
Usando essa idia poderamos ter a seguinte situao, um diretrio chamado sources para os fontes e outro chamado classes para os ByteCodes. Veja o exemplo para Windows e Linux:
C:\>estudos\classes\ C:\>estudos\sources\ /opt/estudos/classes/ /opt/estudos/sources/
Se voc fez um update para a mais recente verso do Java ter esse resultado:
C:\Documents and Settins\adilson>java -version java version "1.7.0-ea" Java(TM) SE Runtime Environment (build 1.7.0-ea-b23) Java HotSpot(TM) Client VM (build 12.0-b01, mixed mode, sharing)
Geralmente, um aplicativo stand-alone (chamado via linha de comando ou atalho na rea de trabalho) composto por vrias classes. Como cada classe compilada para um arquivo .class distinto, necessrio saber qual classe possui o mtodo esttico main(String args[ ]) e passar o nome dessa classe como parmetro para o programa java, sem a extenso .class. Veja os exemplos de como executar uma aplicao em java.
java NomeDaClasse java pacote.subpacote.NomeDaClasse java -classpath c:\classes;c:\bin;. pacote.Classe java -cp c:\classes;c:\bin;. pacote.Classe java -cp %CLASSPATH%;c:\mais pacote.Classe java -cp biblioteca.jar pacote.Classe java -jar executavel.jar
14
DICA: O comando java quando executado de dentro de um terminal no permite a digitao de comandos neste terminal, porm o comando javaw carrega o programa java e permite que comandos sejam usados no terminal.
Muitas vezes, as classes Java podem ser agrupadas em pacotes (diretrios) que podem estar ou no compactadas. Se o programa Java estiver dentro de um pacote no compactado, deve-se incluir o nome do pacote no parmetro passado para o comando java, estando fora do pacote (o diretrio atual deve ser o diretrio que contm o pacote). Por exemplo, o comando a seguir executa o aplicativo TesteDeClasse, contido no diretrio minhaClasse.
# java minhaClasse.TesteDeClasse
Para executar um aplicativo Java stand-alone, necessrio ter o JRE Java Runtime Environment instalado na mquina, que pode ser baixado da Internet na prpria pgina da SUN. possvel compilar o aplicativo em Java de modo normal para modo nativo em Windows, gerando assim um executvel .exe, mas mesmo que o aplicativo seja compilado em modo nativo necessrio ter a JRE.
NOTA: O propsito de se criar uma aplicao nativa em Windows ou Linux a execuo mais rpida, mas isso comprometer a portabilidade da aplicao e uma vez nativo, a aplicao ser nativa no sistema operacional onde foi compilada.
Se o programa Java estiver dentro de um pacote compactado (.zip ou .jar), deve-se usar um comando como o que est a seguir, passando o parmetro jar tanto para arquivos .jar quanto para arquivos .zip:
# java -jar TesteDeClasse.jar ou # java -jar TesteDeClasse.zip
H uma outra maneira de compilar seus programas em Java. Quando ns usamos rotinas de controles de erros como try/exceptions ou assertions podemos ter um maior controle sobre futuros erros em nossos programas. Quando fazemos uso de assertions o que geralmente usado quando j temos uma boa base sobre controle de erros possvel primeiramente verificar se possveis erros podem ocorrer. Atravs do pacote java.lang.AssertionError que podemos atravs da palavra reservada assert inserir esse tipo de controle em nosso cdigo. O uso de assertions tambm conhecido como uso de assertivas, informa que mesmo que um cdigo tenha sido compilado com esse tipo de uso, quando da hora da compilao voc dever explicitamente forar a sua utilizao, pois por padro as assertivas no so ativadas.
As assertivas no so compiladas nem executadas por padro e possvel instruir a JVM desativar assertivas para uma classe e ativar para um dado pacote em uma mesma linha de comando. Mas, no se preocupe com isso agora, pois primeiramente precisamos aprender os fundamentos da programao e l na Parte 2 do nosso estudo veremos como tudo isso funciona. Para habilitar ou desabilitar o uso das assertivas em seus programas veja os comandos a seguir:
1. java -ea ou -enableassertions: Habilita o uso de assertion; 2. java -da ou -disableassertions: Desabilita o uso de assertion; 3. java -ea:br.com.unipar: Habilita para o pacote br.com.unipar; 4. java -ea -das: Habilita em mbito geral e desabilita nas classes do sistema; 5. java -esa ou -enablesystemassertions: Habilita em todas as classes do sistema;
15
Uma idia legal que acontece com a linguagem Java e a qual eu achei muito interessante a compilao on-line, ou seja, voc manda seu cdigo fonte para uma pgina da Internet e l um sistema se encarrega de compilar o seu cdigo. Isso interessante se voc no tem espao em sua mquina para instalar um J2SE ou J2EE completo, ou ento quer fazer isso para seus estudos, pois voc poderia estar em um cyber caf ou lan house e nessas mquinas no ter nenhum ambiente Java. Hoje j temos uma boa medida de pginas com esse propsito, algumas so livres (uso gratuito), porm outras cobram um taxa para fornecimento do servio, basta efetuar uma pesquisa no google e encontrar vrias pginas com esse propsito. Com certeza quando da digitao dos nossos primeiros programas em Java, sempre erramos, porm, at pegarmos o jeito percebemos que o compilador Java mostra erros no momento da compilao, mas em uma outra hora o programa parece estar certo e mesmo assim aparecem erros. Como identificar esses erros? Bom, ns temos praticamente dois tipos de erros em Java: 1. Compiler Error: Esse um dos erros mais comuns, ou seja, no momento da compilao o compilador percebeu um erro no cdigo e no pode prosseguir com a compilao e retorna um erro. Exemplo: Mtodo no esttico querendo acessar um atributo com visibilidade ou acesso restrito a esse tipo de mtodo; 2. Run-Time Error: Esse tambm um erro comum. Aqui o compilador passa batido, mas quando da execuo do programa interrompido abruptamente e para. Exemplo: Uma diviso por 0 (zero). Bom, isso o bsico que deveremos saber por enquanto, claro que vamos nos aprofundar nesses conhecimentos no decorrer da leitura e exerccios do captulo. Agora j pode falar que voc est esperto na compilao de programas em Java, certo? Com um pouco mais de prtica poder melhorar ainda mais, por exemplo, mudar a cara de uma aplicao grfica passando argumentos via linha de comando. Assim uma aplicao grfica poder ter a cara do Windows, do Motif, do Java padro, do Mac OS etc. Quer saber como? Ainda no hora, mas d uma olhada no programa LookAndFeel.java que voc vai entender do que eu estou lhe falando, observe:
// Isso semelhante aos skins de alguns programas. import javax.swing.*; // Importa pacote grfico. import java.awt.*; public class LookAndFeel { public static void main (String[] args) { // Bloco para escolha do Look And Feel. Try { UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e){} // Modelo para CDE/Motif. UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); // Modelo para MS Windows. UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); // Modelo para Mac OS X. UIManager.setLookAndFeel("com.sun.java.swing.plaf.mac.MacLookAndFeel"); //...e para o sistema operacional que estiver rodando a aplicao... UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); */ JFrame janela = new JFrame (":: Usando skins em Java"); // Janela aplicao. janela.setSize(500,70); // A janela pode ser fechada pelo boto X. janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Cria um objeto container associado ao frame. Container c = janela.getContentPane(); c.setLayout(new FlowLayout()); // Adicionar botes no objeto container.
16
Para que voc possa mudar o skin (pele) de sua aplicao s substituir no bloco try por alguma linha do comentrio. Faa isso e acompanhe o resultado. A seguinte figura tem com o Look And Feel do Mac:
Para ter uma idia da importncia desses recursos, imagine que est usando o ambiente Windows e pode desenvolver uma aplicao com a cara do Gnome do sistema Linux conforme a figura seguinte.
O Borland Delphi tem uns componentes de terceiros que tambm fazem isso e um dos mais famosos o VCLSkin e para Java existem vrios, um mais lindo que o outro. Mas esses skins podem ser simples ou no de adicionarmos em nossos cdigos, cada um de um jeito. O ponto de partida para inmeros links www.javootoo.com l voc encontra at uma pr visualizao de cada um deles. Escolha o melhor.
17
Interessante saber que podemos tambm usar as tags da linguagem HTML para melhorar o visual da documentao, mas cuidado para no fugir do padro. H tambm tags especificas para o utilitrio javadoc que usado para gerar a documentao. Bom, se voc entendeu, analisaremos o programa AloMundoDoc.java que bem simples e servir para nos dar uma base de como gerar a documentao.
/** <b>AloMundo - Documentao</b> * @see java.lang.Object * @author Adilson Bonan */ // Cria classe pblica para o programa. public class AloMundoDoc { /** Texto que vai ser exibido. */ static String msg = "Criao de documentao para programa em Java."; /** Executa implicitamente o mtodo construtor. */ AloMundoDoc(){} /** Cria um mtodo pblico para mostrar a mensagem. <br> Esse mtodo recebe uma varivel de classe como parmetro. @param msg uma String a ser passada. */ public static void Alo(String msg) { System.out.println(msg); } /** Mtodo principal do programa.*/ public static void main(String[] args){ Alo(msg); } } // Fim do programa.
18
Agora para gerar a documentao correta usamos um utilitrio chamado javadoc com o parmetro -verbose para verificarmos por onde ela passou nos pacotes e -author para que conste na documentao o nome do autor do programa assim:
C:\estudos\oo\cap1>javadoc -verbose -author AloMundoDoc.java Loading source file AloMundoDoc.java... [parsing started AloMundoDoc.java] [parsing completed 120ms] Constructing Javadoc information... [search path for source files: .,C:\Arquivos de programas\Java\jdk1.6.0_10] [search path for class files: C:\Arquivos de programas\Java\jdk1.6.0_10\jre\lib\ resources.jar,C:\Arquivos de programas\Java\jdk1.6.0_10\jre\lib\rt.jar,C:\Arquiv os de programas\Java\jdk1.6.0_10\jre\lib\sunrsasign.jar,C:\Arquivos de programas ... Standard Doclet version 1.6.0_10-rc Building tree for all the packages and classes... Generating AloMundoDoc.html... [loading java\io\Serializable.class(java\io:Serializable.class)] Generating package-frame.html... Generating package-summary.html... Generating package-tree.html... Generating constant-values.html... Building index for all the packages and classes... Generating overview-tree.html... Generating index-all.html... Generating deprecated-list.html... Building index for all classes... Generating allclasses-frame.html... Generating allclasses-noframe.html... Generating index.html... Generating help-doc.html... Generating stylesheet.css... [done in 3054 ms]
Percebemos aqui que foi criado uma srie de arquivos HTML e o que nos interessa o index.html que pode ser aberto em qualquer navegador.
Se for necessrio criar a documentao de uma classe qualquer em outro diretrio usamos javadoc MinhaClasse.java -d diretrio-destino. Quando a opo -d no usada, os arquivos de documentao so criados no diretrio corrente. Para criar a documentao para vrias classes basta usar o coringa assim javadoc *.java. Para produzir uma documentao que contm caracteres acentuados devemos usar a opo -charset, assim javadoc -charset iso-8859-1 MinhaClasse.java. Por padro, o utilitrio javadoc coloca apenas a documentao associada aos mtodos pblicos. Para incluir os mtodos privados devemos usar a opo -private.
19
DICA: O primeiro argumento args[0], o segundo args[1] e o ensimo argumento args[n], ou seja, a linha de comando um array de strings e se for usar nmeros deve-se usar mtodos apropriados de converso, lembre-se disso.
A checagem do nmero de parmetros fornecidos constitui boa programao e verificar esse valor no incio da execuo e emitir mensagem de erro caso incorreto uma das preocupaes do seu programa. Para passarmos parmetros para nosso programa simples, apenas seguimos a seguinte idia:
# java programa parametro1 parametro2 ... parametroN
Observaes importantes sobre parmetros: Como passar e ler um parmetro, como passar e ler N parmetros; Como saber o total de parmetros, como retornar tamanhos de parmetros; Como tratar a passagem de parmetros; Como criar blocos de excees para parmetros. Se dominarmos essa parte, j teremos feito muita coisa, pois isso vai ajudar muito quando estivermos aprendendo algoritmos onde precisaremos passar informaes via linha de comando. Agora vejamos o programa Args0.java que muito simples, pois ele no faz controle de quantos parmetros foram passados e no usa controle de excees. No se esquea que para compilar use o comando javac Args0.java e para executar use java Args0.
public class Args0 { public static void main(String[] args) { System.out.println("Voce digitou: "+args[0]); } }// Fim do programa.
Observe a sada desse programa se no passarmos nenhum parmetro. Ser gerado um erro ArrayIndexOutOfBoundsException e isso por enquanto quer dizer que devemos tratar essa passagem de parmetro ou com uma declarao if ou com blocos try/catch. Assim poderemos checar previamente se o usurio forneceu ou no um parmetro.
# java Args0 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Args0.main(Args0.java:8)
Agora veja a sada com dois parmetros fornecidos, repare que apenas o primeiro foi impresso, pois o args[0] imprime somente o primeiro. Viu como simples.
# java Args0 Meu Argumento Voce digitou: Meu
20