Introdução a Java Alcides Calsavara características orientada a objetos interpretada neutra com relação a arquitetura (portável) dinâmica distribuída simples robusta segura alto desempenho multithreaded orientada a objetos classe: dados e métodos tudo é objeto, exceto: • numérico primitivo • caracter • booleano OBS: uma string é um objeto! unidade básica de compilação: classe orientada a objetos (cont.) pacote: coleção de classes • java.awt : classes para criação de componentes de interface gráfica • java.io : classes para input e output • java.net : classes que suportam funcionalidades de rede • java.lang : raiz da hierarquia de classes Java interpretada compilador Java gera byte-codes para a Java Virtual Machine (JVM), ao invés de código nativo de máquina um programa Java é executado através de um interpretador de byte-code inclusão dinâmica (sob demanda) de novas classes, ao invés de ligação estática neutra com relação a arquitetura (portável) byte-code independente de arquitetura um programa Java pode ser executado em qualquer arquitetura (Windows, Unix, Mac...) que suporte a JVM (interpretador e ambiente de execução) importante para aplicações distribuídas, especialmente em redes heterogêneas evita o desenvolvimento de versões do mesmo software específicas para cada arquitetura “Write Once, Run Anywhere” (SUN) dinâmica qualquer classe Java pode ser carregada por um interpretador em execução, a qualquer momento bibliotecas de código nativo também podem ser carregadas dinamicamente distribuída suporte de alto nível para operações de rede (ex, class URL permite a leitura de um arquivo remoto como se fosse local) devido a carga dinâmica de classes, um interpretador Java pode obter um código executável através da rede e executá-lo localmente simples pequeno número de construções de linguagem familiar para maioria dos programadores, pois é similar a C++ eliminado de C++ : • goto • header files • struct e union • sobrecarga de operador • herança múltipla • ponteiros robusta fortemente tipada: compilador faz verificações para evitar potenciais erros a inexistência de ponteiros evita muitos erros acesso a vetor e string é verificado em tempo de execução cast de objeto também é verificado em tempo de execução garbage collection automática evita erros de uso de memória segura a inexistência de ponteiros evita o acesso direto a memória processo de verificação de byte-code: garante que o código não causa overflow ou underflow da pilha de execução, por exemplo sandbox model : um programa suspeito executa com sérias restrições (ex, sem direito de acesso a arquivos) assinatura digital: se a origem de um programa é alguém confiável (reconhecido pela assinatura), este não executa em um sandbox alto desempenho um programa executa 10 vezes mais rápido em C que em Java 1.1 porém aplicações baseadas em GUI e rede são normalmente ociosas, esperando que o usuário cause algum evento ou esperando dados da rede interpretador “just in time”: traduz byte-code para código nativo em tempo de execução byte-code pode interoperar com código nativo Java está entre linguagens como Tcl e Unix Shell, que são boas para prototipagem e portabilidade, mas lentas, e linguagens como C e C++, que são eficientes, mas de baixa confiabilidade e portabilidade multithreaded uma aplicação pode ter diversas atividades “simultaneamente” (ex, um Web browser pode estar emitindo o som de um clip, enquanto fazendo scrolling de uma página e ainda carregando uma imagem em background ) importante para aplicações gráficas aplicação simples public class HelloWorld { public static void main(String[] args) { System.out.println (“Hello World!”); } } aplicação simples (cont.) o programa deve ser salvo em um arquivo com nome idêntico ao da classe pública e com extensão .java % javac HelloWorld.java esse comando compila o programa, gerando um arquivo com nome idêntico e extensão .class % java HelloWorld esse comando executa o programa (ambiente SUN JDK) applet simples import java.applet.*; import java.awt.*; public class helloworld extends Applet { public void paint(Graphics g) { g.drawString ("Hello World!", 25, 50); } } applet simples (cont.) <html> <head> <title>helworld</title> </head> <body> <applet code=helloworld.class width=320 height=240 > </applet> </body> </html>