Introdução a Java Mário Meireles Teixeira UFMA – DEINF Tecnologia Java z z Java é tanto uma linguagem de programação de alto nível quanto uma plataforma de desenvolvimento de aplicações Java como linguagem de programação z z z desenvolvimento de aplicações locais, centralizadas e distribuídas desenvolvimento de aplicações cliente/servidor que executam em browsers Java como ambiente de execução z ambiente neutro (JRE – Java Runtime Environment) para diferentes plataformas: SOs, browsers, celulares, palmtops, eletrodomésticos... Introdução a Java 2 1 Linguagem Java z Linguagem de programação orientada a objetos z z z z z z z z z Familiar (sintaxe parecida com C) Simples e robusta (minimiza bugs, aumenta produtividade) Suporte nativo a threads (+ simples, maior portabilidade) Dinâmica (módulos, acoplamento em tempo de execução) Com coleta de lixo (menos bugs, mais produtividade) Independente de plataforma Segura (vários mecanismos para controlar segurança) Código intermediário de máquina virtual interpretado (compilação rápida, execução + “lenta”, + produtividade no desenvolvimento) Sintaxe uniforme, rigorosa quanto a tipos (código mais consistente) Introdução a Java 3 Linguagens OO: genealogia ALGOL 1960 SIMULA 1967 Pascal 1973 SmallTalk 1980 ADA 1983 Introdução a Java C 1972 C++ C++ 1985 1985 ADA ADA 1995 1995 Java Java 1995 1995 4 2 Desenvolvimento de programas código fonte processador da linguagem código objeto código executável código objeto Introdução a Java 5 Implementação de LP z Compilação z z z z Interpretação pura z z z geração de código executável dependente da plataforma de execução tradução lenta X execução rápida sem geração de código execução lenta, independente de plataforma Híbrida z z z geração de código intermediário independente de plataforma de execução tradução rápida X execução não muito rápida Introdução a Java 6 3 Ambiente de compilação e execução • Compilação: Programa Java é compilado para um código intermediário conhecido como bytecode • Execução: Bytecodes são interpretados pela JVM (Java Virtual Machine) executada no ambiente hospedeiro – arquitetura neutra INTERNET fonte Compilador JAVA Introdução a Java bytecode Interpretador JAVA Browser {HTML} interpretador JAVA plataforma local plataforma remota 7 Compilação x Interpretação z Problema: z z z Para ter flexibilidade e segurança, abre-se mão do tempo de execução Um programa Java típico roda 10 vezes mais lento que um programa equivalente em linguagem nativa Solução: JIT (Just-in-time compiling) z z z Compiladores JIT convertem programas Java para linguagem de máquina nativa assim que os mesmos são lidos Penalidade: a leitura dos programas se torna mais lenta Vantagem: execuções subseqüentes são mais rápidas Introdução a Java 8 4 Ambientes de execução e desenvolvimento z Java 2 System Development Kit (J2SDK) z z z Java Runtime Environment (JRE) z z z Coleção de ferramentas de linha de comando para, entre outras tarefas, compilar, executar e depurar aplicações Java Para habilitar o ambiente via linha de comando é preciso colocar o caminho $JAVA_HOME/bin no PATH do sistema Ambiente mínimo para executar aplicações Java Faz parte do J2SDK e das principais distribuições Linux, MacOS X, AIX, Solaris, Windows 98/ME/2000 (exceto XP) Download: http://java.sun.com/javase/downloads/index.jsp Introdução a Java 9 Interfaces de Programação de Aplicações – APIs z Java possui uma coleção de APIs (bibliotecas) padrão que podem ser usadas para construir aplicações: z z z Organizadas em pacotes (java.*, javax.* e extensões) Usadas pelos ambientes de execução (JRE) e de desenvolvimento (SDK) As principais APIs são distribuídas juntamente com os produtos para desenvolvimento de aplicações: z z z Java 2 Standard Edition (J2SE): ferramentas e APIs essenciais para qualquer aplicação Java (inclusive gráficas) Java 2 Enterprise Edition (J2EE): ferramentas e APIs para o desenvolvimento de aplicações distribuídas Java 2 Micro Edition (J2ME): ferramentas e APIs para o desenvolvimento de aplicações para aparelhos portáteis Introdução a Java 10 5 Ambientes Integrados de Desenvolvimento – IDEs z Existem diversos IDEs construídos a partir das ferramentas básicas de desenvolvimento: z z z ambientes baseados em janelas editores, visualizadores de classes, prototipação ... Exemplos: Visual J++ (Microsoft), JBuilder (Borland), Visual Café (Symantec), JCreator, Eclipse, BlueJ, jGRASP... Introdução a Java 11 Programa Java: Classe • Uma classe é um arquivo fonte (texto) CLASSE Nome1 CLASSE Nome mesmo Nome Nome.java Um arquivo pode conter várias classes Introdução a Java CLASSE Nome1 CLASSE Nome2 Nome1.java 12 6 Arquivos fonte e executáveis Arquivo fonte : Escola.java Arquivos executáveis: class Escola.class bytecodes public class Escola {{ Aluno.class class Aluno { bytecodes Introdução a Java 13 Convenção para Nomes z Java, como C/C++, distingue entre letras maiúsculas e minúsculas z Nomes de classes iniciam com maiúscula z Nomes de variáveis iniciam com minúsculas z Nomes de métodos são verbos que iniciam com minúscula e depois usam maiúsculas z Representação: Unicode (16 bits - 65.536 caracteres) z z z z Exemplo: escola é diferente de Escola Exemplo: class Bem-vindo Exemplo: int peso; Exemplo: alteraPeso Introdução a Java 14 7 Compilação e Execução: SDK – linha de comando z z z Compilação: javac A partir do diretório local: javac nome.java Vai produzir: z z z arquivos .class separados para cada classe no arquivo .java coloca arquivos no diretório corrente z z sendo nome = nome do arquivo .class que contém o main z z Lembrete: Autoexec.bat SET PATH=C:\jdk1.4\bin Execução: java A partir do diretório local: java nome z Executa a partir de main() ou com argumentos: java nome arg1,arg2, ... Lembrete: Autoexec.bat SET CLASSPATH= C:\jdk1.4\lib Introdução a Java 15 Execução de programas Java HelloWorld.java javac Introdução a Java 16 8 Verificação de bytecode z Etapa que antecede a execução do código em classes carregadas através da rede z z Class Loader distingue classes locais (seguras) de classes remotas (potencialmente inseguras) Verificação garante: z z z z z z Aderência à especificação da JVM Não-violação de políticas de acesso estabelecidas pela aplicação Não-violação da integridade do sistema Ausência de estouros de pilha Tipos de parâmetros corretamente especificados Ausência de conversões ilegais de tipos Introdução a Java 17 Processo de Execução Editor Introdução a Java Compilador Carregador de classes disco Programa é criado em um editor e armazenado no disco disco Compilador gera os bytecodes e os armazena no disco ________ ________ ________ ______ O carregador de classes – Class Loader – coloca os bytecodes na memória memória disco Verificador de bytecodes ________ ________ ________ ______ O verificador de bytecodes – Bytecodes Verifier – confirma se todos os bytecodes estão corretos e não violam as restrições de segurança da linguagem Java memória Interpretador ________ ________ ________ ______ memória O interpretador lê os bytecodes e executa o programa 18 9 Programas JAVA z Aplicações (puras) z z z z são programas carregados e executados localmente pelo interpretador Java possuem acesso a todos os recursos do ambiente local: diretórios, arquivos sempre contêm um método principal (main), de onde se inicia a execução do programa podem fazer chamadas a programas em código nativo (outras linguagens, como C, C++) Introdução a Java 19 Programas Cliente/Servidor z Applets: cliente z z z z são programas inseridos em páginas HTML e executados pelo browser (interpretador Java) programas (classes) podem ser carregados remotamente restrições de segurança: não podem acessar recursos locais, só podem comunicar-se com o servidor de onde foram “baixados” Servlets: servidor z z executados sob o controle do servidor classe carregada dinamicamente por requisição de um cliente Introdução a Java 20 10 Applets Java X JavaScript z z z z z Ambos são códigos executáveis inseridos em páginas HTML Código Java: classes compiladas e carregadas remotamente Código JavaScript: instruções fisicamente dispersas ao longo da página HTML Java é uma LP de uso geral, orientada a objetos: classes, objetos, encapsulamento, herança e polimorfismo JavaScript: linguagem script sem classes, sem herança e sem polimorfismo Introdução a Java 21 Primeiros passos 11 Classe Java: apenas o método main() Atenção a maiúsculas e minúsculas! class Bemvindo { public static void main (String[] args) { System.out.println(“Bem-vindo!”); } } Método main(): onde se inicia a execução Introdução a Java 23 Exemplo de chamada de métodos System.out.println (“Bem-vindo!”); objeto método System.out.print objeto Introdução a Java método parâmetro (“Bem-vindo!”); parâmetro 24 12 Chamada parametrizada class Bemvindo { public static void main (String[] args) { System.out.println(“Bem-vindo ” + args[0]); } } Método main(): aceita argumentos para execução Linha de comando: java Bemvindo Pedro Introdução a Java 25 Classe Java: dois métodos class Bemvindo2 { static void imprime() { System.out.println(“Bem-vindo!”); } public static void main (String[] args) { imprime(); } } método static: método de classe, não aplicável sobre objetos Introdução a Java 26 13 Classe Java: instanciando um objeto class Bemvindo3 { void imprime(){ System.out.println(“Bem-vindo!”); } public static void main (String[] args) { Bemvindo3 obj = new Bemvindo3(); // imprime(); // erro! obj.imprime(); }} método de instância, somente aplicável sobre objetos Introdução a Java 27 Duas classes: composição class Bemvindo3{ void imprime(){ System.out.println("Bem-vindo!"); } public static void main(String[] args){ Bemvindo3 obj=new Bemvindo3(); Welcome outro=new Welcome(); obj.imprime(); outro.imprime(); class Bemvindo3{ } // main imprime() } // Bemvindo3 main(...) } Introdução a Java class Welcome{ void imprime(){ System.out.println("Welcome!"); }} // Welcome class Welcome{ imprime() } 28 14 Streams de entrada/saída z z z Em um programa, dados são lidos/gravados através de streams (fluxos) de E/S Fontes e destinos: console, arquivos, rede... Um programa pode gerenciar diversos streams Introdução a Java 29 Chamada Parametrizada X Entrada/Saída via Console z Chamada parametrizada: z z z programa inicia com valores armazenados em um array de Strings não é uma forma usual de entrada de dados Ao iniciar a execução de um programa, são criados automaticamente os seguintes streams: z z z z System.in - standard input (teclado) System.out - standard output (vídeo) System.err - standard error (vídeo) Podem ser redirecionados para disco, por exemplo Introdução a Java 30 15 Entrada via Console z Classe BufferedReader z z z usada para leitura de um stream de caracteres para um buffer definida no pacote java.io Método readLine() z z z definido em BufferedReader faz a leitura de uma linha de texto até um caracter ‘\n’ causa uma exceção se ocorrer um erro enquanto lê os dados da entrada Introdução a Java 31 Entendendo Entrada via Console String msg = stdin.readLine(); 72 101 108 108 111 13 InputStream leitura de bytes 72 101 108 108 111 13 InputStreamReader buffer de caracteres H e l msg l o BufferedReader Introdução a Java \n Hello String 32 16 Entendendo Saída via Console System.out.println(“Linha informada = ”+ msg); L i n h a i n f o r m a d a = H e l l o PrintStream vídeo Introdução a Java 33 Entrada via Console: String import java.io.*; class Leitura { public static void main(String[] args) throws IOException{ BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); System.out.println(“Entre uma linha:”); String msg = stdin.readLine(); System.out.println(“Linha informada = ”+ msg); } } Introdução a Java 34 17 Entrada via Console: int import java.io.*; class Leitura { public static void main(String[] args) throws IOException{ BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); System.out.println(“Entre um número:”); int i = Integer.parseInt(stdin.readLine()); System.out.println(“Número = ”+ i); } } Introdução a Java 35 Usando Scanner() e printf() import java.io.*; import java.util.Scanner; public class LeScanner { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Digite seu nome: "); String nome = input.next(); System.out.print("Digite sua idade: "); int idade = input.nextInt(); System.out.printf("%s tem %d anos\n", nome, idade); }} Introdução a Java 36 18