Escolar Documentos
Profissional Documentos
Cultura Documentos
tecnologia Java
Helder da Rocha
www.argonavis.com.br
Introduo
Introduo prtica
A evoluo da linguagem controlada pelo Java Community Process (www.jcp.org) formado pela Sun e usurios Java Ambientes de execuo e desenvolvimento so fornecidos por fabricantes de hardware e software (MacOS, Linux, etc.)
3
Linguagem Java
Linguagem de programao orientada a objetos
Familiar (sintaxe parecida com C) Simples e robusta (minimiza bugs, aumenta produtividade) Suporte nativo a threads (+ simples, maior portabilidade) Dinmica (mdulos, acoplamento em tempo de execuo) Com coleta de lixo (menos bugs, mais produtividade) Independente de plataforma Segura (vrios mecanismos para controlar segurana) Cdigo intermedirio de mquina virtual interpretado (compilao rpida - + produtividade no desenvolvimento) Sintaxe uniforme, rigorosa quanto a tipos (cdigo mais simples, menos diferenas em funcionalidades iguais)
4
Produtos e APIs
Java possui uma coleo de APIs (bibliotecas) padro que podem ser usadas para construir aplicaes
Organizadas em pacotes (java.*, javax.* e extenses) Usadas pelos ambientes de execuo (JRE) e de desenvolvimento (SDK)
HelloWorld.java
compilao (javac)
HelloWorld.class
F4 D9 00 03 0A B2 FE FF FF 09 02 01 01 2E 2F 30 62 84 3D 29 3A C1
java
Class Loader
Classe remota? no
sim
Bytecode Verifier
Tradutor JIT: Just-In-Time Compiler. Gera cdigo nativo a partir de bytecodes para maior performance
Tempo de execuo
Interpretador HARDWARE Tradutor JIT
cdigo nativo
1. Carrega primeiro as classes nativas do JRE (APIs) 2. Depois carrega extenses do JRE: JARs em $JAVA_HOME/jre/lib/ext e classes em $JAVA_HOME/jre/lib/classes 3. Carrega classes do sistema local (a ordem dos caminhos no CLASSPATH define a precedncia) 4. Por ltimo, carrega possveis classes remotas
CLASSPATH: varivel de ambiente local que contm todos os caminhos locais onde o Class Loader pode localizar classes
A CLASSPATH lida depois, logo, suas classes nunca substituem as classes do JRE (no possvel tirar classes JRE do CLASSPATH) Classes remotas so mantidas em rea sujeita verificao CLASSPATH pode ser redefinida atravs de parmetros durante a execuo do comando java
Bytecode Verifier
Etapa que antecede a execuo do cdigo em classes carregadas atravs da rede
Class Loader distingue classes locais (seguras) de classes remotas (potencialmente inseguras)
Verificao garante
Aderncia ao formato de arquivo especificado [JVMS] No-violao de polticas de acesso estabelecidas pela aplicao No-violao da integridade do sistema Ausncia de estouros de pilha Tipos de parmetros corretamente especificados e ausncia de converses ilegais de tipos
10
Coleta de lixo
Memria alocada em Java no liberada pelo programador
Ou seja, objetos criados no so destrudos pelo programador
heap
m n p
"A" "B"
GC
objetos
11
heap
m n p
O J2SDK
O J2SDK (Java 2 System Development Kit) o ambiente padro distribudo pela Sun para desenvolvimento de aplicaes Java O J2SDK consiste de
JRE (Java Runtime Environment) - tambm distribudo separadamente: ambiente para execuo de aplicaes Ferramentas para desenvolvimento: compilador, debugger, gerador de documentao, empacotador JAR, etc. Cdigo-fonte das classes da API Demonstraes de uso das APIs, principalmente Applets, interface grfica com Swing e recursos de multimdia
Como compilar
Use o java compiler (linha de comando)
javac javac javac javac NomeDaClasse.java -d ../destino Um.java Dois.java -d ../destino *.java -classpath c:\fontes -d ../destino *.java
diretrio onde sero armazenadas as classes (arquivos .class) geradas -classpath diretrios (separados por ; ou :) onde esto as classes requeridas pela aplicao -sourcepath diretrios onde esto as fontes Para conhecer outras opes do compilador, digite javac
sem argumentos Compiladores de outros fabricantes (como o Jikes, da IBM) tambm podem ser usados no lugar do javac
15
Como executar
Use o interpretador java (faz parte do JRE)*
java java java java java java java NomeDaClasse pacote.subpacote.NomeDaClasse -classpath c:\classes;c:\bin;. pacote.Classe -cp c:\classes;c:\bin;. pacote.Classe -cp %CLASSPATH%;c:\mais pacote.Classe -cp biblioteca.jar pacote.Classe -jar executavel.jar
javaw -jar executavel.jar javaw -cp aplicacao.jar;gui.jar principal.Inicio -cp ou -classpath classpath novo (sobrepe v. ambiente) -jar executa aplicao executvel guardada em JAR -Dpropriedade=valor define propriedade do sistema (JVM)
16
Disassembler: javap
Permite ler a interface pblica de classes
17
18
Compile cdigo-fonte no CD
cap01/src/
Todos os assuntos apresentados nesta seo sero explorados em detalhes em aulas posteriores
Conceitos como classe, objeto, pacote Representao UML Sintaxe, classes da API, etc. 19
1. Aplicao HelloWorld
Esta mini-aplicao em Java imprime um texto na tela quando executada via linha de comando
/** Aplicao Hello World */ public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world!"); } }
HelloWorld.java
Exerccio: Use-a para testar seu ambiente e familiarizar-se com o desenvolvimento Java
Digite-a no seu editor de textos Tente compil-la Corrija eventuais erros Execute a aplicao
20
Anatomia
Comentrio de bloco Nome da classe
/** Aplicao Hello World */ public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world!"); } }
Nome do mtodo
Declarao de argumento
varivel local: args tipo: String[]
Ponto-e-vrgula obrigatrio no final de toda instruo
Chamada de mtodo println() via objeto out accessvel atravs da classe System
21
atributo mtodo
classes podem acess-los, se declarados como "public", usando o operador ponto "."
Representao em UML
Mensagem
+msg: String +lerNome(): String
Esta a interface pblica da classe. s isto que interessa a quem vai us-la. Os detalhes (cdigo) esto encapsulados.
22
public class HelloJava { private static Mensagem nome; public static void main(String[] args) { nome = new Mensagem(); // cria objeto
if (args.length > 0) { // h args de linha de comando? nome.msg = args[0]; // se houver, copie para msg } else { nome.msg = "Usuario"; // copie palavra "Usuario" } String texto = nome.lerNome(); // chama lerNome() System.out.println("Bem-vindo ao mundo Java, "+texto+"!"); Operador de concatenao
Veja demonstrao
23
Detalhes
Declarao do mtodo main()
modificadores tipo de dados retornado tipo de dados aceito como argumento Dependncia entre as duas classes
(HelloJava tem referncia para Mensagem)
nome
HelloJava
+main(args: String[]) usa
Mensagem
+msg: String +lerNome(): String
args[0]
args[1]
args[2]
24
public class MensagemGUI { public MensagemGUI(String texto) { JFrame janela = new JFrame("Janela"); Container areaUtil = janela.getContentPane(); Construtor cria areaUtil.add( new JLabel(texto) ); janela contendo janela.pack(); texto recebido janela.setVisible(true); } public class HelloJavaGUI { } reuso! private static Mensagem nome; public static void main(String[] args) {
25
HelloJavaGUI
+main(args: String[])
Reuso de componentes das APIs Java permite a criao de aplicaes GUI com poucas linhas de cdigo!
Mensagem
+msg: String +lerNome(): String
26
27
4. Primeiro applet
Componentes grficos que podem ser executados no browser Para criar e usar um applet preciso
criar uma classe que herde da classe Applet ou JApplet (API Java) criar uma pgina HTML que carregue o applet
Herana!
public void init() { nome = new Mensagem(); nome.msg = this.getParameter("texto"); // parmetro HTML String texto = nome.lerNome(); Container areaUtil = this.getContentPane(); JLabel label = new JLabel("Bem-vindo ao mundo Java, " +texto+ "!"); areaUtil.add(label); }
28
Pgina HTML
O elemento <applet> usado para incluir applets antigos (Java 1.0 e 1.1) em pginas HTML ou servir de template para a gerao de cdigo HTML 4.0 A seguinte pgina carrega o applet da pgina anterior
<html> <head> <title>Sem Ttulo</title> </head> <body> <h1>Um Applet</h1> <applet code="HelloJavaApplet.class" height="50" width="400"> <param name="texto" value="Helder"> </applet> </body> </html>
29
Detalhes
...
Para rodar o applet abra a pgina com seu browser ou use o appletviewer
> appletviewer pagina.html
javax.swing.JApplet
+init() +getParameter(String):String
Relacionamentos
Mensagem
+msg: String
30
Resumo
Foram apresentados quatro exemplos de pequenas aplicaes Java, demonstrando
Sintaxe elementar, compilao e execuo Classe como unidade de cdigo para execuo Classe como definio de tipo de dados Reuso de objetos atravs de associao (uso da classe Mensagem em trs aplicaes diferentes) e herana (infraestrutura de Applets reaproveitada) Aplicaes grficas Componentes de um framework (Applets) que executam em um container padro (dentro do browser)
31
32
Erros (1)
Durante o desenvolvimento, erros podem ocorrer em dois domnios: tempo de compilao e tempo de execuo Erros ocorridos durante a fase de compilao ocorrem quando se executa o javac, e so fceis de corrigir. H dois tipos:
Erros de processamento do arquivo (parsing): ponto-e-vrgula faltando, parnteses, aspas, chaves ou colchetes descasados. Identifica apenas o arquivo e a linha onde o erro pode ter iniciado. Um erro causa vrios outros e nem sempre a mensagem precisa. Erros de compilao do cdigo, realizada depois do parsing: alm da linha e do arquivo, identificam a classe e mtodo. Geralmente as mensagens so bastante elucidativas.
33
Class Hello is public, should be declared in a file named Hello.java: nome do arquivo tem que ser igual ao nome da classe pblica*: Nome tem que ser Hello.java, literalmente. O nome hello.java causa este erro porque o "h" est minsculo. Para consertar altere o nome da classe no cdigo ou no nome do arquivo para que sejam iguais.
* Se classe no for pblica, essa restrio no vale
34
Apenas o primeiro erro verdadeiro. Ignore os outros. Eles foram causados pelo primeiro.
35
Compilador no sabe quem msg: no foi declarada nenhuma varivel com esse nome.
5: public class mensagemerro { 6: /** Atributo de dados msg publicamente visvel */ 7: public string nome = ""; 8: 9: /** Mtodo lerNome() devolve objeto do tipo String */ 10: public string lerNome() { 11: string nomeEmMaiusculas = msg.toUpperCase(); 12: return nomeEmMaiusculas; 13: } 14:} 36
37
Erros (II)
Depois que o cdigo compila com sucesso, os bytecodes (arquivos .class) so gerados e podem ser usados em um processo de execuo Erros ocorridos durante a fase de execuo (runtime) ocorrem quando se executa o interpretador java, e so muito mais difceis de localizar e consertar. A mensagem impressa geralmente um "stack trace" e mostra todo o "caminho" percorrido pelo erro
Relaciona mtodos e classes da sua aplicao e classes da API Java que sua aplicao usa (direta ou indiretamente) Nem sempre mostra a linha de cdigo onde o erro comeou O incio do trace geralmente contm informaes mais teis
38
Exception in thread "main": NoSuchMethodError: main: o sistema tentou chamar main() mas no o encontrou.
A classe no tem mtodo main() (talvez no seja executvel) Confira assinatura do main: public static void main(String[])
39
1. Na linha 13, est havendo uma referncia a um ndice de um vetor. Esse ndice tenta acessar uma posio inexistente no vetor. Neste caso especfico, o erro pode ser evitado passando-se um parmetro aps o nome da classe na linha de comando, porm a aplicao pouco robusta pois no prev que o erro possa acontecer.
2. A classe no foi encontrada. Pode ser que ela no esteja no CLASSPATH. Neste caso especfico o interpretador nos sugere que o nome pode est errado. Para consertar, basta chamar a classe pelo nome correto: Hello. O Stack Trace mostra que esse erro teve origem em outras classes, mas foi nossa classe que, na verdade, o provocou. 40
Erro comeou na linha 7 (mtodo main) de HelloJavaErro mas teve origem na linha 12 do mtodo lerNome de Mensagem
41
Devemos criar aplicaes robustas que prevejam a possibilidade de erros de tempo de execuo devido a fatores externos e ajam da melhor forma possvel Devemos achar erros de lgica e evitar que sobrevivam alm da fase de desenvolvimento. Para evit-los:
Escreva cdigo claro, fcil de entender, organizado, pequeno Use endentao, siga convenes, nomes significativos, documente Escreva testes para todo cdigo e rode-os com freqncia
42
Exerccios
1. Compile e execute os exemplos localizados no subdiretrio cap01/ 2. H vrios arquivos no diretrio cap01/exercicios/erro. Todos apresentam erros de compilao. Corrija os erros. 3. Execute os arquivos executveis do diretrio errobin (quais so?). Alguns iro provocar erros de tempo de execuo. Corrija-os ou descubra como executar a aplicao sem que eles ocorram.
43
argonavis.com.br
44