Estrutura de uma aplicação uEm Java: ðDesenvolver uma aplicação consiste em escrever classes de objetos ðAs classes podem representar objetos reais do domínio da aplicação ou estruturas abstratas Java: Sintaxe Estrutura de uma aplicação Tipos, variáveis, operadores e comandos Métodos e classes Arranjos, Strings e outras classes slides: jfsintaxe ðUma aplicação em execução consiste num conjunto de objetos, criados a partir das classes, trocando mensagens entre si ðSaber como fatorar a solução do problema em classes requer experiência e prática Frederico Costa Guedes Pereira © 2000 Fred (C) 2003 Java: Sintaxe 2 Estrutura de uma aplicação Estrutura de uma aplicação uUma classe em Java é uma coleção identificada de uA classe é a menor unidade de código Java à não é variáveis (estado) e métodos (comportamento) que operam sobre essas variáveis. possível escrever um programa Java sem construir uma classe! ðUnidade fundamental de programação em Java! ðO compilador não reconhece fragmentos de código menores que uma classe uUma aplicação Java pode possuir dezenas, ðA classe também é a unidade básica de execução de Java centenas ou até milhares de classes uA aplicação inicia a execução a partir de um método especial chamado main existente numa das classes (classe de aplicação) Fred (C) 2003 Java: Sintaxe 3 Fred (C) 2003 Java: Sintaxe 4 Estrutura de uma aplicação Estrutura de uma aplicação u Estrutura de uma classe Java: uClasse que define um cliente num sistema de loja: public class Cliente { private String nome; private String endereco; private char sexo; estado class NomeDaClasse { declarações de variáveis membro; comportamento } Java: Sintaxe public Cliente(String nome, String endereco) { this.nome = nome; this.endereco = endereco; } Operadores public void mudeNome(String novoNome) { this.nome = novoNome; } Fred (C) 2003 Java: Sintaxe Métodos declarações de métodos() { declarações de variáveis locais; comandos; } Fred (C) 2003 Variáveis membro 5 6 1 Estrutura de uma aplicação Estrutura de uma aplicação uContinuação da classe Cliente... uA classe Cliente é salva no arquivo Cliente.java public String informeNome(){ return nome; } uA classe é compilada para produzir o arquivo de bytecodes chamado Cliente.class Métodos ðC:\ javac Cliente. java } public String imprima() { String c = "Cliente "; c += "\n - Nome: " + nome; c += "\n - Endereco: " + endereco; c += "\n - Sexo: " + sexo; System.out.println(c); Variável } local a um método Fred (C) 2003 Java: Sintaxe (à Cliente.class) uEm geral, cada arquivo .java contém a definição de uma classe pública uComo podemos usar a classe Cliente (isto é, onde podemos criar objetos desta classe)? 7 Fred (C) 2003 Java: Sintaxe Estrutura de uma aplicação Estrutura de uma aplicação uClasse de aplicação: uA classe AplicacaoCliente é salva no arquivo variáveis locais ao método main 8 AplicacaoCliente.java uA classe é compilada para produzir o arquivo de bytecodes chamado AplicacaoCliente.class public class AplicacaoCliente { public static void main (String[] args){ Cliente a, b; ðC:\ javac AplicacaoCliente.java a = new Cliente("Bart", "Springfield"); b = new Cliente("Cartman", "South Park"); System.out.println("Nome do cliente a ="+ a.informeNome()); b.imprima(); uA classe é executada com o interpretador Java: ðC:\ java AplicacaoCliente } } Nome da classe, sem a extensão .class! Fred (C) 2003 Java: Sintaxe 9 Fred (C) 2003 Java: Sintaxe Estrutura de uma aplicação Estrutura de uma aplicação uExemplo de execução em linha de comando: uExemplo de execução no BlueJ: Y:\projetos> javac AplicacaoCliente.java Y:\projetos> java AplicacaoCliente Nome do cliente a =Bart Cliente - Nome: Cartman - Endereço: South Park -Sexo: • Y:\projetos> _ Fred (C) 2003 Java: Sintaxe 10 Terminal 11 Fred (C) 2003 Java: Sintaxe 12 2 Estrutura de uma aplicação Estrutura de uma aplicação uClasses de aplicação: uElementos da linguagem, em ordem crescente de complexidade: ðSão aquelas por onde a execução do sistema inicia ðPossuem um método main com a seguinte assinatura: COMPLEXIDADE public static void main(String[] args) ðO interpretador Java só aceita executar classes que possuam o método main definido conforme acima uQualquer classe pode possuir um método main e ser classe de aplicação (embora não seja usual) Java: Sintaxe ðOperadores e expressões ðComandos ðMétodos ðClasses ðPacotes ðEm geral, o main destas classes serve para testes Fred (C) 2003 ðCaracteres ðTipos de dados, valores literais, identificadores 13 Fred (C) 2003 Java: Sintaxe Caracteres Comentários uUso do padrão Unicode: conjunto de caracteres de uTrês tipos de comentários: 16 bits ð// comentário de linha ð65536 caracteres distintos! ð/* uCaracteres Unicode são gravados em arquivos usando um formato chamado UTF-8 ð/** Classe <b>Cliente</b> Comentário de bloco para o <i>javadoc </i> @author Frederico Costa */ \uxxxx ð\u3c00 = π Java: Sintaxe comentário de bloco */ uInserção de caracteres Unicode no código fonte: Fred (C) 2003 14 15 Fred (C) 2003 Java: Sintaxe Identificadores Identificadores (estilo a ser adotado) uIdentificadores nomeiam variáveis (membro, locais, uClasses: parâmetros, etc), métodos e classes uApenas os caracteres especiais "_" e "$" são permitidos, além de letras e números unicode uDevem iniciar por uma letra ou pelos símbolos _ ou $ (evite-os, pois o compilador os utiliza) 16 ðPrimeira letra de cada palavra maiúscula Ex: MinhaClasse, Pilha uMembros de uma classe e variáveis locais: ðPrimeira letra minúscula Ex: idade, marcaModelo, getCor(), getSalarioFinal(), i, cont, somaTotal uConstantes de classe (static final): ðMAIÚSCULAS ≠ minúsculas ðTodas as letras maiúsculas Ex: PI, MAX_ALUNOS, MEDIA Fred (C) 2003 Java: Sintaxe 17 Fred (C) 2003 Java: Sintaxe 18 3 Palavras reservadas abstract boolean break byte case catch char class const continue default do double else extends false final finally float for goto assert if implements import instanceof int interface long native new null Fred (C) 2003 Tipos de Dados em Java package private protected public return short static strictfp super switch synchronized this throw throws transient true try void volatile while Java: Sintaxe 19 Tipos primitivos uTipos primitivos: possuem representações definidas em termos de bytes ðAs variáveis destes tipos guardam valores dentro da faixa definida pelo tipo uTipos referenciáveis: contêm uma referência para os dados na memória, cujas representações são definidas pela classe do objeto ðAs variáveis destes tipos contém um ponteiro p/ objeto Fred (C) 2003 Default false \u0000 0 0 0 long 0 64bits float 0.0f 32bits ±1.4E-45 a ±3.4028235E+38 double 0.0 64bits ± 4.9E-324 a ±1.797693134862E+308 Tamanho 1bit 16bits 8bits 16bits 32bits ðDois valores: true e false uTipo char ðValores delimitados por apóstrofos: char c = 'c' ðUso de literais unicode: char c = \u0041 ðCaracteres especiais: \b (backspace) \t (tabulação) \n (nova linha) \r (return) \' (apóstrofos) \" (aspas) 9223372036854775807 21 Tipos primitivos Fred (C) 2003 22 uTipos de ponto flutuante (float e double) ðLiterais na base decimal: ðLiterais: • 0, 1, 123, -23456 • 0.0, 1.0, .01, -3.5 ðLiterais nas bases hexadecimal e octal: ðNotação científica: //51966 em hexa //255 em octal • 1.2345E02 • 1e-6 ðInteiros(32 bits) x inteiros longos (64bits) Fred (C) 2003 Java: Sintaxe Tipos primitivos uTipos inteiros (byte, short, int, long) • 1234 • 1234L • 0xF34L 20 uTipo boolean Domínio NA \u0000 a \uFFFF -128 a 127 -32768 a 32767 -2147483648 a 2147483647 -9223372036854775808 a Java: Sintaxe • 0xcafe • 0377 Java: Sintaxe Tipos primitivos Tipo boolean char byte short int Fred (C) 2003 uJava possui duas categorias de tipos de dados: ðLiterais ponto-flutuante são sempre double! • 12.34 • 12.34f • 6.02e23F //long //long em hexa Java: Sintaxe //1.2345 x 102 //1 x 10-6 23 Fred (C) 2003 //double //float //float Java: Sintaxe 24 4 Conversão de tipos Conversões ampliadoras uJava permite conversões entre inteiros (byte , short , int , long ), caractere (char ) e pontos flutuantes (float e double ) uUm valor de um tipo é convertido para um tipo maior, isto é, um representado por mais bits uSão realizadas automaticamente uExemplos: uO tipo boolean é o único primitivo que não é convertido em nenhum outro uTipos de conversão ðConversões ampliadoras (widening conversions ) ðConversões redutoras (narrowing conversions ) Fred (C) 2003 Java: Sintaxe 25 int i = 20; float f = i; //20 convertido para float int i = ´A´; Math.sqrt(4); //65 convertido para int //4 convertido para double Fred (C) 2003 Java: Sintaxe Conversões redutoras Tipos de referência uUm valor é convertido para um tipo com menos bits uAs variáveis são referências para objetos em memória uUma classe define um tipo referenciado uOs arranjos também são tipos referenciados uNão são realizadas automaticamente uO programador deve confirmar a redução com um cast, do contrário o código não é compilado cast uExemplos: int i = 13; byte b = i; b = (byte) i; i = (int) 32.601; Fred (C) 2003 Referência (variável) //Erro de compilação! //Ok! //i recebe 32 Java: Sintaxe Tipos referenciados serão abordados mais adiante 27 Fred (C) 2003 Objeto em memória Java: Sintaxe Operadores Operadores uOperadores aritméticos uOperadores de atribuição ðResultam num valor numérico (inteiro ou ponto flutuante) u Operador condicional ðCondiciona seu valor de retorno a uma expressão lógica uOperadores relacionais: comparam expressões uOperador instaceof: verifica se um objeto é instância de uma classe ðResultam num valor booleano (true ou false) ðResulta num valor boolean uOPeradores lógicos: compõem expressões lógicas ðProduzem um valor booleano Java: Sintaxe 28 ðExecutam uma operação seguida de uma atribuição u Operadores de incremento e decremento ðResultam num valor numérico (inteiro ou ponto flutuante) Fred (C) 2003 26 uOperador new: instancia uma classe ðProduz um objeto da classe 29 Fred (C) 2003 Java: Sintaxe 30 5 Operadores aritméticos Operadores incremento/decremento uSímbolos: uSímbolos: ðAdição: + ðIncremento: ++ ðSubtração: ðMultiplicação: * ðDecremento: -ðO comportamento deste operador depende da posição relativa ao operando ðDivisão: / ðResto da divisão inteira: % uExemplos: uExemplos: c = 7 % 3; x = 5 + 10 / 2; Fred (C) 2003 c = 10; c++; //cß ß 11 //c receberá 1 //x receberá 10 Java: Sintaxe 31 Fred (C) 2003 y=1; x=0; z=0; x = y++; //xß ß 1 e yß ß2 z = ++x; //zß ß 2 e xß ß2 Java: Sintaxe 32 Operadores relacionais Operadores lógicos ou booleanos uSímbolos: uSímbolos: ðMaior que, maior ou igual a: >, >= ðAND: && (curto circuito) ou & ðMenor que, menor ou igual a: <, <= ðIgual a: == ðOR: || (curto circuito) ou | ðNOT: ! ðDiferente de: != ðXOR: ^ uExemplos: uExemplos: if ( c == 10 ) ... (c != 0) && (a > (x/c)) (c != 0) & (a > (x/c)) !(a > b) return x != null; Fred (C) 2003 Java: Sintaxe 33 Fred (C) 2003 //ok //erro se c==0 Java: Sintaxe Operadores de atribuição Operador condicional uSímbolos: uSímbolo: ðEquivalem a uma soma entre o operando da direita e o operando da esquerda seguida por uma atribuição ðOperador ternário: ?: ðEquivale a um comando de decisão que resulta num valor ðForma geral: var op= valor ↔ var = var op valor ðSintaxe: expr_booleana ? expressaoV : expressãoF ðAritméticos+atribuição: +=, -=, *-, /= e %= uExemplos: c a f e += -= %= += Fred (C) 2003 5; b; (c+a); 1; 34 uExemplos: //c = c + //a = a – //f = f % // e++ ou Java: Sintaxe 5 b (c+a) e = e + 1 j a v a 35 = = = = Fred (C) 2003 (a>b)?a:b; (a != null) ? a : "<vazio>"; r>0 ? 10 : 10.5; //erro! (x<y)&&(z<y) ? y : ((x<z) ? z : x); Java: Sintaxe 36 6 Operador instanceof Operador new uSintaxe: ð(objeto ou array) instanceof nome_da_classe uSintaxe: ðnew construtor_da_classe ðRetorna true se o objeto for instância da classe ðCria um objeto da classe especificada no construtor uExemplos: uExemplos: "string" instanceof String "" instanceof Object null instanceof Object Fred (C) 2003 //true //true (H) //false Java: Sintaxe c = new Cliente("Bart", "Springfield"); linguagem = new String("Java"); venda.adicioneProduto(new Produto()); faixa = new int[] {1,2,3,4,5}; 37 Operadores Fred (C) 2003 Java: Sintaxe Operadores u(P)recedência e (A)ssociatividade 8 A Operador E p == p p != p r == r r != r 7 E & (bitwise) & (lógico) D + - ! D new ( tipo ) 6 E ^ (bitwise) ^ (lógico) 5 E | (bitwise) | (lógico) 12 E * / % 4 11 E + - + (concatenação de strings) 3 E && E || 10 E << >> <<< 2 D ?: 9 E < <= > >= instanceof 1 D = *= /= %= += -= <<= >>= >>>= &= ^= |= P A Operador 15 E . [ ] ( params ) ++ 14 13 Fred (C) 2003 P -- Java: Sintaxe 39 Fred (C) 2003 Comandos uElementos da linguagem, em ordem crescente de uEstruturas de decisão: complexidade: 40 ðif-else e switch-case ðCaracteres ðTipos de dados, valores literais, identificadores uEstruturas de repetição: ðfor, while e do-while ðOperadores e expressões uTratamento de exceções: ðComandos ðMétodos ðthrow e try-catch-finally uDesvio de fluxo: ðClasses ðPacotes Fred (C) 2003 (p=primitivo, r=referência) Java: Sintaxe Estrutura de uma aplicação COMPLEXIDADE 38 ðbreak, continue e return Java: Sintaxe 41 Fred (C) 2003 Java: Sintaxe 42 7 Comando simples x bloco de comandos Comando if-else uUm comando em Java pode ser um comando uSintaxe: if ( expr_booleana ) simples ou um bloco de comandos uUm comando simples pode ser: uma expressão, um dos comandos anteriores ou uma ativação de método; uUm bloco de comandos é um conjunto de um ou mais comandos simples delimitados por "{" e "}" e separados entre si por ";". Fred (C) 2003 Java: Sintaxe comando simples ou bloco; else comando simples ou bloco; uExemplo: if (n != 0){ if (a>b) maior = a; else maior = b; 43 Fred (C) 2003 c += n; n = 0; } else c++; Java: Sintaxe Comando switch-case Comando for uSintaxe: switch ( var_inteira ) { uSintaxe: for ( inic; teste; inc ) } [case val: comando ou bloco; break;]1-n [default: comando ou bloco; break;]0-1 uExemplo: switch (mes) { case 1: nome case 2: nome case 3: nome case 4: nome default: nome } Fred (C) 2003 comando simples ou bloco; uOnde: ðinic: inicialização da variável contadora. A variável também pode ser declarada aqui. ðteste: expressão booleana que determina a parada ou continuação do laço ðinc: incremento da variável contadora ðInteressante à todas as três cláusulas são opcionais! (char | byte | short | int) = = = = = "Janeiro" ; break; "Fevereiro" ; break; "Março" ; break; "Abril" ; break; "Mês inválido"; break ; Java: Sintaxe 45 Fred (C) 2003 Comando for Comando for uExemplos: uExemplos: int i; for (i=0 ; i<10 ; i++) x += 5; //outra forma for (int i=0 ; i<10 ; i++) x += a[i]; Java: Sintaxe Java: Sintaxe //mais de uma variável declaradas for (int i=0, j=10 ; i<10 ; i++, j--) soma += i*j; i só pode ser usada no corpo do laço for 46 ; //não precisa ser uma contagem for (Node n = cabeca ; n!=null ; n=n.next()) System .out.println (n); //laço infinito for( ;; ) { if (x != null) break ; else { ... } } Fred (C) 2003 44 //laço vazio (e possível erro de compilação) for (int i=0 ; i<10 ; i++); soma += i; 47 Fred (C) 2003 Java: Sintaxe 48 8 Comando while Comando while uSintaxe: while ( expressão ) uExemplos: comando ou bloco; int c=0; while (c < 10) { System .out.println (c); c++; } uOnde: ðexpressão: expressão que retorne um booleano • Se o valor for true, o corpo do laço é executado • Se for false, o laço é encerrado //equivale a for (int c=0; c<10 ;c++) System.out. println(c); ðPode ser análogo a um for, desde que se acrescente uma operação de inicialização antes do comando Fred (C) 2003 Java: Sintaxe 49 Fred (C) 2003 Java: Sintaxe Comando do-while Comando do-while uSintaxe: do uExemplos: comando ou bloco; while (expressão); ðO laço do-while é executado pelo menos uma vez ðSó pára se a expressão for false (cuidado para não confundi-lo como repeat-until do Pascal) Java: Sintaxe 51 Fred (C) 2003 Java: Sintaxe Comando throw Comando throw uSintaxe: throw exceção; uExemplo: uObservações: Java: Sintaxe 52 /** Método que adiciona um produto à venda atualmente aberta de um caixa */ public void adicioneProduto (Produto item) throws VendaNaoAbertaException { //há venda aberta no caixa? if (vendaAtual == null) throw new VendaNaoAbertaException (this); vendaAtual .insereItem(item); } ðLançar uma exceção que indique um erro ou condição que impossibilite o prosseguimento da execução ðO método que possui este comando deve indicar na sua assinatura que pode lançar tal exceção, isto é feito com a cláusula throws ðUma exceção é um objeto cuja classe herda de Throwable Fred (C) 2003 50 //equivalente ao laço while do exemplo int c=0; do { System .out.println (c); c++; } while (c < 10); uOnde: ðexpressão: expressão que retorne um booleano Fred (C) 2003 i só pode ser usada no corpo do laço for 53 Fred (C) 2003 Java: Sintaxe 54 9 Comando try-catch-finally Comando try-catch-finally uSintaxe: try { uMecanismo de tratamento de exceções de Java [comando;]1-n } catch (Exceção e1) { [comando;]1-n } catch (OutraExceção e2) { [comando;]1-n } finally { [comando;]1-n } Fred (C) 2003 uA cláusula try define o trecho de código protegido uA cláusula catch (0 ou mais) trata um determinado tipo de exceção que possa ocorrer no try ðOs comandos só serão executados se a exceção ocorrer ðApenas um catch, dentre todos, é executado zero ou mais uA cláusula finally é opcional e é sempre executada uO uso de chaves faz parte do comando e não é um ou zero Java: Sintaxe opcional 55 Fred (C) 2003 Java: Sintaxe Comando try-catch-finally Comando break uExemplo: uSintaxe: break; uObjetivo: public static void main(String[] args) { Caixa c = new Caixa(); Produto p; try { p = = new Produto("Celular", 600); c.adicioneProduto(p); } catch (VendaNaoAbertaException e) { //trata erro aqui... } } Fred (C) 2003 Java: Sintaxe ðFaz a execução saltar para o final de um dos comandos: while, do-while, for ou switchcase ðNo comando switch-case seu uso é necessário para evitar que a execução de uma cláusula case continue na seguinte 57 Fred (C) 2003 Java: Sintaxe Comando break Comando continue uExemplo: uSintaxe: continue; Java: Sintaxe 58 uObjetivo: ðInterrompe a iteração atual do laço e inicia a próxima ... for (int i=0; i<dados. length ;i++) { if (dados[i] == procurado) { posicao = i; break; } } //a execução continua daqui ... Fred (C) 2003 56 ðSó pode ser usado dentro de laços while, dowhile e for • while: volta para o início do laço e testa a condição de parada para decidir se entra no laço ou não • do-while: vai para o final do laço, onde a condição de parada é testada para decidir se entra no laço ou não • for: volta para o início, executa o incremento e depois o teste 59 Fred (C) 2003 Java: Sintaxe 60 10 Comando continue Comando return uExemplo: uSintaxe: return; ou return expressão; uObjetivo: ... for (int i=0; i<dados. length ;i++) { if (dados[i] == VAZIO) continue; processe(dados[i]); } ... Fred (C) 2003 ðPára a execução do método corrente ðMétodos com tipo de retorno void pedem a primeira sintaxe do return ðMétodos que retornam dados pedem a segunda Java: Sintaxe 61 Fred (C) 2003 Java: Sintaxe Comando return Métodos uExemplos: uColeção de comandos Java encapsulados por um nome: String informeNome () { return this.nome; } public void insereProduto (Produto item) if (item == null) return ; itens. add(item); } Fred (C) 2003 Java: Sintaxe ðEm linguagens imperativas: funções, subrotinas e procedimentos uMétodos podem possuir zero ou mais parâmetros e { podem conter declarações locais de variáveis uA invocação de um método é uma expressão Java ðExceção: métodos com retorno void não são expressões 63 Métodos Fred (C) 2003 Java: Sintaxe 64 Métodos uAssinatura de um método: uNome do método: mesmas regras dos identificadores de variáveis ðNome do método ðTipo e nome de cada parâmetro uTipo de retorno: um tipo primitivo, um tipo referenciável, um array ou void. ðTipo do valor retornado ðLista de exceções ðModificadores uParâmetros são separados por vírgulas e, quando uSintaticamente: modif tipo nome (params)[throws exceções]{ corpo_do_método } Fred (C) 2003 62 Java: Sintaxe 65 não existirem, o nome do método vem seguido por '()' uA cláusula throws informa as exceções (erros) que o método pode lançar. Fred (C) 2003 Java: Sintaxe 66 11 Métodos Pacotes uExemplos de assinaturas de métodos: uColeção de classes e interfaces relacionadas com um espaço de proteção e de nomes comuns. ðpublic static void main(String[] args) {...} ðpublic final int indexOf (Object e, int s) {...} ðIdentificar classes com características comuns. ðFacilidade para encontrar classes desejadas. ðdouble distanciaDaOrigem () {...} ðstatic double raiz(double e) throws IllegalArgumentException {...} ðNomes de classes num pacote não entram em conflito com nomes de classes de outros pacotes. ðFacilitar o acesso entre classes no mesmo pacote. ðprotected abstract String readText(File f) throws FileNotFoundException, UnsupportedEncondingException {...} Fred (C) 2003 Java: Sintaxe 67 Fred (C) 2003 Java: Sintaxe Pacotes Importação de pacotes e classes uPacotes em Java possuem nomes compostos uDentro de um pacote pacote1 , uma classe A separados por "." (ponto) pode se referir a uma outra classe B apenas por seu nome simples uClasses de outro pacote pacote2 devem adicionar o nome do pacote pacote1 para utilizarem as classes A e B ðNomes de pacotes da plataforma começam por java, javax ou sun uExemplos de pacotes: ðjava.lang: pacote com várias classes fundamentais da linguagem Java, tais como, String, Math, etc. ðjava.util: pacote com classes utilitárias e estruturas de dados Fred (C) 2003 Java: Sintaxe 68 ðExemplo: pacote1.A a = new pacote1.A(); ðExemplo: java.io.File f; f = new java.io.File("abc.txt"); 69 Fred (C) 2003 Java: Sintaxe Importação de pacotes e classes Importação de pacotes e classes uA diretiva import dispensa o uso do nome uExemplos: qualificado de uma classe de outro pacote uDeve ser colocada depois da diretiva package import import import import uPode ser usada mais de uma vez uDisponível em duas formas: ðImportação de uma classe de um pacote 70 java.util.ArrayList; java.util.Iterator ; java.io.*; //importa tudo java.lang.*; //dispensável public class Cliente { ... } ðImportação de todas as classes de um pacote O pacote java.lang é sempre importado automaticamente! Fred (C) 2003 Java: Sintaxe 71 Fred (C) 2003 Java: Sintaxe 72 12 Definição de pacotes Definição de pacotes uA diretiva package define o pacote ao qual a uCada arquivo fonte deve estar num diretório que classe pertence uDeve ser a primeira palavra reservada Java a aparecer em um arquivo uSintaxe: package nome_do_pacote; reflita o nome do pacote package v3; public class Cliente { ... } uPacotes devem ser rotulados com o nome de Java: Sintaxe Cliente.java Produto. java package v3; public class Produto { ... } domínio invertido, para garantir unicidade global uExemplo: package br.nti.ufpb.contacad; Fred (C) 2003 v3 73 Fred (C) 2003 v3.Produto v3\Produto.java Java: Sintaxe 74 Definição de pacotes Definição de pacotes uOs bytecodes também exigem a mesma hierarquia: uO diretório base do pacote pode estar em qualquer package v3; public class Cliente { ... } C:\ v3 loja Cliente.class package v3; public class Produto { ... } Fred (C) 2003 ponto do sistema de arquivos. uExemplo: Compilador Java package v3; public class Produto { ... } Produto. class Java: Sintaxe 75 Fred (C) 2003 pacote v3 Produto. java Java: Sintaxe Definição de pacotes Definição de pacotes uSugestão para organização do código: C:\ uO compilador e o interpretador devem estar informados onde encontrar os arquivos fontes e de classes. uDefinindo um CLASSPATH: loja fontes v3 Fred (C) 2003 ðConjunto de diretórios que contêm pacotes onde o compilador e o interpretador devem procurar por arquivos fontes e bytecodes classes v3 Cliente.java Cliente.class Produto. java Produto. class Java: Sintaxe 76 77 Fred (C) 2003 Java: Sintaxe 78 13 Definição de pacotes Definição de pacotes uApenas diretórios que contêm diretórios base de uExemplos: pacotes devem ser listados. uExemplo: ðCompilando o código em linha de comando: C:\> javac –classpath c:\loja\fontes Cliente.java C:\> _ ðc:\loja\fontes deve estar no classpath ðc:\loja\fontes\v3 não deve! ðExecutando uma classe: uDefinindo um classpath: ðSET CLASSPATH=c:\loja\fontes;c:\loja\classes C:\> java –classpath c:\loja\classes Cliente C:\> _ • Inserido no arquivo AUTOEXEC.BAT ðDiretiva -classpath do compilador/interpretador Fred (C) 2003 Java: Sintaxe 79 Fred (C) 2003 Java: Sintaxe Estrutura de um código fonte Java Estrutura de um código fonte Java uArquivo: menor unidade compilável de Java uTodo arquivo Java deve conter no máximo uma classe com acesso public. uEstrutura: ð Uma diretiva package (opcional) ð Zero ou mais diretivas import ð Uma ou mais definições de classe uO nome do arquivo deve ser o mesmo de sua classe public com a extensão .java. uÉ boa prática de programação declarar apenas uTodo comando Java deve estar contido dentro dos uma classe por arquivo, mesmo quando estas pertencerem a um mesmo pacote. métodos das classes uTodo método deve aparecer dentro de alguma classe. Fred (C) 2003 80 Java: Sintaxe 81 Estrutura de um código fonte Java Fred (C) 2003 Java: Sintaxe 82 Estrutura de um código fonte Java uSintaticamente: [package NomeDoPacote] {[import * ou Classe]} public class NomeDaClasse [extends Superclasse]{ Corpo da classe } CLASSE ARQUIVO Fred (C) 2003 class OutraClasse [extends Superclasse]{ Corpo da classe } COMANDO MÉTODO Java: Sintaxe PACOTE 83 Fred (C) 2003 Java: Sintaxe 84 14 Estrutura de um código fonte Java uClasses de um mesmo pacote: package figuras; package figuras; package figuras; class Circulo { class Retangulo { class Poligono { corpo da classe... } Circulo.java Fred (C) 2003 corpo da classe... } Retangulo.java Arranjos e Strings corpo da classe... } Poligono.java Java: Sintaxe 85 Fred (C) 2003 Arranjos Arranjos uArranjos são objetos em Java! uSintaxe geral: 86 tipo[ ] referência = new tipo[tamanho] uArranjos devem ser declarados e depois instanciados. uExemplo: uO tipo base de um arranjo pode ser primitivo ou de referência (objetos) uUma vez criados, não podem mudar de tamanho uSão indexados a partir do índice 0 (zero) uPossuem uma propriedade pública length que contém o tamanho do arranjo int[] inteiros; //declaração inteiros = new int[20]; //instanciação Ou: int[] inteiros = new int[20]; //2 em 1 Fred (C) 2003 Java: Sintaxe Java: Sintaxe 87 Arranjos Fred (C) 2003 Java: Sintaxe 88 Arranjos uTipo primitivo: int[] arrayDeInteiros = new int[10]; int arrayDeInteiros[] = new int[10]; Cada caixinha é uma referência para um objeto Produto a ser criado! vendas uTipo referência: String[][] nomes = new String[2][3]; Produto[] vendas = new Produto[3]; Object coisas[] = new Object[10]; uA declaração acima só cria os arranjos, os objetos devem ser criados depois! Fred (C) 2003 Java: Sintaxe = null 89 Fred (C) 2003 Java: Sintaxe 90 15 Arranjos Arranjos uArranjos literais: uPovoando um arranjo de referências: ðNa declaração de uma referência: Produto[] vendas = new Produto[3]; vendas[0] = new Produto("Celular", 600); vendas[1] = new Produto("DVD", 700); vendas[2] = new Produto("Mesa", 100); System.out.println(vendas.length); int[] inteiros = {1, 2, 3, 4, 5}; ðNa passagem de um valor literal: String r = abrirDialogo("Deseja sair?", uCada posição do arranjo é uma referência para um new String[] {"Sim", "Não"}); objeto da classe Produto uA inicialização é feita em tempo de execução! Fred (C) 2003 Java: Sintaxe 91 Arranjos Fred (C) 2003 Java: Sintaxe 92 Strings uStrings também são objetos em Java. vendas uDevem ser declarados e instanciados. uExemplos: String linguagem; linguagem = new String(“Java”); linguagem = “Java”; "Celular" 600.0 "DVD" 700.0 Fred (C) 2003 Java: Sintaxe //...instancia //mais prático! uConcatenação: “Java ” + “é a melhor” “2+2=” + 4 “Produto = ” + p //p é um Produto "Mesa" 100.0 93 Strings Fred (C) 2003 Java: Sintaxe 94 Strings uInterface da classe String String s = new String("Java é a melhor"); s.charAt(3); // 'a' s.compareTo("Java é"); // 9 "Java é".compareTo(s); // –9 s.compareToIgnoreCase("java é a melhor"); // 0 s.equalsIgnoreCase("jAvA É a meLhoR"); // true s.length(); // 15 "Isto é um string".length(); // 16 s.substring(7); // "a melhor" s.substring(0,4); // "Java" ðchar charAt(int pos) ðint compareTo(String s) ðint compareToIgnoreCase(String s) ðboolean endsWith(String s) ðboolean equals(String s) ðboolean equalsIgnoreCase(String s) ðint length() ðString substring(int ini) ðString substring(int ini, int fim) Fred (C) 2003 //declara... Java: Sintaxe 95 Fred (C) 2003 Java: Sintaxe 96 16 Strings Strings uInterface da classe String String s = new String("Java é a melhor"); s.indexOf("a "); // 3 s.indexOf("a ", 4); // 7 s.indexOf('e'); // 10 s.indexOf('é', 2); // 5 s.lastIndexOf("a "); // 7 s.lastIndexOf("a ", 6); // 3 "Nabucodonosor".lastIndexOf('o'); // 11 "Nabucodonosor".lastIndexOf('o', 7); // 7 ðint indexOf(String s) ðint indexOf(String s, int ini) ðint indexOf(int ch) ðint indexOf(int ch, int ini) ðint lastIndexOf(String s) ðint lastIndexOf(String s, int ini) ðint lastIndexOf(int ch) ðint lastIndexOf(int ch, int ini) Fred (C) 2003 Java: Sintaxe 97 Strings Java: Sintaxe String s = new String("Java é a melhor"); s.toLowerCase(); // "java é a melhor" s.toUpperCase(); // "JAVA É A MELHOR" " Joao Pessoa ".trim(); // "Joao Pessoa" s.replace('a','o'); // "Jovo é o melhor" s.startsWith("java"); // false s.startsWith("Java", 2); // false s.toCharArray(); // {'J'','a','v',..} s.regionMatches(9,"melhor",0,6); // true ðString toLowerCase() ðString toUpperCase() ðString trim() ðString replace(char c1, char c2) ðboolean startsWith(String s) ðboolean startsWith(String s, int desloc) ðchar[ ] toCharArray() ðboolean regionMatches(int d1, String s, int d2, int tam) Java: Sintaxe 99 String – Exemplo mais completo Fred (C) 2003 Java: Sintaxe uEsquematicamente: nomes de arquivos no Windows/DOS ou Unix e ðA classe deve guardar um nome completo de arquivo e permitir o acesso a cada uma de suas partes: • nome • caminho • extensão do arquivo e xt ns ão () ? nomeCompleto separador ca Java: Sintaxe 100 String – Exemplo mais completo uConstruir uma classe que facilite a manipulação de Fred (C) 2003 98 Strings uInterface da classe String Fred (C) 2003 Fred (C) 2003 101 mi Fred (C) 2003 nh ? o() Java: Sintaxe nom nome! e() ? 102 17 String – Exemplo mais completo String – Exemplo mais completo public class NomeArquivo { private String nomeCompleto; private char separador; //Retorna o nome do arquivo public String nome() { int ponto = nomeCompleto.lastIndexOf(‘.’); int sep = nomeCompleto.lastIndexOf(separador); return nomeCompleto.substring(sep + 1, ponto); } // Retorna o caminho (path) do arquivo public String caminho() { int sep = nomeCompleto.lastIndexOf(separador); return nomeCompleto.substring(0, sep); } } // fim da classe NomeArquivo // construtor da classe public NomeArquivo(String nome, char sep) { nomeCompleto = nome; separador = sep; } // método para retornar a extensão do arquivo public String extensao () { int ponto = nomeCompleto.lastIndexOf(‘.’); return nomeCompleto.substring(ponto + 1); } Fred (C) 2003 Java: Sintaxe 103 Fred (C) 2003 Java: Sintaxe 104 String – Exemplo mais completo public class AplicacaoNomes { public static void main(String[] args) { Operações de entrada e saída NomeArquivo arq; arq = new NomeArquivo("c:\\temp\\teste.doc", '\\'); System.out.println("Extensao: " + arq.extensao()); System.out.println("Caminho:" + arq.caminho()); System.out.println("Nome:" + arq.nome()); } } // fim da classe AplicacaoNomes Fred (C) 2003 Java: Sintaxe 105 Entrada e saída Fred (C) 2003 Java: Sintaxe 106 Entrada e saída System uEncontram-se na classe System (java.lang) ðSystem.in e System.out uin é uma variável de classe do tipo InputStream ðEla referencia um objeto InputStream que representa a entrada padrão do sistema um objeto InputStream in out um objeto PrintStream uout é uma variável de classe do tipo PrintStream ðEla referencia um objeto PrintStream que representa a saída padrão do sistema Fred (C) 2003 Java: Sintaxe 107 Fred (C) 2003 Java: Sintaxe 108 18 Entrada e saída Entrada e saída uLendo da entrada padrão: ðSystem.in.read() System.in ß ß read() System System.out ß ß println("...") in out uEscrevendo na saída padrão: ðSystem.out.println(...) uAmbos são métodos enviados para os objetos referenciados por in e out. As classes InputStream e PrintStream implementam estes métodos. Fred (C) 2003 Java: Sintaxe 109 Fred (C) 2003 Java: Sintaxe Entrada e saída Entrada e saída uComo Java não foi projetada para produzir uInterface da classe EasyIn aplicações com interfaces baseadas em texto, a entrada (principalmente) e saída de dados é muito pouco prática (para não dizer inexistente!) uUtilizaremos uma classe não padrão chamada EasyIn para facilitar a entrada de dados das primeiras aplicações Fred (C) 2003 Java: Sintaxe 110 ðboolean readBoolean() ðbyte readByte() ðshort readShort() ðint readInt() ðboolean readLong() ðfloat readFloat() ðdouble readDouble() ðchar readChar() ðString readString() 111 Fred (C) 2003 Java: Sintaxe Exemplo Classes da API de Java uExemplo de uso de EasyIn: ujava.lang.StringBuffer ðStrings que podem ser alterados dinamicamente (mais eficientes que String) public static void main(String args[]){ NomeArquivo meuArquivo; EasyIn in = new EasyIn (); PrintStream out = System .out; String nome; char sep; 112 uAlguns métodos ðStringBuffer append(tipo dado) ðStringBuffer insert(int por, tipo dado) out.print (" Forneca um nome de arquivo completo:") ; nome = in.readString(); out.print (" Forneca o separador utilizado:" ); sep = in. readChar (); nomeArquivo = new NomeArquivo(nome, sep) ; ðString toString() ðvoid setCharAt(int pos , char c) } Fred (C) 2003 Java: Sintaxe 113 Fred (C) 2003 Java: Sintaxe 114 19 Classes da API de Java Classes da API de Java ujava.util.Calendar ðGuarda e manipula datas e horas ujava.util.Calendar ðGuarda e manipula datas e horas uAlguns métodos uConstantes (para usar em campo) ðCalendar.DAY_OF_MONTH ðCalendar.DAY_OF_WEEK ðCalendar.HOUR ðCalendar.MINUTE ðCalendar.MONTH ðetc. (veja API da classe Calendar) ðCalendar getInstance() ðboolean after(Object data) ðboolean before(Object data) ðint add(int campo, int qtde) ðvoid get(int campo) ðvoid set(int campo, int valor) Fred (C) 2003 Java: Sintaxe 115 Fred (C) 2003 Java: Sintaxe 116 Calendar Classes encapsuladoras uExemplo uClasses encapsuladoras ðByte, Integer, Long, Float, Double e Boolean import java .util. Calendar; ðPacote java.lang public class UsandoCalendar { public static void main (String[] args ) { uPrincipais utilidades: ðEncapsular um valor primitivo na forma de um objeto Calendar cal = Calendar. getInstance(); //data atual cal.add (Calendar.DAY_OF_WEEK, 2); System.out. println("Dia da semana: " + cal.get( Calendar .DAY_OF_WEEK)); System.out. println("Dia do mes : " + cal.get( Calendar .DAY_OF_MONTH)); System.out. println("Hora: " + cal.get( Calendar .HOUR)); ðUtilização de tipos primitivos em escopos exclusivos de tipos de referência ðConversões: String ó tipos primitivos } } Fred (C) 2003 Java: Sintaxe 117 Fred (C) 2003 Java: Sintaxe 118 Classes empacotadoras Classes empacotadoras uUtilização de tipos primitivos em escopos uUtilização de tipos primitivos em escopos exclusivos de tipos de referência exclusivos de tipos de referência Object[] coisas = new Object[3]; coisas[0] = new NomeArquivo("teste.doc", '\\'); coisas[1] = new String("java"); coisas[2] = new Integer(3); //Ok! Object[] coisas = new Object[3]; coisas[0] = new NomeArquivo("teste.doc", '\\'); coisas[1] = new String("java"); coisas[2] = 3; NÃO PODE!!! ANTES 3 é um literal do tipo primitivo int Literal primitivo ð Os elementos do arranjo só podem ser objetos da classe Object ou de quaisquer subclasses desta. Fred (C) 2003 Java: Sintaxe DEPOIS Objeto de Integer 3 119 Fred (C) 2003 3 Java: Sintaxe 120 20 Classes empacotadoras Classes empacotadoras uConversões tipos primitivos à String uClasse Integer ðConstantes à à De boolean int long float double Para String • static final int MIN_VALUE, MAX_VALUE String. valueOf( boolean) String. valueOf( int) , Integer .toString( int) String. valueOf( long ), Long .toString( long ) String. valueOf( float) , Float .toString( float) String. valueOf( double ), Double. toString (double) ðPrincipais métodos • • • • • • uConversões String à tipos primitivos De String para: boolean int long float double new Boolean (String s).booleanValue () Integer .parseInt(String s, int base) Long. parseLong(String s, int base) Float .parseFloat(String s) Double. parseDouble(String s) Fred (C) 2003 GERAM UMA EXCEÇÃO Java: Sintaxe 121 Integer(String s) throws NumberFormatException static int parseInt(String s) idem static String toBinaryString(int i) int intValue() long longValue() float floatValue() Fred (C) 2003 Java: Sintaxe Classes empacotadoras Classes empacotadoras uClasse Boolean uClasse Float ðConstantes ðConstantes • static final float MIN_VALUE, MAX_VALUE • static final float NEGATIVE_INFINITY • static final Boolean FALSE; • static final Boolean TRUE; ðPrincipais métodos ðPrincipais métodos • • • • • • • • • • Boolean (boolean b) Boolean (String s) boolean booleanValue() static Boolean valueOf(String s) Fred (C) 2003 Java: Sintaxe 123 Float (String s) throws NumberFormatException Float (float f) static float parseFloat(String s) throws NumberFormatException static Float valueOf(String s) throws NumberFormatException float floatValue() static String toString(float f) Fred (C) 2003 Java: Sintaxe Classes empacotadoras Classes empacotadoras uClasse Double uExemplos: ðConstantes 124 class Conversao { • static final double MIN_VALUE, MAX_VALUE • static final double NEGATIVE_INFINITY public static void main(String[] args) { String numero; int inteiro; ðPrincipais métodos • • • • • • 122 Double (String s) throws NumberFormatException Double (double f) static double parseDouble(String s) throws NumberFormatException static Double valueOf(String s) throws NumberFormatException double doubleValue() static String toString(double f) numero = new EasyIn().readString(); try { inteiro = Integer.parseInt(numero, 10); } catch (NumberFormatException nfe) { inteiro = 0; } for(int i=0; i<inteiro; i++) { //processa } } } Fred (C) 2003 Java: Sintaxe 125 Fred (C) 2003 Java: Sintaxe 126 21 Bibliografia Ken e Gosling, James. Programando em Java. Makron Books. 1997. u Arnold, Mary e Walrath, Kathy. The Java Tutorial Object Oriented Programming for the Internet. Addyson Wesley. 1996. u Campione, H. M. e Deitel, P. J. Java - How To Program. Prentice Hall. 1997. u Flanagan , David. Java in a Nutshell. O’Reilly. 1999. u Deitel, Fábio. Java – Guia de Consulta Rápida. Novatec 1999. u Ramon, Fred (C) 2003 Java: Sintaxe 127 22