Vous êtes sur la page 1sur 147

Jos Maria Rodrigues Santos Jnior

Java Standard

Aracaju, 16 de julho de 2002

INTRODUO...................................................................................................................................................4 JAVA COMO LINGUAGEM DE PROGRAMAO......................................................................................................4 JAVA COMO PLATAFORMA DE DESENVOLVIMENTO DE APLICAES...................................................................7 CONCEITOS BSICOS.....................................................................................................................................8 A MQUINA VIRTUAL JAVA.................................................................................................................................8 COLETA DE LIXO (GARBAGE COLLECTOR)...........................................................................................................9 JAVA DEVELOPMENT KIT - JDK.........................................................................................................................10 AMBIENTE INTEGRADO DE DESENVOLVIMENTO - IDE......................................................................................11 TIPOS DE PROGRAMAS JAVA: APPLICATIONS, APPLETS E SERVLETS.................................................................13 ESTRUTURA DE UM PROGRAMA JAVA................................................................................................................14 APLICAES JAVA - APPLICATION.....................................................................................................................15 A LINGUAGEM JAVA....................................................................................................................................16 COMENTRIOS....................................................................................................................................................16 IDENTIFICADORES...............................................................................................................................................17 PALAVRAS RESERVADAS....................................................................................................................................17 VARIVEIS E CONSTANTES.................................................................................................................................18 ARRAYS..............................................................................................................................................................22 LENDO E ESCREVENDO VARIVEIS....................................................................................................................23 OPERADORES......................................................................................................................................................24 COMANDOS.........................................................................................................................................................29 INTRODUO A ORIENTAO A OBJETOS...........................................................................................39 TIPOS DE DADOS ABSTRATOS............................................................................................................................40 CLASSE...............................................................................................................................................................40 OBJETO...............................................................................................................................................................40 ENCAPSULAMENTO.............................................................................................................................................40 MENSAGEM.........................................................................................................................................................41 HERANA............................................................................................................................................................41 ORIENTAO A OBJETOS EM JAVA........................................................................................................42 PACOTES.............................................................................................................................................................42 ARQUIVOS JAR (JAVA ARCHIVE) E CLASSPATH............................................................................................43 CLASSE...............................................................................................................................................................44 ENCAPSULAMENTO.............................................................................................................................................46 MEMBROS DE CLASSE........................................................................................................................................47 ATRIBUTOS.........................................................................................................................................................47 MTODOS............................................................................................................................................................48 OBJETO..............................................................................................................................................................49 MENSAGEM.........................................................................................................................................................50 SOBRECARGA DE MTODOS..............................................................................................................................51 HERANA............................................................................................................................................................52 REDEFINIO DE MTODOS................................................................................................................................56 CLASSES E MTODOS ABSTRATOS.....................................................................................................................57 CLASSES, MTODOS E VARIVEIS FINAL...........................................................................................................59 MEMBROS ESTTICOS........................................................................................................................................60 CLASSES INTERNAS.............................................................................................................................................61 INTERFACES........................................................................................................................................................62 POLIMORFISMO...................................................................................................................................................63 TRATAMENTO DE EXCEES..............................................................................................................................64 JAVADOC............................................................................................................................................................68 CODE CONVENTIONS..........................................................................................................................................71 API JAVA...........................................................................................................................................................72
JAVA.LANG..........................................................................................................................................................73

Java - 2

JAVA.UTIL...........................................................................................................................................................81 JAVA.TEXT...........................................................................................................................................................82 JAVA.IO...............................................................................................................................................................93 THREADS...........................................................................................................................................................101 JAVA.NET..........................................................................................................................................................102 JAVAX.SWING....................................................................................................................................................107 JAVA.SQL.JDBC..................................................................................................................................................122

FONTES DE PESQUISA................................................................................................................................142 EXERCCIOS..................................................................................................................................................143

Java - 3

Introduo
Java uma Linguagem de Programao e uma Plataforma de Desenvolvimento de Aplicaes

Java como Linguagem de Programao


A linguagem de programao Java de alto nvel com as seguintes caractersticas: Simples Compilada Robusta Multithread
Site(s)

Orientada a Objetos Interpretada Portvel Alto desempenho

Distribuda Segura Arquitetura Neutra Dinmica

http://java.sun.com/docs/white/langenv/Intro.doc2.html

Java - 4

Java possui a singular caracterstica de ser compilada e interpretada obtendo o melhor desses dois mecanismos de traduo/execuo de programas. Primeiro o compilador Java transforma um programa fonte em bytecodes e posteriormente, na execuo, os bytecodes so interpretados pela mquina virtual Java (JVM).

Com isso um programa Java um conjunto de instrues para a JVM, dessa forma o mesmo independente de plataforma, pois basta que haja uma implementao de mquina virtual para a plataforma a ser utilizada.

Java - 5

Observao : Esse foi o modelo inicial para execuo de programas Java, a fim de possibilitar independncia de plataforma, sendo que atualmente o processo de interpretao foi substitudo por outra compilao, sendo que, no mais para bytecodes e sim para cdigo executvel dependente de plataforma. Dessa forma a perda de performance com a interpretao foi eliminada e o programa em bytecodes continua independente de plataforma, pois a MVJ de cada plataforma ser responsvel pela compilao em executvel.
Site(s)

http://www.javasoft.com/products/hotspot/

Java - 6

Java como Plataforma de Desenvolvimento de Aplicaes


O termo plataforma normalmente definido como a combinao de sistema operacional mais hardware, sendo que a plataforma Java definida apenas em software, por isso o conceito de mquina virtual. A plataforma Java possui dois componentes: 1. 2. Mquina Virtual Java (JVM) Interface para Desenvolvimento de Aplicaes (API Java)

Java - 7

Conceitos Bsicos
A Mquina Virtual Java
A Especificao da Mquina Virtual Java define a JVM (Mquina Virtual Java) como: Uma mquina imaginria que implementada atravs da emulao em um software executado em uma mquina real. A Especificao da Mquina Virtual Java fornece as especificaes da plataforma de hardware para a qual todo o cdigo Java est compilado. Essa especificao permite que os programas Java sejam independentes de plataforma j que a compilao feita para uma mquina imaginria. Cabe ao Interpretador Java de cada plataforma de hardware assegurar a execuo do cdigo compilado para a JVM. A especificao da JVM fornece definies concretas para a implementao dos seguintes itens: Conjunto de Instrues (equivalente ao conjunto de instrues de uma CPU) Conjunto de registradores Formato do arquivo de classe Pilha Heap (coletado como lixo) rea da memria

Java - 8

Coleta de lixo (Garbage Collector)


Vrias linguagens de programao permitem a alocao dinmica da memria no tempo de execuo. O processo de alocao de memria varia baseado na sintaxe da linguagem, mas sempre envolve o retorno de um ponteiro ao endereo inicial do bloco de memria. Quando a memria alocada no mais necessria (quando o ponteiro que faz referncia memria est fora do escopo), aconselhvel que o ambiente do programa ou do tempo de execuo desaloque a memria para evitar que o programa seja executado com falta de memria. No C e C++ (e outras linguagens), o desenvolvedor do programa responsvel pela desalocao da memria. Esse procedimento algumas vezes pode ser trabalhoso, principalmente porque nem sempre possvel saber antecipadamente quando a memria deve ser liberada. Os programas que no so desalocados da memria podem, conseqentemente, sofrer algum tipo de falha caso no haja memria suficiente a ser alocada pelo sistema. Esses programas tm, portanto, vazamentos de memria. A linguagem Java realiza a liberao da memria, que antes era responsabilidade do programador, fornecendo um thread em segundo plano, em nvel de sistema, que registra cada alocao de memria e mantm uma contagem do nmero de referncias feitas a cada ponteiro de memria. Durante os ciclos ociosos, no tempo de execuo da Mquina Virtual Java, o thread da coleta de lixo verifica se existe algum ponteiro de memria em que o nmero de referncias tenha baixado para 0. Se houver, a memria marcada pelo thread da coleta de lixo ser varrida (desalocada). A coleta de lixo ocorre automaticamente durante o tempo de vida de um programa Java e dispensa a desalocao de memria, alm de eliminar os vazamentos de memria.

Java - 9

Java Development Kit - JDK


Conjunto de ferramentas para o desenvolvimento em JAVA fornecidas pela Sun, sendo os principais: Ferramenta javac java javadoc appletviewer jar jdb javap Verses Existentes: JDK 1.0.x
Site(s) http://www.javasoft.com/products/

Descrio Compilador Executor de Programas Gerador de documentao da API Visualizador de applet Gerenciador de arquivos .jar Debuger Faz engenharia reversa de classes JDK 1.1.x JDK 1.2.x JDK 1.3.x JDK 1.4.x

Java - 10

Ambiente Integrado de Desenvolvimento - IDE


Ambiente com interface grfica que interage com o JDK para oferecer um ambiente de desenvolvimento mais produtivo. Exemplos: Inprise JBuilder Tek-Tols Kawa Jbuilder 6.0 Foundation Ferramenta da Borland, de uso livre e utilizando apenas a API padro. Possui os mesmos recursos de edio das verses comerciais.
Site(s) http://www.borland.com/jbuilder/foundation/download/windows.html Configurando o ambiente : Tools\IDE Options... : (Editor/Block Ident e Tab Size =2) Criao de Projeto Demonstrao JBuilder 1. 2. 3. 4. Novo Projeto (C:\CursoJava\Standard\Fontes\ProjetoDemo.jpr) Propriedades do Projeto Nova Classe Edio/Compilao/Execuo

Microsoft Visual J++ Sun Forte CE

Symantec Visual Caf

Java - 11

Exerccio :
/** * Demonstrao de um Application Java */ /* Definio do pacote */ package introducao; /* Definio da classe */ public class Aplicacao { /* Mtodo main, o qual define um application */ public static void main(String[] args) { /* Escrevendo os parmetros passados na saida padrao */ for (int i = 0; i < args.length; i++ ) { System.out.println( args[i] ); } } }

Java - 12

Tipos de Programas Java: Applications, Applets e Servlets


A linguagem Java possui diferentes tipos de programas, sendo que a classificao feita atravs da modalidade/localizao de execuo dos mesmos. Applications Aplicaes stand-alone com "todos" os recursos de acesso ao Sistema Operacional. Semelhantes aos programas convencionais. Applets Programas que so carregadas atravs de uma rede TCP/IP (Internet/Intranet) e so executadas na JVM de um browser. A mquina virtual impe srias restries aos Applets, em relao ao uso de recursos do sistema operacional local, para evitar problemas de segurana. Servlets Programas que so executadas remotamente no servidor Web atravs de um Gerenciador de Servlets (Servlet Engine). So utilizados em aplicaes para Internet/Intranet, os quais so executadas no servidor, evitando assim problemas de compatibilidade, distribuies de verses e aumentando a segurana.

Java - 13

Estrutura de um Programa Java


Todo programa Java uma classe e mesmo possuindo trs possveis modalidades para programas Java (Applications, Applets e Servlets) a estrutura bsica sempre a mesma : "uma classe". Um Programa Java organizado em arquivos texto com a extenso .java e cada arquivo contem apenas uma classe pblica. O nome do arquivo da classe Java deve possuir exatamente o mesmo nome da classe pblica, pois a mquina virtual procura o arquivo da classe atravs do nome da classe. O comando package informar a qual pacote (diretrio) a classe pertence. Quando uma classe utilizar outras classes, estas devem ser importadas atravs do comando import, o qual deve indicar o pacote da classe importada e o seu nome. Programa(s) Demonstrao introducao.ClasseJava.java

/** * Demonstrao de uma classe Java */ /* Definio do pacote */ package introducao; /* Definio da classe (O mesmo nome do arquivo fonte) */ public class ClasseJava { /* Corpo da Classe */ /* Atributos */ /* Construtore(s) */ public ClasseJava ( /* Parmetros */ ) { /* procedimentos de inicializao da classe */ } /* Finalizador */ protected void finalize () { /* procedimentos de finalizao da classe */ } /* Mtodos */ }

Java - 14

Aplicaes Java - Application


Como demonstrado anteriormente, a linguagem de programao Java possui trs tipos de programas. Dessa forma iremos nos aprofundar um pouco mais no tipo Application, pois os recursos bsicos da linguagem Java sero demonstrados atravs de Application. Um application Java nada mais que uma classe Java possuindo um mtodo especfico que o caracteriza como uma aplicao para a Mquina Virtual Java. Dessa forma, todo programa/classe Java que possuir o mtodo com o seguinte assinatura public static void main (String[] argumentos){ } ser um application. E o corpo desse mtodo ser executado automaticamente quando o programa for submetido a JVM. Um detalhe importante que o array String[] argumentos contm os parmetros de linha de comando passados ao programa. Programa(s) Demonstrao introducao.Aplicacao.java

/** * Demonstrao de um Application Java */ /* Definio do pacote */ package introducao; /* Definio da classe */ public class Aplicacao { /* Mtodo main, o qual define um application */ public static void main(String[] args) { /* Escrevendo os parmetros passados na saida padrao */ for (int i = 0; i < args.length; i++ ) { System.out.println( args[i] ); } } }

Java - 15

A Linguagem Java
Comentrios
Existem trs tipos de comentrios em Java, sendo eles : // Usado para indicar comentrios em uma nica linha, pode ser inserido em qualquer posio de uma linha, e todo o texto at o final do marcador de linha tratado como comentrio. Usados para indicar comentrios que se estendem por uma ou mais linhas. Comentrio de documentao. Devem ser inseridos imediatamente antes de uma declarao de classes, varivel ou mtodo e indicam que o comentrio deve ser includo em qualquer documentao gerada automaticamente (como os arquivos HTML gerados pelo comando javadoc) introducao.Comentarios.java

/* */ /** */

Programa(s) Demonstrao

/** * Descriao: <p>Aplicao java demonstrando os tipos de comentrios * Empresa: <p>Infonet * @author Jos Maria Rodrigues Santos Junior * @version 1.0 */ //Definio do pacote package introducao; //Definio de classe public class Comentarios { /** * Mtodo main da Aplicao * @param args parmetros da linha de comando */ public static void main(String[] args) { /* * O lao abaixo ir passar por todos os parmetros fornecidos na linha * de comando e ir escrev-los na sada padro */ int i = 0; // Varivel inteira System.out.print("Parmetros : "); while (i < args.length) { /* Ecreve posio i do array args na sada padro */ System.out.print(args[i] + " "); i++; // Incrementa a varivel i de 1 unidade } } }

Java - 16

Identificadores
Os identificadores em Java devem seguir as seguintes regras : 1. 2. 3. 4. 5. A primeira posio dever ser com uma letra, _ ou $ Ser formado por caracteres UNICODE No ser uma palavra reservada No ser igual as literais : true, false ou null No ser repetido dentro do seu escopo

Observao : Os identificadores Java so case-sensitive

Palavras Reservadas
abstract boolean break byte case catch char class const continue default do double else extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while

Java - 17

Variveis e Constantes
Podem ser declaradas em qualquer lugar dentro de uma classe ou de um mtodo. Uma constante definida com a palavra reservada final e o seu contedo uma vez atribudo no poder mais ser alterado. A declarao de variveis e constantes em Java feita colocando o identificador do tipo seguido do identificador da varivel. tipo varivel [ = ValorInicial ]; final tipo CONSTANTE [ = ValorInicial ]; Tipos de Dados Primitivos Java uma linguagem de programao fortemente orientada a objetos e, com exceo dos tipos primitivos, qualquer coisa em Java uma classe/objeto. Tipos Numricos Inteiros Tipo byte short int long Tamanho em bits 8 16 32 64 -128 at +127 -32,768 at +32,767 -2,147,483,648 at+2,147,483,647 -9,223,372,036,854,775,808 at +9,223,372,036,854,775,807 Tipos Numricos Reais Tipo float double Tamanho em bits 32 64 Faixa -3.40292347E+38 at +3.40292347E+38 -1.79769313486231570E+308 at +1.79769313486231570E+308 Faixa

Java - 18

Tipo caracter Tipo char Tamanho em bits 16 Faixa UNICODE - 65536 caracteres possveis

Observao: Um caracter delimitado por apstrofos caracter. O que causa confuso, pois as Strings so delimitadas por aspas String. Caracteres Especiais de Escape: '\u0000' a caracteres Unicode '\uFFFF' \b \t \n \r \ \' \\ retrocesso tab avano de linha retorno de carro aspas apstrofo barra invertida

Observao: A linguagem Java no possui o tipo primitivo string, bastante conhecido em vrias outras linguagens. Para manipulao de texto so utilizadas as classes String e StringBuffer.

Java - 19

Tipo Lgico Tipo boolean Faixa true ou false

Converso entre tipos primitivos possvel transformar um tipo primitivo em outro, atravs de uma operao chamada typecast, colocando o tipo destino da transformao, entre parntesis, antes da expresso a ser convertida. Esse tipo de converso chamado de converso explcita. Por outro lado existe a converso implcita, a qual realizada pela MVJ, mesmo sem possuir operador de typecast, isso quando o tipo de retorno menos abrangente que o tipo que o recebe.

Java - 20

Programa(s) Demonstrao

introducao.TiposPrimitivos.java

/** * Demonstrao de Tipos Primitivos */ package introducao; public class TiposPrimitivos { public static void main ( String[] args ) { /* Declarando tres variaveis do tipo float */ float nota1, nota2, nota3; /* Inicializando as tres variveis float */ nota1 = 10; nota2 = 7; nota3 = 3; /* Declarando e inicializando trs variaveis float*/ float n1 = 5, n2 = 2, n3 = 9; int idade = 28; char sexo = 'M'; //Lembrar de usar apstofros double salario = 3000.00; boolean achou = false; /* * quando uma varivel declarada como final a mesmo no pode ter seu * contedo alterado */ final char FLAG = 'F'; /* * Erro, pois literais numricas com casas decimais so double */ // nota1 = 8.5 nota1 = 8.5f; // converso explicita para float nota2 = 7.0f; // converso explicita para float nota3 = (float) 9.0; // converso explicita para float System.out.println("Dados do Aluno"); System.out.print("Idade \t= " + idade + "\n" ); System.out.println("Sexo \t= " + sexo); System.out.println("Notas \t= " + nota1 + "\t" + nota2 + "\t" + nota3); System.out.println("Achou \t= " + achou); System.out.println("Flag \t= " + FLAG); /* Converso de double para int */ double d = 34.78; int i = (int) d; System.out.println("double : " + d + "\n int : " + i); } }

Java - 21

Arrays
So estruturas homogneas e estticas. A linguagem Java possui somente arrays unidimensionais, sendo que arrays multidimensionais podem ser simulados, atravs da definio de array de array. A propriedade length representa o tamanho do array. A primeira posio de um array 0 e a ltima (length 1) Programa(s) Demonstrao
/** * Demonstrao de array */ package introducao; public class Array { public static void main(String[] args) { /* declarando dois arrays do tipo int*/ int[] a1; int[] a2; /* instanciando os dois arrays */ a1 = new int[ 10 ]; // array com 10 posies de int a2 = new int[ 30 ]; // array com 30 posies de int /* imprimindo o tamanho dos array a1 e a2 */ System.out.println("a1 tamanho : " + a1.length); System.out.println("a2 tamanho : " + a2.length); /* declarando, instanciando e atribuindo valores ao array notas */ float[] notas = { 7.5f , 9.0f , 10.0f }; /* imprimindo as posies do array notas */ System.out.println("Notas : " + notas[0] + " - " + notas[1] + " - " + notas[2]); /* simulando array bidimensional*/ int[][] matriz = new int[ 3 ][ 4 ]; System.out.println("Linhas da Matriz : " + matriz.length); System.out.println("Colunas da Matriz : " + matriz[0].length); matriz[0][0] = 1; matriz[0][1] = 2; matriz[0][2] = 3; matriz[0][3] = 4; matriz[1][0] = 5; matriz[1][1] = 6; matriz[1][2] = 7; matriz[1][3] = 8; matriz[2][0] = 9; matriz[2][1] = 10; matriz[2][2] = 11; matriz[2][3] = 12; /* Imprimindo o array */ for (int i = 0; i < matriz.length; i++) for (int j = 0; j < matriz[0].length; j++) System.out.print(matriz[i][j] + " "); } }

introducao.Array.java

Java - 22

Lendo e Escrevendo Variveis


A linguagem Java no possui comandos especficos para leitura de variveis, pois a entrada e sada de dados so tratadas de forma independente de dispositivo, atravs das classes do pacote java.io. Dessa forma foi criada uma classe ( Keyboard), contendo mtodos "estticos" para leitura de variveis do tipo int, char, float e String, afim de facilitar a prtica dos conceitos visto durante o curso. Para escrever variveis na sada padro podem ser utilizados os comando: System.out.print(String); System.out.println(String); //Salta Linha Observao: Tipos primitivos/objetos podem ser concatenados com o sinal "+". Programa(s) Demonstrao introducao.Teclado.java

/** * Demonstrao do uso da classe Keyboard */ package introducao; import util.Keyboard; public class Teclado { public static void main (String[] args) { /* Lendo uma Varivel int */ System.out.print("int : "); int i = Keyboard.readInt(); System.out.println(i); /* Lendo uma Varivel float */ System.out.print("float : "); float f = Keyboard.readFloat(); System.out.println(f); /* Lendo uma Varivel char */ System.out.print("char : "); char c = Keyboard.readChar(); System.out.println(c); } }

Java - 23

Operadores
Aritmticos Operador + * / % Incremento Operador ++ -Uso Descrio var++ usa a varivel e depois incrementa ++var incrementa a varivel e depois usa var---var Relacionais Operador == != < > <= >= Descrio Igual Diferente Menor Maior Menor ou igual Maior ou igual usa a varivel e pois decrementa decrementa a varivel e depois usa Uso op1 + op2 op1 - op2 op1 * op2 op1 / op2 op1 % op2 Descrio Adiciona op1 e op2 Subtrai op2 de op1 Multiplica op1 por op2 Divide op1 por op2 Resto de op1 / op2

Java - 24

Atribuio Operador = += -= *= /= %= &= |= ^= <<= >>= >>>= Op1 += op2 Op1 -= op2 Op1 *= op2 Op1 /= op2 Op1 %= op2 Op1 &= op2 Op1 |= op2 Op1 ^= op2 Op1 <<= op2 Op1 >>= op2 Op1 >>>= op2 Op1 = op1 + op2 Op1 = op1 - op2 Op1 = op1 * op2 Op1 = op1 / op2 Op1 = op1 % op2 Op1 = op1 & op2 Op1 = op1 | op2 Op1 = op1 ^ op2 Op1 = op1 << op2 Op1 = op1 >> op2 Op1 = op1 >>> op2 Uso Equivale a

Java - 25

Binrios Operador >> << >>> & | ^ ~ Lgicos Operador && || ! & | Descrio AND com curto-circuito OR com curto-circuito NOT AND sem curto-circuito OR sem curto-circuito Descrio shift binrio para direita shift binrio para esquerda shift binrio para direita (unsigned) AND binrio OR binrio XOR binrio complemento binrio

Java - 26

Condicional Operador ?: Uso Descrio expresso_logica?val1:val2 Caso a expresso lgica seja verdade o val1 ser retornado, caso contrrio ser retornado val2

Precedncia dos Operadores Os operadores esto listados na ordem decrescente de precedncia; Os operadores na mesma linha tm a precedncia igual; Todos os operadores binrios, exceo dos operadores de atribuio, so avaliados da esquerda para direita; Descrio operadores do sufixo operadores unrios Criao multiplicativos aditivos SHIFT relacional igualdade AND binrio XOR binrio OR binrio AND lgico OR lgico Condicional Atribuio Operadores [ ] . () Chamada de funo !, ~, +, -, ++, -(Type-cast), new *, /, % +, <<, >>, >>> <, >, <=, >= instanceof ==, != & ^ | && || ?: +=, -=, *=, /=, %=, &=, ^=, |=, <=, <=, >>, >=, >>, =

Java - 27

Programa(s) Demonstrao

introducao.Operadores.java

/** * Demonstrao do Operadores */ package introducao; import util.Keyboard; public class Operadores { public static void main(String[] args) { /* declarando e inicializando 3 variveis inteiras */ int i1 = 7; int i2 = 3; int i3; i3 = i1 + i2; // adio i3 = i1 - i2; // subtrao i3 = i1 * i2; // multiplicao i3 = i1 / i2; // diviso inteira, pois n1 e n2 so do tipo int i3 = i1 % i2; // resto da diviso inteira /* declarando e inicializando 3 variveis float */ float f1 = 12.8f; // converso explcita para float float f2 = 6.4f; float f3; f3 = i1 * f2; // converso implcita para float f3 = f2 / i2; // diviso float, pois o numerador float f3++; // incremento f3--; // decremento f1 = ++f2 + f3; // a varivel i2 ser incrementada antes da atribuio f1 = f2++ + f3; // a varivel i2 ser incrementada aps a atribuio /* Operador relacional */ System.out.println( f1 > f2 ? f1 : f2 ); System.out.println( "f1 = " + f1 ); System.out.println( "f2 = " + f2 ); /* Calculo do preo de venda um produto baseado no preo de compra e e no percentual de lucro */ float preoCompra; float percentualLucro; System.out.print( "Preo de Compra : " ); preoCompra = Keyboard.readFloat(); System.out.print("Percentual de Lucro : "); percentualLucro = Keyboard.readFloat(); float lucro = preoCompra * (percentualLucro/100); float preoVenda = preoCompra + lucro; System.out.println("Preo de Compra : " + preoCompra + "\nPercentual de Lucro : " + percentualLucro + "\nLucro : " + lucro + "\nPreo de Venda : " + preoVenda); int i = 10; System.out.println( i = i << 1; System.out.println( i = i >> 2; System.out.println( int a = 5; int b = 10; int c = a | b; int d = a & b; System.out.println( "\nc } } " i " + i ); " i " + i ); " i " + i );

"a = " + a + "\nb = " + b + = " + c + "\nd = " + d);

Java - 28

Comandos
Sequncia { sequncia } Cria uma seqncia, a qual agrupa comandos e variveis. Quando uma sequncia possuir apenas um comando os operadores { e } so opcionais, caso contrrios so obrigatrios e cada comando dentro da sequncia deve ser terminado por ;

Java - 29

Comando if else Comando de seleo, o qual permite analisar uma expresso lgica e direcionar a execuo do programa. Caso a expresso lgica seja verdadeira (true) a sequncia do if ser executado e caso a expresso lgica seja falsa (false), e exista a clusula else, a sequncia do else ser executada. if ( expresso_lgica ) Sequncia; if ( expresso_lgica ) Sequncia_1; else Sequncia_2; if ( expresso_lgica ) Sequncia_1; else if ( expresso_lgica ) Sequncia_2; else if ( expresso_lgica ) Sequncia_3; else if ( expresso_lgica ) Sequncia_4; else Sequncia_5;

Java - 30

Programa(s) Demonstrao

comandos.ComandoIF.java

/** * Demonstrao do comando if else */ package comandos; import util.Keyboard; public class ComandoIF { public static void main(String[] args) { /* Validando uma data */ int dia, mes, ano; System.out.print("Dia : "); dia = Keyboard.readInt(); System.out.print("Ms : "); mes = Keyboard.readInt(); System.out.print("Ano : "); ano = Keyboard.readInt(); boolean data = false; /* meses de 30 dias */ if ( mes == 4 || mes == 6 || mes == 9 || mes == 11) { if ( dia >= 1 && dia <= 30 ) { data = true; } } else { /* meses de 31 dias */ if ( mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12 ) { if ( dia >= 1 && dia <= 31 ) { data = true; } } else { /* fevereiro */ if ( mes == 2 ) { if ( dia >= 1 && dia <= 28 ) { data = true; } else { /* 29 de fevereiro */ if ( dia == 29 ) { /* Ano bissexto */ boolean bissexto = ( (ano % 4 == 0) && (ano % 100 != 0) ) || (ano % 400 == 0); if ( bissexto ) { data = true; } } } } } } System.out.print(dia + "/" + mes + "/" + ano + " : "); if ( data ) System.out.println("Data Vlida"); else System.out.println("Data Invlida"); } }

Java - 31

Comando switch Compara (igualdade) uma varivel ( byte, char, short ou int ) a uma relao de valores, permitindo associar comandos a cada valor da relao. switch (varivel) case valor1 : case valor2 : ... case valorN : [ default } { sequncia_1; sequncia2; sequnciaN; : sequnciaDefault; ]

Obs : O comando break normalmente utilizado como ltimo comando de cada sequncia, indicando que, quando uma sequncia for executada todas as outras sero ignoradas.

Java - 32

Programa(s) Demonstrao

comandos.ComandoSwitch.java

/** * Demonstrao do comando switch */ package comandos; import util.Keyboard; public class ComandoSwitch { public static void main(String[] args) { /* Validando uma data */ int dia, mes, ano; System.out.print("Dia : "); dia = Keyboard.readInt(); System.out.print("Ms : "); mes = Keyboard.readInt(); System.out.print("Ano : "); ano = Keyboard.readInt(); boolean data = false; switch (mes) { /* meses de 30 dias */ case 4 : case 6 : case 9 : case 11 : if ( dia >= 1 && dia <= 30 ) data = true; break; /* meses de 31 dias */ case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : if ( dia >= 1 && dia <= 31 ) data = true; break; /* fevereiro */ case 2 : if ( dia >= 1 && dia <= 28 ) { data = true; } else { /* 29 de fevereiro */ if ( dia == 29 ) { /* Ano bissexto */ boolean bissexto = ( (ano % 4 == 0)&& (ano % 100 != 0) ) || (ano % 400 == 0); if ( bissexto ) { data = true; } } } default : data = false; } System.out.print(dia + "/" + mes + "/" + ano + " : "); if ( data ) System.out.println("Data Vlida"); else System.out.println("Data Invlida"); } }

Java - 33

Comando while Executa a sequncia do comando enquanto a expresso lgica for verdadeira. Sendo que, antes de cada execuo a expresso lgica analisada. while ( expresso_lgica ) Sequncia;

Programa(s) Demonstrao

comandos.ComandoWhile.java

/** * Demonstrao do comando while */ package comandos; import util.Keyboard; public class ComandoWhile { public static void main( String[] args ) { int numero; int fatorial; System.out.println("Calculo do fatorial (flag < 0)"); System.out.print("Nmero : "); numero = Keyboard.readInt(); while ( numero >= 0 ) { fatorial = 1; while ( numero > 1 ) { fatorial *= numero; numero--; } System.out.println( "Fatorial : " + fatorial ); System.out.print( "Nmero : "); numero = Keyboard.readInt(); } System.out.println( "Fim" ); } }

Java - 34

Comando do while Executa a sequncia do comando enquanto a expresso lgica for verdadeira. Sendo que, aps a execuo da sequncia a expresso lgica analisada. do Sequncia; while ( expresso_lgica );

Programa(s) Demonstrao

comandos.ComandoDoWhile.java

/** * Demonstrao do comando do while */ package comandos; import java.lang.String; import util.Keyboard; public class ComandoDoWhile { public static void main(String[] args) { int numero; int fatorial; System.out.println("Calculo do fatorial (flag = 0)"); do { System.out.print("Nmero : "); numero = Keyboard.readInt(); fatorial = 1; while (numero > 1) { fatorial *= numero; numero--; } System.out.println("Fatorial : " + fatorial); } while (numero != 0); } }

Java - 35

Comando for Executa a sequncia do comando enquanto a expresso lgica for verdadeira. Sendo que permite inicializar varivel, na entrada do comando e incrementar varivel a cada repetio. for ( expresso_inicializacao ; expresso_lgica ; expresso_incremento ) Sequncia; Programa(s) Demonstrao comandos.ComandoFor.java

/** * Demonstrao do comando for */ package comandos; import util.Keyboard; public class ComandoFor { public static void main(String[] args) { final int inicio = 10; final int fim = 10; int resultado = 0; System.out.print("Tabuada de (+ x) : "); char tabuada = Keyboard.readChar(); for (int i = 0; i <= inicio; i++ ) { for (int j = 0; j <= fim; j++) { switch (tabuada) { case '+' : resultado = i + j; break; case 'x' : resultado = i * j; break; } System.out.print(i + " " + String.valueOf(tabuada) + " " + j + " = " + resultado + "\t"); } System.out.println(); } } }

Java - 36

Comando break Fora a sada de um comando de repetio ou do comando switch Comando continue Fora o incio da prxima iterao de um comando de repetio Programa(s) Demonstrao comandos.ComandoBreakContinue.java

/** * Demonstrao do comando break e continue */ package comandos; public class ComandoBreakContinue { public static void main(String[] args) { for (int i = 0; i <= 1000 ; i++ ) { if ( i == 10 ) break; System.out.print(i + " "); } System.out.println(); for (int i = 0; i <= 20 ; i++) { if ( i <= 10 ) continue; System.out.print(i + " "); } } }

Java - 37

Exerccio(s)

Exerccio 2: Resolva os problemas abaixo com applications Java

Problema 1: "Leia um valor inteiro representando o valor solicitado para saque num caixa eletrnico, em seguida, sabendo que o caixa est alimentado com notas de 1, 5, 10, 50 e 100 reais, calcule e escreva quantas notas de cada valor sero necessrias para atender a solicitao de saque" Problema 2: "Leia um salrio, atualize e escreva-o de acordo com a tabela abaixo" Faixa salarial at 1.000,00 acima de 1.000,00 e at 2.000,00 acima de 2.000,00 Percentual de aumento 30% 20% 10%

Problema 3: Ler trs valores float e imprimir se estes podem ou no formar os lados de um tringulo e qual tringulo seria (Equiltero, Isceles ou escaleno). Observao: Para formar os lados de um tringulo cada um dos valores deve ser menor que a soma dos outros dois. Um tringulo pode ser : equiltero (3 lados iguais), issceles (apenas 2 lados iguais) e escaleno (3 lados diferentes). Problema 4: Leia o nome, as trs notas e o nmero de faltas de um aluno e calcule e imprima sua situao ("Aprovado", "Reprovado por Falta" ou "Reprovado por mdia"). Observao: A mdia para aprovao 5,0 (cinco) e o limite de faltas 18 e a reprovao por falta sobrepe a reprovao pode mdia. Problema 5: Leia um conjunto de nmeros inteiros, onde o flag ser o valor 0 (zero) e em seguida escreva a mdia dos nmeros lidos e o maior valor lido. Problema 6: Leia (ou inicialize) um vetor com 10 elementos de nmeros inteiros e em seguida leia um conjunto de nmeros inteiros e para cada nmero lido informe se o mesmo est ou no presente no vetor. Problema 7: Leia (ou inicialize) uma matriz 5x5 de nmeros inteiros e em seguida escreva cada valor presente na matriz e quantas vezes o mesmo aparece na matriz.

Java - 38

Introduo a Orientao a Objetos


A metodologia orientada a objetos representa um modo muito diferente dos enfoques usuais sustentados por linguagens de programao estruturadas. Os recursos fornecidos pela metodologia orientada a objetos suportam conceitos que tornam a soluo de problemas pelo computador uma atividade mais humanizada. A programao orientada a objetos um mtodo relativamente novo na concepo e implementao de sistemas de software. Seus maiores objetivos so aumentar a produtividade do programador atravs de uma maior expansibilidade e reutilizao de software, alm de controlar a complexidade e o custo de manuteno do mesmo. A programao orientada a objetos centraliza-se nos seguintes conceitos : Tipos de dados abstratos, herana e polimorfismo. O objetivo principal da orientao a objetos permitir que os programas sejam organizados de forma a espelhar o modo como os objetos so organizados no mundo real.

Java - 39

Tipos de Dados Abstratos


Representam a parte central da metodologia orientada a objetos. Um tipo de dado abstrato um modelo formado por propriedades (atributos) e operaes (mtodos), onde estas definem o comportamento bsico do mesmo. Tipo de dado abstrato permite a modelagem de entidades do mundo real de uma forma mais natural, pois estamos acostumados a lidar com "objetos" os quais possuem caractersticas "atributos" e funcionalidades "mtodos".

Classe
Representa a implementao de um tipo de dado abstrato, onde a mesma possuir a declarao dos atributos e implementao dos mtodos. Uma classe representa o "molde" atravs do qual os objetos sero criados, assim a definio de uma classe possui todas as propriedades e funes que caracterizam o comportamento de qualquer objeto da classe.

Objeto
a instncia de uma classe possuindo valores prprios para os atributos definidos na classe.

Encapsulamento
Mecanismo utilizado com o objetivo de esconder detalhes de implementao das classes, permitindo assim, maior domnio da complexidade, pois uma classe deve ofertar apenas o que ela pode fazer e no como ela faz. Uma classe deve impedir o acesso aos seus atributos e mtodos internos e disponibilizar mtodos pblicos, os quais representam a "real" funcionalidade da classe. Dessa forma possvel utilizar uma classe como um objeto real, pois assistimos televiso, ouvimos rdio, ..., sem ter a menor idia de como os mesmos funcionam internamente, basta apenas saber como interagir (ligar, desligar, mudar de canal, ...) com os mesmos.

Java - 40

Mensagem
a forma como um objeto interage com outro objeto, corresponde a chamada (execuo) de um mtodo do objeto, o que pode exigir a passagem de parmetro(s).

Herana
a capacidade de herdar atributos e mtodos de uma classe j definida (superclasse), possibilitando estender o comportamento de uma classe adicionando novos atributos e mtodos (subclasse). A grande vantagem da herana permitir o reaproveitamento de cdigo, pois a subclasse recebe os atributos e mtodos da superclasse e permite a implementao de novas funcionalidades.

Java - 41

Orientao a Objetos em Java


Pacotes
As classes Java so organizadas em pacotes, os quais so estruturas de diretrios com a finalidade de melhor agrupar e organizar as classes. Outras vantagens obtidas com a utilizao de pacotes so evitar conflito de nomes e proteger o acesso s classes. A criao de um pacote consiste na criao de uma estrutura de diretrio, colocao das classes nesses diretrios e definio do pacote nas classes atravs do identificador package seguido do nome do pacote. Para utilizar classes necessrio import-las atravs do identificador import seguido de nomeDoPacote.NomeDaClasse ou nomeDoPacote.* quando for necessrio importar todas as classes do pacote (diretrio). Programa(s) Demonstrao oo.controleEstoque.*

Java - 42

Arquivos JAR (Java Archive) e CLASSPATH


So arquivos compactados e independentes de plataforma que agregam classes Java e arquivos utilizados por estas classes. Os applets normalmente so colocados num arquivo .jar contendo os arquivos .class, imagens e sons utilizados pelo applet, facilitando assim o download do mesmo. Normalmente bibliotecas de classes so distribudas em arquivos .jar, os quais podem ser inseridos na varivel CLASSPATH da mquina virtual Java, aps o que as classes contidas no jar podem ser importadas (utilizadas). O arquivo .jar usa o mesmo algoritmo de compactao do programa zip, tendo a peculiaridade de possuir no diretrio meta-inf o arquivo Manifest.MF, o qual possui atributos para os arquivos contidos no jar e pode indicar qual a classe main a ser executada quando o comando java jar arquivo.jar for executado. Programa(s) Demonstrao ..\CursoJava\Standard\Fontes\jar\ControleEstoque.jar

Java - 43

Classe
Em Java uma classe definida atravs da palavra reservada class, normalmente cada classe fica num arquivo fonte separado. A definio de uma classe dividida em declarao e corpo da classe, onde na declarao so definidas a sua visibilidade, nome, superclasse e interfaces. E no corpo da classe so definidos os atributos e os mtodos. Normalmente as classes possuem um tipo de mtodo especial chamado construtor, o qual possui o mesmo nome da classe e utilizado para instanciar objetos da classe. possvel tambm definir um mtodo com a assinatura protected void finalize(), o qual ser executado pelo garbage collector antes do objeto ser retirado da memria. A definio de uma classe feita de acordo com a sintaxe abaixo public abstract final class NomeDaClasse extends SuperClasse implements Interfaces { Corpo da Classe } Acesso pblico No pode ser instanciada Indicao que nenhuma outra classe pode herd-la Nome da Classe Classe a ser estendida (Herana) Interfaces a serem implementadas Atributos e mtodos

Java - 44

Programa(s) Demonstrao

oo.cadastroDeClientes.Cliente.java

/** * Classe modelando cliente com o objetivo de demonstrar os seguintes * conceitos de orientao a objetos : Classe, Encapsulamento e Membros * (Atributos e Mtodos) */ package oo.cadastroDeClientes; /* Definio da classe */ public class Cliente { /* Corpo da classe */ /* Atributos da classe */ private int matrcula; //Matrcula do cliente private String nome; //Nome do cliente private char plano; //Plano de assinatura do cliente /* Mtodos da classe */ /* Construtor */ public Cliente() { super(); } /* Construtor */ public Cliente (int matrcula, String nome, char plano) { setMatrcula(matrcula); setNome(nome); setPlano(plano); } /* Mtodos para leitura e escrita dos atributos */ public void setMatrcula (int matrcula) { this.matrcula = matrcula; } public void setNome (String nome) { this.nome = nome; } public void setPlano (char plano) { this.plano = plano; } public int getMatrcula () { return matrcula; } public String getNome () { return nome; } public char getPlano () { return plano; } /* Mtodo que escreve os atributos do cliente na sada padro */ public void escreve() { System.out.print(matrcula + " | " + nome); if (plano == '1') System.out.println(" | 20 horas"); else if (plano == '2') System.out.println(" | Horas livres"); else System.out.println(" | Plano Invlido"); } }

Java - 45

Encapsulamento
O encapsulamento feito atravs da definio da visibilidade de classes, atributos e mtodos. A visibilidade definida pelos identificadores: private, protected e public. Quando nenhum destes identificadores usado a visibilidade definida package. Classes somente podem possuir visibilidades public ou package. Identificador public private protected package Visibilidade Qualquer classe de qualquer pacote. Apenas na prpria classe. Na prpria classe, sub-classes e classes no mesmo pacote. Classes do mesmo pacote.

Observao: Normalmente os atributos de uma classe devem ser privados e o acesso (atribuio e leitura) destes devem ser feitos atravs de mtodos pblicos. comum tambm a existncia de mtodos privados com a finalidade de auxiliar os mtodos pblicos, esses mtodos privados so comumente chamados de mtodos de servio. Os mtodos pblicos representam o que a classe oferece.

Java - 46

Membros de Classe
Os atributos e mtodos de uma classe so chamados de membros da classe e os mesmo so definidos no corpo da classe.

Atributos
So as variveis da classe podendo ser de tipos primitivos ou outras classes. Onde as mesmas so definidas de acordo com a sintaxe abaixo.

Visibilidade Tipo nomeDoAtributo [ = ValorInicial ];

Java - 47

Mtodos
Cada mtodo possui uma assinatura e corpo, onde a assinatura definida por: Visibilidade, Tipo de Retorno, Nome e Lista de Parmetros. E o Corpo representa a implementao do mtodo. No corpo de um mtodo o identificador this pode ser utilizado para fazer referncia a uma varivel da classe, pois comum que parmetros possuam nomes iguais a variveis de classe, dessa forma o identificador this serve para resolver conflitos de nomes entre parmetros e variveis da classe. Na verdade o identificador this uma referncia ao objeto corrente, ou seja, aquele no qual o mtodo est sendo executado. E this() representa uma chamada ao construtor da classe. A declarao de um mtodo feita de acordo com a sintaxe abaixo. Visibilidade TipoDeRetorno/void nomeDoMtodo ([Lista de Parmetros]) { Corpo do mtodo [ return expresso_de_retorno ] } Sendo que, quando o mtodo no necessitar retorna valor, no lugar do TipoDeRetorno deve ser utilizado o identificador void e a expresso "return expresso_de_retorno" no dever existir no corpo do mtodo. Observao: Em Java todo parmetro passado por valor para um mtodo. Programa(s) Demonstrao oo.cadastroDeClientes.Cliente.java

Java - 48

Objeto
Um objeto criado a partir de uma classe atravs do identificador new seguido do construtor da classe. O nomeDoObjeto na verdade uma referncia para o objeto criado.

TipoDoObjeto nomeDoObjeto [= new Construtor([Parmetros])];

Java - 49

Mensagem
a chamada a um mtodo atravs do nome da classe ou objeto seguido de ".", nome do mtodo e lista de parmetros entre parntesis. NomeDaClasse.nomeDoMtodo([ Lista de Parmetros ]) nomeDoObjeto.nomeDoMtodo([ Lista de Parmetros ]) Programa(s) Demonstrao oo.cadastroDeClientes.ClienteApp

/** * Application Demonstrandos as classes : Cliente, ClientePF, ClientePJ e * Clientes */ package oo.cadastroDeClientes; public class ClienteApp { public static void main (String[] args) { /* Declarando e instanciando um objeto do tipo Clientes */ Clientes clientes = new Clientes(50); /* Declarando um objeto do tipo Cliente */ Cliente cliente; /*Instanciando um objeto do tipo Cliente */ cliente = new Cliente(1, "Pel", '2'); /* inserindo em clientes */ clientes.insere(cliente); cliente = new Cliente(2, "Guga", '1'); clientes.insere(cliente); cliente = new Cliente(3, "Pop", '2'); clientes.insere(cliente); cliente = new Cliente(4, "Senna", '2'); clientes.insere(new Cliente(5,"Anderson",'8')); System.out.println(clientes.quantidade() + " Clientes"); clientes.escreve(); /* Instanciando um objeto do tipo ClientePF */ ClientePF clientePF = new ClientePF(5, "Jos Maria", '1', "661.764.335-68"); clientePF.escreve(); clientes.insere(clientePF); /* Instanciando um objeto do tipo ClientePJ */ ClientePJ clientePJ = new ClientePJ(6, "Infonet", '2', "99.999.999.9999"); clientePJ.escreve(); clientes.insere(clientePJ); System.out.println("\nTodos os Clientes"); /* * Exemplo de Polimorfismo, pois os mtodos escreve() de * ClientePF e ClientePJ so chamados automaticamente */ System.out.println(clientes.quantidade() + " Clientes"); clientes.escreve(); /* Converso explcita de Cliente ClientePJ */ cliente = new ClientePJ(6, "Sefaz",'1', "99.999.999.9999"); System.out.println(((ClientePJ)cliente).cgc()); } }

Java - 50

Sobrecarga de Mtodos
Em Java possvel que uma classe possua mtodos com o mesmo nome, desde que, as listas de parmetros sejam diferentes em quantidade, tipo ou em ordem. Esse tipo de polimorfismo chamado de sobrecarga de mtodos. Observao: O tipo de retorno no diferencia mtodos, ou seja, no possvel definir mtodos com nome iguais e lista de parmetros iguais, mesmo que possuam tipos de retorno diferentes. Programa(s) Demonstrao oo.sobreCarga.*

/** * Classe com o objeto de demonstrar a sobrecarga de mtodos */ package oo.sobreCarga; public class SobreCarga { public static float media (int a, int b) { return ( a + b ) / 2; } public static float media (float a, float b) { return ( a + b ) / 2; } public static float media (int a, int b, int c) { return ( a + b + c ) / 3; } public static float media ( float a, float b, float c ) { return ( a + b + c ) / 3; } /* No possvel ter um mtodo com apenas o tipo de retorno diferente */ /* public static double media ( float a, float b, float c ) { return ( a + b + c) / 3; } */ } /** * Classe com o objeto de demonstrar a sobrecarga de mtodos */ package oo.sobreCarga; public class SobreCargaApp { public static void main (String[] args) { System.out.println( SobreCarga.media( 5, 7 ) ); System.out.println( SobreCarga.media( 5, 7, 3 ) ); System.out.println( SobreCarga.media( 8f, 2f ) ); System.out.println( SobreCarga.media( 5.3f, 7.9f, 3.1f ) ); /* Converso explicita pra float */ System.out.println( SobreCarga.media( 8f, 4 ) ); } }

Java - 51

Herana
Para que uma classe Java (SubClasse) herde atributos e mtodos de outra classe Java (SuperClasse) basta que na declarao da SubClasse o identificador extends seja seguido do nome da SuperClasse. Assim todos os membros "pblicos" sero herdados pela SubClasse. Uma SubClasse apenas pode possuir uma SuperClasse, ou seja, herana mltipla no permitida em Java. Caso mtodos tenham sido redefinidos e seja necessrio chamar os mtodos da SuperClasse o identificador super deve ser utilizado (super.MetodoDaSuperClasse()), sendo que super() representa o construtor da SuperClasse. Toda classe Java automaticamente subclasse de Object.

Java - 52

Programa(s) Demonstrao

oo.cadastroDeClientes.*

/** * Classe modelando cliente com o objetivo de demonstrar os seguintes * conceitos de orientao a objetos : Classe, Encapsulamento e Membros * (Atributos e Mtodos) */ package oo.cadastroDeClientes; /* Definio da classe */ public class Cliente { /* Corpo da classe */ /* Atributos da classe */ private int matrcula; //Matrcula do cliente private String nome; //Nome do cliente private char plano; //Plano de assinatura do cliente /* Mtodos da classe */ /* Construtor */ public Cliente() { super(); } /* Construtor */ public Cliente (int matrcula, String nome, char plano) { setMatrcula(matrcula); setNome(nome); setPlano(plano); } /* Mtodos para leitura e escrita dos atributos */ public void setMatrcula (int matrcula) { this.matrcula = matrcula; } public void setNome (String nome) { this.nome = nome; } public void setPlano (char plano) { this.plano = plano; } public int getMatrcula () { return matrcula; } public String getNome () { return nome; } public char getPlano () { return plano; } /* Mtodo que escreve os atributos do cliente na sada padro */ public void escreve() { System.out.print(matrcula + " | " + nome); if (plano == '1') System.out.println(" | 20 horas"); else if (plano == '2') System.out.println(" | Horas livres"); else System.out.println(" | Plano Invlido"); } }

Java - 53

/** SubClasse de Cliente com o objetico de demonstrar os seguintes conceitos de orientao a objetos : Herana, Redefinio de Mtodos, Polimorfismo e SobreCarga de Mtodos */ package oo.cadastroDeClientes; public class ClientePF extends Cliente { private String cpf; /* Construtores */ public ClientePF () { super(); } public ClientePF (int matrcula, String nome, char plano) { /* Chamando o construtor da superclasse (Cliente) */ super( matrcula, nome, plano ); } public ClientePF (String cpf) { /* Chamando o construtor da superclasse (Cliente) */ super(0, , 1); setCPF( cpf ); } public ClientePF (int matrcula, String nome, char plano, String cpf) { /* Chamando o construtor da superclasse (Cliente) */ super(matrcula, nome, plano); setCPF ( cpf ); } /* Mtodos para leitura e escrita dos atributos */ public void setCPF (String cpf) { this.cpf = cpf; } public String getCPF () { return cpf; } /* Redefinio do mtodo escreve da superclasse Cliente */ public void escreve () { System.out.println(*****************************); System.out.println(Cliente Pessoa Fsica); /* Chamndo escreve da superclasse */ super.escreve(); System.out.println(cpf : + cpf); System.out.println(*****************************); } }

Java - 54

/** * SubClasse de Cliente com o objetico de demonstrar os seguintes conceitos de * orientao a objetos : Herana, Redefinio de Mtodos, Polimorfismo e * SobreCarga de Mtodos */ package oo.cadastroDeClientes; public class ClientePJ extends Cliente { private String cgc; public ClientePJ () { super(); } public ClientePJ (int matrcula, String nome, char plano, String cgc) { super(matrcula, nome, plano); this.cgc = cgc; } public void cgc (String cgc) { this.cgc = cgc; } public String cgc () { return cgc; } public void escreve () { System.out.println("*****************************"); System.out.println("Cliente Pessoa Jurdica"); super.escreve(); System.out.println("cgc : " + cgc); System.out.println("*****************************"); } }

Java - 55

Redefinio de Mtodos
possvel que mtodos herdados sejam redefinidos, ou seja, implementados de uma forma diferente bastando para isso que seja criado um mtodo com a mesma assinatura que o mtodo a ser redefinido (Caso o mtodo herdado seja final no possvel redefini-lo). Programa(s) Demonstrao oo.cadastroDeClientes.*

Java - 56

Classes e Mtodos Abstratos


Numa hierarquia de classes, quanto mais alta for uma classe, mais abstrata sua definio. Uma classe no topo (raiz) de uma hierarquia de classes define o comportamento e atributos comuns a todas as subclasses, e quando mais as classes estiveram prximas das folhas (abaixo) na hierarquia de classes, mas especializadas elas sero. Assim possvel definir classes em Java que sirvam apenas como base para uma hierarquia de classe, sendo que classes abstratas no podem ser instanciadas. A sua utilidade apenas servir como superclasse, onde as subclasses iro acrescentar e redefinir seus mtodos a medida da necessidade. Para definir uma classe como abstrata basta colocar o identificador abstract na definio da mesma.

Java - 57

Programa(s) Demonstrao
/** * Classe asbstrata pessoa */ package oo.classeAbstrata;

oo.classeAbstrata.*

public abstract class Pessoa { private String identificacao; private String nome; private String dataNascimento; private char sexo; public Pessoa (String id, String nome, String datNasc, char sexo) { this.nome = nome; this.dataNascimento = datNasc; this.sexo = sexo; } public void id (String id) { this.identificacao = id; } public void nome (String nome) { this.nome = nome; } public void dataNascimento (String dataNascimento) { this.dataNascimento = dataNascimento; } public void sexo (char sexo) { this.sexo = sexo; } public String id () { return identificacao; } public String nome () { return nome; } public String dataNascimento () { return dataNascimento; } public char sexo () { return sexo; } public String toString () { return(nome + " | " + dataNascimento + " | " + sexo); } }

Java - 58

Classes, Mtodos e Variveis Final


possvel definir uma classe, mtodo ou varivel como final, significando que : Classes final no podem ser herdadas Mtodos final no podem ser redefinidos Variveis final no podem ter seu contedo alterado. Para definir uma classe, mtodo ou varivel como final, basta acrescentar o identificador final na definio dos mesmos. Observao: Mtodos final so executados com maior eficincia pela JVM. Observao: Todos os mtodos de uma classe final tambm so final, independente de possuir o identificador final na sua declarao. Observao: Algumas das classes da API Java so final tais como : java.lang.String, java.lang.Math, java.net.InetAddress, ... Programa(s) Demonstrao oo.classeFinal.MinhaString

/** * Classe que tentar herdar de String, mas no possvel, pois * String final e no pode ser superclasse * Ser gerado erro de compilao */ package oo.classeFinal; public class MinhaString /* extends String */ { public MinhaString() { } }

Java - 59

Membros Estticos
Atributos e mtodos podem ser de classe ou de objeto (instncia). A diferena entre ambos est no fato de que os membros de instncia so propriedades de cada objeto e os membros de classe so compartilhados por todos os objetos. Assim quando houver a necessidade de compartilhar o contedo de um atributo com todos os objetos de uma classe, esse atributo dever ser esttico. J os mtodos estticos possuem a caractersticas de poder serem chamados diretamente atravs da classe, sem a necessidade de instanciar um objeto. Os mtodos estticos somente podem utilizar atributos estticos. Para definir um membro como esttico basta colocar o identificador static na sua declarao. Programa(s) Demonstrao oo.membrosEstticos.*

/** * Classe para demonstrar membros estticos */ package oo.membrosEstaticos; public class MembrosEstaticos { /* Atributo esttico */ private static int contObjetos = 0; public MembrosEstaticos () { contObjetos++; } /* Mtodo esttico */ public static void numeroDeOjetos () { System.out.println("Nmero de objetos instanciados : " + contObjetos); } } /** * Application para demonstrar membros estticos */ package oo.membrosEstaticos; public class MembrosEstaticosApp { public static void main (String[] args) { for (int i = 1; i <= 10; i++) { MembrosEstaticos me = new MembrosEstaticos(); /* chamada ao mtodo esttico */ me.numeroDeOjetos(); } /* chamada ao mtodo esttico */ MembrosEstaticos.numeroDeOjetos(); } }

Java - 60

Classes Internas
So classes definidas dentro de outras classes. Normalmente so utilizadas para simular a estrutura de dados conhecida como registro. Observao: As classes internas geram arquivos .class diferentes sendo que o nome segue o seguinte formato : Classe$ClasseInterna.class Programa(s) Demonstrao oo.classeInterna.*

/** * Classe Alunos contendo a classe interna Aluno */ package oo.classeInterna; public class Alunos { private Aluno[] alunos; private int posNovoAluno = 0; public Alunos() { alunos = new Aluno[10]; } public void insere (int mat, String nome, float n1, float n2, float n3) alunos[posNovoAluno] = new Aluno(mat, nome, n1, n2,n3); posNovoAluno++; } public void escreve () { String linha = "****************************************************"; System.out.println(linha); for (int i = 0; i < posNovoAluno; i++) { alunos[i].escreve(); } System.out.println(linha); } /* Classe Interna : Aluno */ class Aluno { int matricula; String nome; float nota1, nota2, nota3; Aluno (int mat, String nome, float n1, float n2, float n3) { this.matricula = mat; this.nome = nome; this.nota1 = n1; this.nota2 = n2; this.nota3 = n3; } void escreve() { String linha = "_________________________________________________"; System.out.println(linha + "\nMatrcula : \t" + matricula + "\nNome : \t" + nome + "\nNotas : \t" + nota1 + "\t" + nota2 + "\t" + nota3 + "\n" + linha); } } } {

Java - 61

Interfaces
Representam a definio de comportamentos esperados na definio de classes, contendo apenas definies de mtodos abstratos e constantes, ou seja, no possuem variveis de instncia ou implementao de mtodos. A definio de uma interface feita semelhante a uma classe, sendo que no lugar do identificador class usado interface. Uma interface no pode ser instanciada, seu objetivo definir um modelo de comportamento abstrato para classes. Para que uma classe implemente uma interface, na definio da classe deve ser colocado o identificador implements seguido da lista de interfaces separadas por vrgulas. Quando uma classe implementa uma interface, obrigado a essa classe implementar todos os mtodos definidos na interface e a classe pode acessar qualquer constante definida na interface. Programa(s) Demonstrao oo.classeAbstrata. *

/** * Interface modelando as operaes de verificao da situao final * de alunos */ package oo.classeAbstrata; public interface public static public static public static public static public static public public public public public public public public public public public } SituacaoAcademica { final float MEDIA = 5.0f; final int FALTAS = 18; final String AP = "Aprovado"; final String RF = "Reprovado por Falta"; final String RM = "Reprovado por Mdia"; void void void void void faltas (int faltas); notas (float n1, float n2, float n3); nota1 (float n); nota2 (float n); nota3 (float n);

abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract

String situacaoFinal (); float media (); int faltas (); float nota1 (); float nota2 (); float nota3 ();

Java - 62

Polimorfismo
Em Java todo objeto de uma subclasse pode ser tratado como um objeto da superclasse, e isso permite que objetos sejam tratados de forma genrica dentro de uma hierarquia de classe. possvel tambm realizar uma converso explicita de um objeto de uma classe para outra, essa operao conhecida como typecast e para isso necessrio colocar o tipo da classe, entre parntesis antes do objeto a ser convertido: (Classe) Objeto. Sendo que as classes origem e destino da converso devem ter relao de herana. Obaservao : O typecast de uma subclasse para uma superclasse automtico e garantido, mas o inverso no garantido e necessrio o typecast explcito. possvel verificar se um objeto de uma determinada classe atravs do operador instanceof. Programa(s) Demonstrao oo.cadastroDeClientes.*

Java - 63

Tratamento de Excees
Uma exceo em Java um sinal que alguma condio excepcional aconteceu. Por exemplo, solicitao de abertura de um arquivo no encontrado, ndice de um array fora de faixa ou uma conexo de rede perdida. Verificaes com recursos convencionais de programao por essas situaes indesejadas, normalmente levam a programas de difcil compreenso e manuteno, pois comum haver mais cdigo tratando tais situaes, que cdigo desempenhando realmente o objetivo do programa. Java prover um mecanismo para tratar de forma sistemtica essas situaes indesejadas denominado tratamento de excees. Excees em Java so objetos e a hierarquia de classe possui diversas classes representando excees. O uso da API Java, em muitos casos, exige o tratamento dessas excees para verificar as potenciais situaes de erros na execuo dos programas. Esse mecanismo baseado no paradigma Tentar-e-Capturar (try-and-catch), onde, quando um comando puder gerar excees, o mesmo ser tentado (executado) e caso a exceo ocorra, a mesma ser capturada. Para tratar excees linguagem Java fornece a seguinte estrutura de comandos: try { /* Comandos do Try */ } catch ( TipoDaExceo1 ObjetoDaExceo1 ) { /* Tratamento da Exceo1*/ } ... { } catch ( TipoDaExceo2 ObjetoDaExceo2 ) { /* Tratamento da Exceo2*/ } finally { /* Comandos do Finally*/ } , onde : 1 2 3 Os Comandos do Try sero executados Caso ocorram excees, o Tratamento da Exceo ocorrida ser executado Os Comandos do Finally sero executados Podem existir diversos catchs. Apenas uma clusula Finally pode ser usada por try. Assim que um tratamento de exceo for executado os demais sero ignorados. Os Comandos do Finally sempre sero executados. Assim como qualquer classe uma exceo deve ser importada para ser usada.

Observaes

Caso um mtodo possa gerar uma exceo possvel que na definio do mesmo seja utilizado o identificador throws seguido da lista das possveis excees geradas, dessa forma fica "obrigado" (Existem excees que no obrigam) ao usurio do mtodo, tratar tais excees. Ainda assim possvel o levantamento explcito de uma exceo atravs do identificador throw seguido de new e o construtor da classe da exceo. Programa(s) Demonstrao oo.tratamentoDeExcecoes.*

Java - 64

/** * Classe representando um array de inteiros, com o objetivo de demonstrar * Tratamento de Excees */ package oo.tratamentoDeExcecoes.arrayDeInteiros; import java.lang.NegativeArraySizeException; import java.lang.ArrayIndexOutOfBoundsException; import java.lang.ArithmeticException; public class ArrayDeInteiros { private int[] array; int posNovo ; public ArrayDeInteiros() { posNovo = 0; array = new int[10]; } /* Obrigando o usurio do mtodo a capturar e tratar a exceo */ public ArrayDeInteiros( int tam ) throws NegativeArraySizeException { posNovo = 0; array = new int[tam]; } public ArrayDeInteiros( int[] array ) { this.array = array; } /* Personalizando a mensagem da exceo e lanando-a */ public void insere ( int pos, int valor ) throws ArrayIndexOutOfBoundsException { try { array[pos] = valor; } catch ( ArrayIndexOutOfBoundsException e ) { String msg = " Erro-> Posio invlida do array : " + pos; throw new ArrayIndexOutOfBoundsException(msg); } } /* Personalizando a mensagem da exceo e lanando-a */ public void insere ( int valor ) throws ArrayIndexOutOfBoundsException { try { array[posNovo] = valor; posNovo++; } catch ( ArrayIndexOutOfBoundsException e ) { String msg = e.getMessage() + " Erro-> quantidade mxima de elementos encontrada " + array.length; throw new ArrayIndexOutOfBoundsException(msg); } } /* Capturando e tratando a exceo */ public float media (int posInicial, int posFinal) throws ArrayIndexOutOfBoundsException, ArithmeticException { float soma = 0; float media = 0; int quantElementos = (posFinal - posInicial + 1); if ( quantElementos == 0 ) { throw new DivideByZeroException(); } try { for (int i = posInicial; i <= posFinal; i ++) {

Java - 65

soma += array[i]; } media = ( soma / quantElementos ); } catch (ArrayIndexOutOfBoundsException e1 ) { String msg = "Erro: Intervalo[" + posInicial + "..." + posFinal + "] Invlido"; throw new ArrayIndexOutOfBoundsException(msg); } catch ( ArithmeticException e2 ) { String msg = "Divisao por zero"; throw new ArrayIndexOutOfBoundsException(msg); } return media; } public float media () { try { return media(0, array.length - 1); } catch ( DivideByZeroException e ) { System.out.println("Erro :" + e.getMessage()); } finally { return 0; } } public String toString() { StringBuffer sb = new StringBuffer(); sb.append("["); for (int i = 0; i < (array.length - 1); i ++) { sb.append(array[i] + ","); } /* Caso o tamanho do array seja 0 */ try { sb.append(array[array.length - 1]); } catch (ArrayIndexOutOfBoundsException e) { /* */ }; sb.append("]"); return sb.toString(); } public void escreve () { System.out.println( toString() ); } /* Exemplo de throws com uma exceo que obriga o seu tratamento*/ public void preenche (int valor) throws Exception { for (int i = 0; i < array.length; i ++) { array[i] = valor; } } }

Java - 66

package oo.tratamentoDeExcecoes.arrayDeInteiros; public class DivideByZeroException extends ArithmeticException { public DivideByZeroException() { super("Diviso por zero."); } public DivideByZeroException(String msg) { super(msg); } } /** * Application demonstrando o uso da classe ArrayDeInteiros */ package oo.tratamentoDeExcecoes.arrayDeInteiros; public class ArrayDeInteirosApp { public static void main(String[] args) { int[] n = {6,1,2,3,4,5,6,7,8,9} ; ArrayDeInteiros inteiros = new ArrayDeInteiros( n ); inteiros.escreve(); try { inteiros.insere(0,0); } catch (ArrayIndexOutOfBoundsException e) { System.out.println( e.getMessage() ); } inteiros.escreve(); try { inteiros.insere(-1,0); } catch (ArrayIndexOutOfBoundsException e) { System.out.println( e.getMessage() ); } try { System.out.println(inteiros.media(2,1)); } catch ( Exception e ) { System.out.println( e.getMessage() ); } try { inteiros.preenche(5); } catch (Exception e) {} inteiros.escreve(); } }

Java - 67

JavaDoc
JavaDoc uma ferramenta para gerao de documentao de classes, distribuda com o jdk (Java Development Kit), sendo que, processa classes java e transforma os comentrios /**...*/ em documentos html, os quais possibilitam um "fcil" entendimento e uso das classes (API) documentadas. Para que a documentao seja gerada adequadamente tags reconhecidas pelo JavaDoc devem ser inseridas nos comentrios. Tag @author @version @param @return @exception @see autor verso parmetro do mtodo retorno do mtodo exceo veja tambm Descrio

Java - 68

Programa(s) Demonstrao

controleEstoque.*

/** * @author Jos Maria Rodrigues Santos Junior * zemaria@infonet.com.br - www.unit.br/zemaria * */ package oo.controleDeEstoque.cliente; import oo.controleDeEstoque.util.Registro; import oo.controleDeEstoque.util.Endereco; /** * Classe representando um cliente * @see oo.controleDeEstoque.util.Registro * @see oo.controleDeEstoque.util.Endereco * @see oo.controleDeEstoque.cliente.DataAniversario */ public class Cliente extends Registro { /** data de aniversrio */ public DataAniversario aniv; /** telefone */ private String fone; /** observacao */ private String obs; /** endereo */ public Endereco end; /** * Construtor da classe * @param cod cdigo do cliente * @param nome nome do cliente * @param end endereo do cliente * @param aniv data de aniversrio * @param fone telefone * @param obs observao */ public Cliente (int cod, String nome, Endereco end, DataAniversario aniv, String fone, String obs) { super(cod,nome); this.end = end; this.aniv = aniv; this.fone = fone; } /** * atribui o nome * @param nome nome do cliente */ public void nome (String nome) { desc(nome); } /** * obtem o nome * @return nome do cliente */ public String nome () { return super.desc(); } /** * obtem a data de aniversrio * @return data de aniversrio * @see controleDeEstoque.cliente.DataAniversario */

Java - 69

public DataAniversario dataAniversario () { return aniv; } /** * Retorna a representao string do objeto * @return objeto como string */ public String toString () { return "[" + chave() + ", " + desc() + ", " + end + ", " + aniv + ", " + fone + "]"; } }

Comando JavaDoc para gerao da documentao das classes do exemplo, executado no diretrio "C:InfoNet\Treinamento"
C:\devtools\jdk1.3\bin\javadoc.exe -d docs -version -author java\oo\controleDeEstoque\util\Registro.java java\oo\controleDeEstoque\util\Endereco.java java\oo\controleDeEstoque\util\Arquivo.java java\oo\controleDeEstoque\produto\Produtos.java java\oo\controleDeEstoque\produto\Produto.java java\oo\controleDeEstoque\fornecedor\Fornecedores.java java\oo\controleDeEstoque\fornecedor\Fornecedor.java java\oo\controleDeEstoque\fornece\Fornecimentos.java java\oo\controleDeEstoque\fornece\Fornece.java java\oo\controleDeEstoque\cliente\DataAniversario.java java\oo\controleDeEstoque\cliente\Clientes.java java\oo\controleDeEstoque\cliente\Cliente.java java\oo\controleDeEstoque\CliForPro.java
Site(s) http://java.sun.com/products/jdk/javadoc/index.html#javadoc1.3documents

Java - 70

Code Conventions
Um fator determinante na qualidade de um programa como o mesmo est escrito, dessa forma, veremos algumas regras que devem ser seguidas para padronizar a escrita de programas em Java a fim de evitar dificuldades na leitura dos mesmo, regras estas extradas de publicao da prpria Sun como proposta para a padronizao da escrita de programas em Java. Regras de Padronizao na Escrita de Programas Java
O contedo de arquivos fontes JAVA segue a seguinte ordem: 1. Comentrios iniciais 2. Parmetros de Pacotes (package) e importao (import) 3. Declarao de Classes (class) ou Interfaces (interface) Todo programa JAVA deve comear com um comentrio contendo : identificao do programador, data de atualizao, informao de direitos autorais e uma breve descrio do objetivo do programa. A tabela a seguir descreve os componentes da declarao de uma classe ou interface e indica em qual ordem os mesmos devem aparecer. 1 Comentrio de documentao da Classe/Interface 2 Parmetro class ou interface 3 Comentrio de implementao da classe/interface 4 Variveis de classe (static) na ordem : public, protected e private 5 Variveis de instncia, na ordem : public, protected e private 6 Construtores 7 Mtodos. Os quais devem ser agrupados por funcionalidade Quatro espaos devem ser usados como unidade de endentao (Tab Space = 4) Uma linha no deve possuir mais de 80 caracteres Quando uma expresso no couber inteiramente em uma linha, a mesma deve ser quebrada seguindo os seguintes princpios : Quebrar aps uma vrgula Quebrar aps um operador Quebrar preferencialmente em parnteses de nvel mais alto Alinhar a nova linha de acordo com a expresso na linha anterior Linhas em branco facilitam a leitura de programas, pois delimitam sees de cdigo relacionadas logicamente. Cada palavra dos identificadores de classes deve comear com letras maisculas Identificadores de pacotes, mtodos e variveis/objetos devem comear com letras minsculas, sendo que, quando possuir outras palavras, s mesmas devero comear com letra maiscula Identificadores de constantes devem ser escritos em letras maisculas e as palavras separadas por "_"

Programa(s) Demonstrao
Site(s)

oo.controleEstoque.*

http://java.sun.com/docs/codeconv/index.html

Java - 71

API Java
A API Java bastante extensa. O JavaDoc da API Java a melhor referncia para o programador Java. Os principais pacotes so : Pacote java.applet java.awt java.beans java.io java.lang java.math java.net java.rmi java.security java.sql java.text java.util Descrio Applets Interface com usurio JavaBeans Entrada e Sada de Dados Classes fundamentais programao Java Operaes matemticas Implementao de aplicaes de rede Chamada Remota de Mtodos Segurana Acesso a Banco de Dados Formatao de texto, datas e nmeros Classes utilitrias. As principais representam estrutura de dados.

javax.accessibility Acessibilidade javax.naming Servio de Acesso de Nomes javax.rmi javax.sound javax.swing RMI-IIOP Som - MIDI (Musical Instrument Digital Interface) Interface Grfica com o usurio

Java - 72

java.lang
Contm classes bsicas para a programao Java e suas classes no precisam ser importadas, pois todo o pacote java.lang importado automaticamente por qualquer classe Java. Classe System Runtime Object Class Descrio Representa o sistema no qual as aplicaes so executadas. Representa o ambiente de execuo. Superclasse de toda classe Java (Raiz da hierarquia de classe), ou seja, qualquer objeto Java um Object. Representao de classes e interface na execuo de programas Java. til para extrair em tempo de execuo informaes sobre objetos, tais como : atributos, mtodos, superclasse, etc. Classes para tratamento de cadeias de caracteres, sendo que a classe String no permite alterao na cadeia de caracteres armazenados. Classes que encapsulam os tipos primitivos, sendo elas : Boolean, Byte, Character, Double, Float, Integer, Long e Short. Operaes matemticas

String StringBuffer Classes Wrappers Math

Java - 73

Programa(s) Demonstrao

api.java.lang.JavaLangSystem

/* @author Jos Maria R S Junior * zemaria@unitnet.com.br / www.unit.br/zemaria * * Aplicao para demonstrar as principais classes do pacote java.lang * Math, Object, String, StringBuffer, System, Execptions e Wrappers * **/ package api.java.lang; import java.util.Properties; import java.util.Enumeration; import java.io.IOException; public class JavaLangSystem { public static void main (String[] args) { /* Classe System */ /* Imprindo na sada padro */ System.out.println("Ol Mundo"); /* Obtendo e imprimindo informaes do Sistema */ Properties prop = System.getProperties(); Enumeration nomesProp = prop.propertyNames(); while (nomesProp.hasMoreElements()) { String nomeProp = nomesProp.nextElement().toString(); String valorProp = System.getProperty(nomeProp); System.out.println(nomeProp + " = " + valorProp); } /* Executando o Garbage Collector */ System.gc(); } }

Java - 74

Programa(s) Demonstrao
package api.java.lang; public class JavaLangObject {

api.java.lang.JavaLangObject

/* Classe demonstrando o mtodo equals */ static class Objeto { String chaveA; String chaveB; Objeto ( String ca, String cb ) { chaveA = ca; chaveB = cb; } public boolean equals ( Objeto obj ) { return chaveA.equals( obj.chaveA ) && chaveB.equals( obj.chaveB ); } public String toString () { return "[" + chaveA + ", " + chaveB + "]"; } } public static Objeto obj1 Objeto obj2 Objeto obj3 void main (String[] args) { = new Objeto( "valor A", "valor B" ); = new Objeto( "valor A", "valor B" ); = new Objeto( "A", "B" );

Objeto obj4 = obj1; System.out.println( System.out.println( System.out.println( System.out.println( obj1.equals( obj1.equals( obj1 == obj2 obj1 == obj4 obj2 ) ); obj3 ) ); ); );

System.out.println( obj1 ); System.out.println( "hashcode : " + obj2.hashCode() ); /* Demonstrao do mtodo clone * Obs : O objeto deve implementar a interface Cloneable */ int[] array1 = {1,2,3,4,5}; int[] array2 = array1; array1[0] = 0; System.out.println(array1[0] + " " + array2[0]); array2 = (int[]) array1.clone(); array1[0] = 1; System.out.println(array1[0] + " " + array2[0]); } }

Java - 75

Programa(s) Demonstrao
package api.java.lang;

api.java.lang.JavaLangClass

import java.lang.reflect.Method; public class JavaLangClass { public static void main(String[] args) { String s = ""; StringBuffer sb = new StringBuffer(); Object o = new Object(); System.out.println(nomeDaClasse(s) + "\n" + metodos(s)); System.out.println(nomeDaClasse(sb)); System.out.println(nomeDaClasse(o)); } public static String nomeDaClasse(Object obj) { return obj.getClass().getName(); } public static String metodos(Object obj) { StringBuffer resp = new StringBuffer(); Method[] metodos = obj.getClass().getMethods(); for (int i = 0; i < metodos.length; i++) { resp.append(metodos[i] + "\n"); } return resp.toString(); } }

Java - 76

Programa(s) Demonstrao
package api.java.lang;

api.java.lang.JavaLangStringStringBuffer

public class JavaLangStringStringBuffer { public static void main (String[] args) { /* Operaes com String */ //String strA = new String (" Jos Maria R S Junior "); String strA = " Jos Maria R S Junior "; for (int i = 0; i < strA.length(); i++) System.out.println("Posio [" + i + "] Caracter + [" + strA.charAt(i) + "]"); System.out.println("Jos : " + strA.indexOf("Jos")); System.out.println("Junior : " + strA.indexOf("Junior")); System.out.println(strA.toLowerCase()); System.out.println(strA.toUpperCase()); System.out.println(strA.trim()); System.out.println(String.valueOf(true)); System.out.println(String.valueOf(Math.pow(3,13))); int tamStrA = strA.length(); System.out.println("Tamanho do Nome : " + tamStrA); String strB = strA.substring(8,17); System.out.println("Caracteres de 8 a 17 : " + strB); /* Operaes com StringBuffer */ StringBuffer strbA = new StringBuffer("Jos"); strbA.append(" R S Junior"); strbA.insert(5,"Maria "); strbA.replace(11,12, "Rodrigues Santos"); System.out.println(strbA.toString()); String s1 = new String( "Infonet" ); String s2 = new String( "Infonet" ); if ( s1 == s2 ) { System.out.println( "( s1 == s2 )" ); } if ( s1.equals( s2 ) ) { System.out.println( "( s1.equals( s2 ) )" ); } System.out.println( "Objeto String".length() ); } }

Java - 77

Programa(s) Demonstrao
package api.java.lang;

api.java.lang.JavaLangWrappers

public class JavaLangWrappers { public static void main (String[] args) { System.out.println(Integer.MAX_VALUE); System.out.println(Integer.MIN_VALUE); int inteiro = 0; /* String para inteiro */ try { inteiro = Integer.parseInt("1456"); } catch ( NumberFormatException e ) { System.out.println( "Erro na converso :" } /* Inteiro para String */ String str = Integer.toString(inteiro); /* String na base 2*/ str = Integer.toBinaryString(inteiro); System.out.println(inteiro + " em binrio " /* String na base 8*/ str = Integer.toOctalString(inteiro); System.out.println(inteiro + " em Octal " + /* String na base 16*/ str = Integer.toHexString(inteiro); System.out.println(inteiro + " em Hexadecimal /* Objeto do tipo Interger */ Integer integer = new Integer(234); System.out.println(integer.intValue()); } }

+ e.getMessage() );

+ str); str); " + str);

Java - 78

Programa(s) Demonstrao
package api.java.lang;

api.java.lang.JavaLangMath

public class JavaLangMath { public static void main (String[] args) { /* Imprimdindo potncias de 2 */ int a = 2; int b = 20; for (int i = a; i <= b; i++) { System.out.println(a + " elevado a " + i + " = " + (int) (Math.pow(a,i))); } /* Sorteando um nmero inteiro */ System.out.println("Nmero sorteado = " + (int) (Math.random() * 100)); /* Valor de PI */ System.out.println("PI = " + Math.PI); } }

Java - 79

Exceptions
ArithmeticException ClassCastException Exception IndexOutOfBoundsException NegativeArraySizeException NullPointerException SecurityException ArrayIndexOutOfBoundsException ClassNotFoundException IllegalAccessException InstantiationException NoSuchFieldException NumberFormatException StringIndexOutOfBoundsException ArrayStoreException CloneNotSupportedException IllegalArgumentException IllegalThreadStateException InterruptedException NoSuchMethodException RuntimeException UnsupportedOperationException

IllegalMonitorStateException IllegalStateException

Java - 80

java.util
Pacote que tem como principal objetivo fornecer classes representando estruturas de dados (Colees), sendo que possui tambm classes de uso geral para manipulao de hora e data, internacionalizao, gerao de nmeros randmicos, etc. Uma coleo representa um grupo de objetos agrupados em uma nica classe. As colees Java so capazes de armazenar elementos do tipo Object, dessa forma qualquer objeto criado pode ser armazenado nas classes colees. As colees possuem duas interfaces base (Collection e Map) que determinam o seu padro de comportamento. As classes que implementam Collection armazm objetos, enquanto as que implementam Map armazenam pares de objetos, onde um dos objeto s funciona como chave.
<<Interface>> <<Interface>>

Collection

Map

HashMap

HashTable

<<Interface>>

SortedMap

<<Interface>>

<<Interface>>

Set

List

TreeMap HashSet
<<Interface>>

ArrayList

Vector

LinkedList

SortedSet

TreeSet

Interface Collection Set SortedSet List Map SortedMap

Descrio Interface base que determina quais operaes as classes armazenam colees de objetos deve possuir. Estende a interface Collection no permitindo a repetio de elementos. Estende a Interface Set para manter os elementos ordenados. Estende a interface Collection representando uma lista de elementos. Interface base para classes que armazenam elementos associados a uma chave. Estende a interface Map para armazenar os elementos ordenados pela chave.

Java - 81

Principais Classes Classes Colees Classe Collections Stack Vector HashTable Descrio Possui mtodos estticos para realizar operaes sobre colees, tais como : copia, valor mximo e mnimo, pesquisa, ordenao, etc. Representa a estrutura de dados Pilha. Coleo de objetos, os quais podem ser acessados atravs do ndice. Estrutura de dados Hashtable armazenado pares de objetos (chave + dados), no permite chaves repetidas. Os objetos armazenados devem implementar os mtodos hashcode e equals. Os valores podem ser recuperados pela chave. rvore que armazena pares de objetos (chave + dados), armazenado-os em ordem ascendente de chaves. Garante acesso em ordem de complexidade Log(n). Conjunto de objetos armazenado em ordem ascendente e sem repetio. Garante acesso em ordem de complexidade Log(n).

TreeMap

TreeSet

Observao : As classes que armazena objetos sem repetio necessitam que os objetos a ser armazenados implementem o mtodo public boolean equals(Object obj) e as que armazenam objetos ordenadamente necessitam da implementao da interface comparable e consequente redefinio do mtodo : public int compareTO (Object obj), onde o mesmo deve retorna um valor negativo quando obj for menor, 0 quando for igual e positivo quando for maior. Classes Utilitrias Classe Descrio StringTokenizer Permite quebrar uma string em tokens. Date Classe Data. Calendar Random Permite trabalhar com datas, extraindo seus campos (dia, ms, ano, hora, etc). Gerao de nmeros randmicos.

java.text
Possui um conjunto de classes e interfaces para tratamento de texto, datas, nmeros e mensagens. Principais Classes Classe Descrio SimpleDateFormat Permite formatar, converter e tratar datas. DecimalFormat Permite formatao de nmeros decimais.

Java - 82

Programa(s) Demonstrao
package api.java.util;

api.java.util.Item

public class Item implements Comparable { private String chave; private String campo; public Item ( String chave, String campo ) { setChave( chave ); setCampo( campo ); } public void setChave (String chave ) { this.chave = chave; } public void setCampo (String campo ) { this.campo = campo; } public String getChave () { return chave; } public String getCampo () { return campo; } public String toString () { return "[" + chave + ", " + campo + "]"; } /* Redefinindo o mtodo equals() */ public boolean equals ( Object obj ) { Item item = ( Item ) obj; return getChave().equals( item.getChave() ); } /* Redefinindo o mtodo compareTo() */ public int compareTo ( Object obj ) { Item item = ( Item ) obj; return getChave().compareTo( item.getChave() ); } }

Java - 83

Programa(s) Demonstrao
package api.java.util; import java.util.Vector; import java.util.Collections;

api.java.util.JavaUtilVector

public class JavaUtilVector { public static void main (String[] args) { /* Declarando e instanciando o vetor */ Vector itens = new Vector(); /* Inserindo itens no vetor */ Item item; item = new Item("2", "Punisher"); itens.addElement( item ); item = new Item("4", "Wiseman"); itens.addElement( item ); item = new Item("1", "Airamez"); itens.insertElementAt(item,1); item = new Item("3", "P4tinh0"); itens.addElement( item ); item = new Item("0", "Rampage"); itens.addElement( item ); System.out.println( "Quantidade de itens : " + itens.size() ); System.out.println( itens ); /* * Ordenando o Vector, para isso os objetos armazenados * devem implementar a interface Comparable e consequentemente * redefinir o mtodo compareTo(); */ Collections.sort( itens ); System.out.println( "Vector ordenado : " + itens ); System.out.println( "Elemento da posiao 3 : " + itens.get(3) ); item = new Item( "1", "Jos" ); System.out.println( item + " est na posiao : " + itens.indexOf( item ) ); System.out.println( "Removendo : " + item + " : " + itens.remove( item ) ); System.out.println( itens ); System.out.println( "Removendo : " + item + " : " + itens.remove( item ) ); System.out.println( itens ); System.out.println( "Removendo : " + itens.remove( 2 ) ); System.out.println( itens ); itens.clear(); System.out.println( "Itens : " + itens ); } }

Java - 84

Programa(s) Demonstrao
package api.java.util; import java.util.Hashtable; import java.util.Iterator; import java.util.Enumeration;

api.java.util.JavaUtilHashtable

public class JavaUtilHashtable { public static void main(String args[]) { /* Declarando e Instanciando o Hashtable */ Hashtable itens = new Hashtable(); /* Inserindo itens no HashTable */ Item item; item = new Item("0", "Huguinho"); itens.put( item.getChave(), item ); item = new Item("1", "Zezinho"); itens.put( item.getChave(), item ); item = new Item("2", "Luizinho"); itens.put( item.getChave(), item ); item = new Item("3", "Tio Patinhas"); itens.put( item.getChave(), item ); item = new Item("4", "Pato Donald"); itens.put( item.getChave(), item ); System.out.println( "Quantidade de itens : " + itens.size() ); System.out.println( itens ); item = new Item("3", "Pluto"); itens.put( item.getChave(), item ); System.out.println( itens ); /* O mtodo keys() retorna um Enumeration */ Enumeration e = itens.keys(); while(e.hasMoreElements()) { Object chave = e.nextElement(); System.out.println( chave ); } /* * O metodo values() retorna um collection, o qual possui o metodo * iterator() */ Iterator valores = itens.values().iterator(); while ( valores.hasNext() ) { System.out.println( valores.next() ); } } }

Java - 85

Programa(s) Demonstrao
package api.java.util; import java.util.TreeSet; import java.util.Iterator; import java.util.SortedSet;

api.java.util.JavaUtilTreeSet

public class JavaUtilTreeSet { public static void main(String[] args) { TreeSet itens = new TreeSet(); /* Inserindo itens no TreeSet */ Item item; item = new Item("3", "Junior Baiano"); itens.add( item ); item = new Item("2", "Naza"); itens.add( item ); item = new Item("5", "Alemo"); itens.add( item ); item = new Item("4", "Casa Grande"); itens.add( item ); item = new Item("1", "Rocha"); itens.add( item ); /* Obtendo os elementos do TreeSet */ Iterator iterator = itens.iterator(); while ( iterator.hasNext() ) { System.out.println( iterator.next() ); } /* Obtendo elementos de um intervslo do TreeSet */ SortedSet itensNoIntervalo = itens.subSet(new Item("2",""), new Item("5","")); System.out.println("Intervalo"); iterator = itensNoIntervalo.iterator(); while ( iterator.hasNext() ) { System.out.println( iterator.next() ); } } }

Java - 86

Programa(s) Demonstrao
package api.java.util; import java.util.TreeMap; import java.util.Iterator;

api.java.util.JavautilTreeMap

public class JavaUtilTreeMap { public static void main(String[] args) { TreeMap itens = new TreeMap(); /* Inserindo itens no TreeSet */ Item item; item = new Item("3", "Mickel Jackson"); itens.put( item.getChave(), item ); item = new Item("2", "Maguila"); itens.put( item.getChave(), item ); item = new Item("5", "Hebe Camargo"); itens.put( item.getChave(), item ); item = new Item("4", "Ratinho"); itens.put( item.getChave(), item ); item = new Item("1", "Fernando Henrique"); itens.put( item.getChave(), item ); System.out.println( itens ); item = new Item("1", "Gil Gomes"); itens.put( item.getChave(), item ); System.out.println( itens ); System.out.println("Obtendo um elemento"); System.out.println( itens.get("3") ); System.out.println( "Itens" );

Iterator keys = itens.keySet().iterator(); while ( keys.hasNext() ) { System.out.println( itens.get( keys.next() ) ); } } }

Java - 87

Programa(s) Demonstrao
package api.java.util; import java.util.Stack;

api.java.util.JavaUtilStack

public class JavaUtilStack { public static void main ( String[] args ) { Stack stack = new Stack(); stack.push( "a" ); stack.push( "+" ); stack.push( "b" ); stack.push( "+" ); stack.push( "c" ); StringBuffer expressao = new StringBuffer(); while ( ! stack.empty() ) { String termo = ( String ) stack.pop(); expressao.append( termo ); } System.out.println( expressao ); } }

Java - 88

Programa(s) Demonstrao
package api.java.util; import java.util.Date; import java.util.Calendar; import java.text.DateFormat; public class JavaUtilDate {

api.java.util.JavaUtilDate

public static void main(String[] args) { Date data1 = new Date( System.currentTimeMillis() ); Date data2 = new Date( System.currentTimeMillis() + 600000) ; Date data3 = new Date( System.currentTimeMillis() - 600000 ); System.out.println( data1 ); System.out.println( data2 ); System.out.println( data3 ); if ( data1.before( data2 ) ) { System.out.println( data1 + " menor que " + data2 ); } } }

Java - 89

Programa(s) Demonstrao
package api.java.util; import java.util.Date; import java.util.TimeZone; import java.util.Calendar;

api.java.util.JavaUtilCalendar

public class JavaUtilCalendar { public static void main (String[] args) { TimeZone tz = TimeZone.getTimeZone( "GMT-3:00" ); Calendar cal = Calendar.getInstance( tz ); int dia = cal.get(Calendar.DAY_OF_MONTH); int mes = cal.get(Calendar.MONTH); int ano = cal.get(Calendar.YEAR); int hora = cal.get(Calendar.HOUR); int min = cal.get(Calendar.MINUTE); int seg = cal.get(Calendar.SECOND); int miliseg = cal.get(Calendar.MILLISECOND); int diaSemana = cal.get(Calendar.DAY_OF_WEEK); System.out.println("Data : " + dia + "/" + mes + "/" + ano); System.out.println("Hora : " + hora + ":" + min + ":" + seg + ":" + miliseg); System.out.println("Dia da semana : " + diaSemana); System.out.println(cal); System.out.println(cal.getTime()); Date data = new Date( System.currentTimeMillis() ); cal.setTime( data ); System.out.println( cal.get( Calendar.HOUR) + ":" + cal.get( Calendar.MINUTE ) + ":" + cal.get( Calendar.SECOND ) + ":" + cal.get( Calendar.MILLISECOND ) ); } }

Java - 90

Programa(s) Demonstrao
package api.java.util; import import import import import

api.java.util.JavaUtilRandom

java.io.*; java.lang.StringBuffer; java.lang.NumberFormatException; java.util.Random; util.Keyboard;

public class JavaUtilRandom { public static void main (String args[]) { int limiteInferior = 1; int limiteSuperior = 100; Random r = new Random(); int numeroSorteado = r.nextInt(100); int chute; int tentativas = 0; do { System.out.print("Digite um nmero entre " + limiteInferior + " e " + limiteSuperior + " = > "); chute = Keyboard.readInt(); if ((chute >= limiteInferior) && (chute <= limiteSuperior)) { if (chute > numeroSorteado) { limiteSuperior = chute - 1; } else { limiteInferior = chute + 1; } } else { System.out.println("Nmero digitado fora do intervalo"); } tentativas++; } while (chute != numeroSorteado); System.out.println("Parabens !!, acertou em " + tentativas + " tentativas"); } }

Java - 91

Programa(s) Demonstrao
package api.java.util;

api.java.util.JavaUtilStringTokeninzer

import java.util.StringTokenizer; public class JavaUtilStringTokenizer { public static void main (String[] args) { StringTokenizer st = new StringTokenizer("Jos Maria R S Junior"); System.out.println(st.countTokens()); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); } st = new StringTokenizer("Campo1,Campo2,,,,Campo3, Campo4" , ","); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); } st = new StringTokenizer("Campo1##Campo#Campo3###Campo4#" , "#"); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); } } }

Java - 92

java.io
O pacote java.io fornece uma extensa biblioteca de classes para operaes de Entrada e Sada, Serializao e acesso ao Sistema de Arquivos As operaes de I/O so realizadas atravs da conexo de objetos Streams (Fluxo de Dados), aos dispositivos de I/O. Representando assim, uma forma uniforme para operaes de I/O. Existem conjuntos de classes representando streams de entrada e sada, representando a origem e o destino dos dados respectivamente. Filtros (streams) podem ser associados a outros streams a fim de fornecer novas funcionalidades. As classes de I/O so divididas em dois grandes grupos, um grupo para dados no formato de bytes (Stream) e outro para dados no formato de caracteres UNICODE (Read/Write). Esses grupos ainda so divididos em dois sub-grupos um para tratar dados de forma bruta e outro que realiza algum tipo de processamento (buferizao ou codificao). O pacote java.io tambm fornece classes para acesso randmico a arquivos e uma interface que interage com o sistema de arquivos da plataforma host.

As interfaces e superclasses do pacote java.io fornecem o padro de comportamento para entrada e sada de dados. Numa operao de I/O fluxos devem ser associado a dispositivos de I/O. Os fluxos so abertos automaticamente na sua criao e fechados com o mtodos close().

Caractes Reader int read() int read(char cbuf[]) int read(char cbuf[], int offset, int length) Writer int write(int c) int write(char cbuf[]) int write(char cbuf[], int offset, int length)

Bytes InputStream (Bytes) int read() int read(byte cbuf[]) int read(byte cbuf[], int offset, int length) OutputStream int write(int c) int write(byte cbuf[]) int write(byte cbuf[], int offset, int length)

AS OPERAES COM FLUXOS NORMALMENTE OBEDECEM AOS SEGUINTES ALGORITMOS

Leitura open(stream) while (more information) read(information) close(stream)

Escrita open(stream) while (more information) write(information) close(stream)

Java - 93

File Fornece um mecanismo independente de plataforma para acessar o sistema de arquivos. Representa o pathname de um arquivo ou diretrio e permite tambm realizar operaes e obter informaes sobre o sistema de arquivos da mquina host, tais como : separador de arquivos, criao de diretrio, etc. Essa classe no fornece mecanismo para manipular o contedo do arquivo, para isso devem ser usadas s classes : FilerReader, FileWriter, FileInputStream, FileOutputStream e RandomAccessFile.

Java - 94

Programa(s) Demonstrao
package api.java.io;

api.java.io.JavaIOFile

import java.io.File; import java.io.IOException; import java.net.MalformedURLException; public class JavaIOFile { public static void main (String[] args) { /* Obtendo atributos do sistema de arquivo local */ System.out.println( "Separator : " + File.separator ); System.out.println( "PathSeparador : " + File.pathSeparator ); /* Declarando e instanciando um objeto do tipo File */ File arq = new File( "arquivo.txt" ); /* Obtendo atributos da classe File */ System.out.println( "exists : " + arq.exists() ); System.out.println( "getAbsolutePath : " + arq.getAbsolutePath() ); System.out.println( "getName : " + arq.getName() ); System.out.println( "getPath : " + arq.getPath() ); System.out.println( "isDirectory : " + arq.isDirectory() ); System.out.println( "isFile : " + arq.isFile() ); System.out.println( "toString : " + arq.toString() ); System.out.println( "canWrite : " + arq.canWrite() ); System.out.println( "canRead : " + arq.canRead() ); System.out.println( "length : " + arq.length() ); /* Criando um novo arquivo no sistema de arquivos host */ try { arq.createNewFile(); } catch (IOException e) { System.out.println( "Erro na criao do arquivo : " + e.getMessage()); } /* deletando o arquivo criado */ System.out.println( "delete : " + arq.delete() ); System.out.println( );

/* Declarando e instanciando um File para p ditetrio corrente */ File dirCorrente = new File( "C:\\" ); System.out.println( "getAbsolutePath : " + dirCorrente.getAbsolutePath() ); System.out.println( "isDirectory : " + dirCorrente.isDirectory() ); System.out.println( "isFile : " + dirCorrente.isFile() ); /* Listando o contedo da classe File */ String[] conteudo = dirCorrente.list(); System.out.println( "Contedo : " + dirCorrente.getName() ); for (int i = 0; i < conteudo.length; i++) { System.out.println( conteudo[i] ); } System.out.println( ); /* Listando apenas os arquivos do diretrio corrente */ File[] diretorios = dirCorrente.listFiles(); System.out.println( "Diretorios : " + dirCorrente.getName()); for (int i = 0; i < diretorios.length; i++) { if ( diretorios[i].isDirectory() ) { System.out.println( diretorios[i] ); } } } }

Java - 95

Fluxo de Dados para Arquivos As seguintes classes so usadas para interao com arquivos : FileReader, FileWriter, FileInputStream, FileOutputStream e RandomAccessFile. Os fluxos para leitura e escrita em arquivos podem ser criados atravs de um objeto da classe File ou FileDescriptor. Lendo e escrevendo em arquivos texto java.io.File; java.io.FileReader; java.io.FileWriter; java.io.FileNotFoundException; java.io.IOException; Programa(s) Demonstrao
package api.java.io; import import import import import java.io.File; java.io.FileReader; java.io.FileWriter; java.io.FileNotFoundException; java.io.IOException;

api.java.io.JavaIOFileReaderWriter

public class JavaIOFileReaderWriter { public static void main (String[] args) { /* Criando os objetos do tipo File */ File arqOrigem = new File( "c:\\autoexec.bat" ); File arqDestino = new File( "c:\\autoexec.bak" ); try { /* * Criando os Stream de leitura e escrita para os arquivos de * origem e destino respectivamente */ FileReader fr = new FileReader(arqOrigem); FileWriter fw = new FileWriter(arqDestino); System.out.println("Copiando o arquivo " + arqOrigem + " para " + arqDestino); /* Verificando permisses nos arquivos */ if ( arqOrigem.canRead() && arqDestino.canWrite() ) { int c; /* lendo, enquando existir bytes no stream de entrada */ while ( ( c = fr.read() ) != -1 ) { /* escrevendo no stream de saida */ fw.write(c); char caracter = ( char ) c; System.out.print( caracter ); } } else { System.out.println("Acesso no permitido"); System.out.println("Origem : " + arqOrigem.toString()); System.out.println("Destino : " + arqDestino.toString()); } fr.close(); fw.close(); } catch ( FileNotFoundException e ) { System.out.println("Arquivo no encontrado :" + e.getMessage()); } catch ( IOException e ) { System.out.println("Erro de Entrada/Sada : " + e.getMessage()); } } }

Java - 96

Filtrandro Fluxos e Serializando Objetos ( Serializable ) Serializar um objeto significa criar uma seqncia de bytes que represente o objeto, dessa forma o mesmo pode ser trasmitido atravs de um stream. Para que um objeto seja serializado o mesmo deve implementar a interface Serializable. java.io.Serializable; java.io.FileOutputStream; java.io.FileInputStream; java.io.ObjectOutputStream; java.io.ObjectInputStream;

Java - 97

Programa(s) Demonstrao
package api.java.io; import import import import import import import import import import

api.java.io.JavaIOSerializable

java.io.Serializable; java.io.FileOutputStream; java.io.FileInputStream; java.io.ObjectOutputStream; java.io.ObjectInputStream; java.io.FileNotFoundException; java.io.NotSerializableException; java.io.OptionalDataException; java.io.IOException; java.util.Vector;

public class JavaIOSerializable { public static void main ( String[] args ) { /* Declarando uma classe interna para simular registros num Vector */ class Registro implements Serializable { int codigo; String nome; public Registro ( int cod, String nome ) { this.codigo = cod; this.nome = nome; } public String toString() { return "[" + codigo + ", " + nome + "]"; } } Vector v = new Vector(); /* Inserindo 10 registo no Vector */ for ( int i = 1; i <= 10; i++ ) { Registro reg = new Registro( i,"Nome_" + ( i ) ); v.add(reg); } System.out.println( "Vetor gerado : " + v ); try { /* Criando um stream de escrita de arquivo*/ FileOutputStream fos = new FileOutputStream( "Vetor.dat" ); /* * Criando um filtro (Stream) de escrita de objetos e associando-o * ao stream de escrita de arquivo */ ObjectOutputStream oos = new ObjectOutputStream( fos ); /* Escrevendo o Vector */ oos.writeObject( v ); /* Esvaziando o buffer do stream */ oos.flush(); /* Fechando os Streams */ fos.close(); /* Limpando o vetor*/ v.clear(); System.out.println( "Vetor vazio :" + v ); /* Criando um stream de leitura de arquivo*/ FileInputStream fis = new FileInputStream( "Vetor.dat" ); /* * Criando um Stream de leitura de objetos e associando-o ao * stream de leitura de arquivo */ ObjectInputStream ois = new ObjectInputStream( fis ); /* Lendo o objeto do stream*/ v = ( Vector ) ois.readObject(); System.out.println( "Vetor recuperado : " + v ); /*

Java - 98

} } } } } } }

* Demonstrao da gravao e leitura de diversos objetos no arquivo */ /* Gravando os objetos no arquivo */ fos = new FileOutputStream( "Objetos.dat" ); oos = new ObjectOutputStream( fos ); for ( int i = 0; i < v.size(); i++ ) { oos.writeObject( v.get( i ) ); } v.clear(); oos.flush(); fis = new FileInputStream( "Objetos.dat" ); ois = new ObjectInputStream( fis ); try { while ( true ) { v.add( ois.readObject() ); } } catch ( IOException e ) { System.out.println( "Todos os objetos foram lidos : " + e.getMessage() ); } System.out.println( v ); catch ( FileNotFoundException e ) { System.out.println( "Arquivo no encontrado : " + e.getMessage() ); catch ( NotSerializableException e ) { System.out.println( "Objeto no serializvel : " + e.getMessage() ); catch ( IOException e ) { System.out.println( "Erro de I/O : " + e.getMessage() ); catch ( ClassNotFoundException e ) { System.out.println( "Classe no encontrada : " + e.getMessage() );

Java - 99

RandomAccessFile Fornece acesso direto a arquivos, onde bytes podem ser lido e/ou gravados em uma determinada posio do arquivo. Um objeto do tipo RandomAccess deve ser criado e associado a um arquivo antes de ser usado. Programa(s) Demonstrao
package api.java.io; import java.io.RandomAccessFile; import java.io.File; import java.io.IOException; public class JavaIoRandomAccessFile { public static void main( String[] args ) { File arqOrigem = new File( "c:\\autoexec.bat" ); RandomAccessFile arq; try { arq = new RandomAccessFile ( arqOrigem , "r"); System.out.println( "Tamanho do arquivo : " + arq.length() ); long posicaoLeitura = arq.length() - 1; int bytesLidos = 0; while ( posicaoLeitura >= 0 ) { arq.seek( posicaoLeitura ); // System.out.println( "FP: " + arq.getFilePointer() ); System.out.print( ( char ) arq.read() ); bytesLidos++; posicaoLeitura--; } System.out.println( "\nBytes lidos : " + bytesLidos ); } catch ( IOException e ) { System.out.println( "Erro no acesso ao arquivo" + e.getMessage() ); } } }

api.java.io.JavaIoRandomAccessFile

Java - 100

Threads
Documento Threads.doc

Programa(s) Demonstrao

threads.*

Java - 101

java.net
Redes
Camada de Aplicao ... Camada de Transporte Transport Control Protocol Comunicao ponto a ponto com confirmao de entrega. (HTTP, FTP) User Datagram Protocol Comunicao ponto a ponto sem confirmao de entrega. Endereo IP ( xxx.xxx.xxx.xxx ), onde 0 <= xxx <= 254 Portas : Nmero inteiro 16 bits (0..65535) As portas de 0 a 1023 so dos Well-Known Services TCP e UDP usam portas para mapear a comunicao com processos. URL (Uniform Resource Locator) Protocolo + Recurso Socket Endereo IP + Porta Socket Servidor Socket Client

Java - 102

URL URLConnection Programa(s) Demonstrao


package api.java.net.url; import java.io.*; import java.net.*; import util.Keyboard; public class JavaNetUrl { public static void main ( String[] args ) { try { String url = "http://www.unit.br:80/zemaria"; /* Declarando e instanciando um objeto do tipo URL */ URL pagina = new URL( url ); /* Obtendo propriedades do objeto URL */ System.out.println( "protocolo = " + pagina.getProtocol() ); System.out.println( "servidor = " + pagina.getHost() ); System.out.println( "arquivo = " + pagina.getFile() ); System.out.println( "porta = " + pagina.getPort() ); /* Declarando um objeto do tipo URL */ URLConnection conexaoUrl; /* Declarando um stream de entrada */ InputStreamReader isr; /* Declarando um stream de leitura com buffer para leitura */ BufferedReader dados; /* String para armazenar uma linha lida */ String linha; /* Abrindo a conexo atravs do objeto URL */ conexaoUrl = pagina.openConnection(); /* Conectando atravs do objeto URLConnection */ conexaoUrl.connect(); /* Associando o stream de entrada a conexo */ isr = new InputStreamReader( conexaoUrl.getInputStream() ); /* Associando o stream com buffer ao stream de entrada */ dados = new BufferedReader( isr ); /* Lendo linhas do stream */ while ( ( linha = dados.readLine() ) != null ) { System.out.println( linha ); } /* Fechando o stream */ dados.close(); } catch ( MalformedURLException e ) { System.out.println( "Erro na URL : " + e.getMessage() ); } catch ( IOException e ){ System.out.println( "Erro de I/O : " + e.getMessage() ); } } }

api.java.net.url.JavaNetUrl

Java - 103

Sockets ServerSockets Programa(s) Demonstrao


package api.java.net.socket; import java.io.*; import java.net.*; import util.Keyboard; public class ClientSocket { public static void main(String[] args) { String server = "localhost"; //Servidor int port = 44444; //Porta System.out.print("Mensagem : "); /* Lendo a mensagem a ser enviado ao servidor */ String message = Keyboard.readString(); /* Stream de Entrada */ BufferedReader in = null; /* Stream de sada */ PrintWriter out = null; /* socket cliente */ Socket socket = null; try { /* Instanciando o socket */ socket = new Socket( server, port ); /* Associando os Streams de Entrada e Sada ao socket */ InputStreamReader isr = new InputStreamReader( socket.getInputStream() ); in = new BufferedReader( isr ); out = new PrintWriter( socket.getOutputStream(), true ); /* Eviando a mensagem para o socket servidor atrvs do Stream */ out.println(message); /* Obtendo mensagem do socket servidor */ String fromServer = in.readLine(); /* Imprimindo a mensagem recebida do socket servidor */ System.out.println("Mensagem do servidor socket : " + fromServer); /* Fechando os streams */ out.close(); in.close(); /* Fechando o socket */ socket.close(); } catch (UnknownHostException e) { System.err.println("Servidor no encontrado: " + server); System.exit( 1 ); } catch (IOException e) { System.err.println("Erro de I/O com o servidor : " + server); System.exit( 1 ); } } }

api.java.net.socket.ClientSocket

Java - 104

Programa(s) Demonstrao
package api.java.net.socket; import java.net.*; import java.io.*; import util.Keyboard;

api.java.net.socket.ServerSocketThread

public class ServerSocketThread extends Thread { /* Socket cliente */ private Socket socket = null; /* Mensagem a ser enviada ao cliente */ private String msg; public ServerSocketThread( Socket socket, String msg ) { super("ServerSocketThread"); this.socket = socket; this.msg = msg; } public void run() { try { /* Criando e associando os Streams de I/O com o socket cliente */ PrintWriter out = new PrintWriter( socket.getOutputStream(), true ); InputStreamReader isr = new InputStreamReader( socket.getInputStream() ); BufferedReader in = new BufferedReader( isr ); /* Obtendo e imprimindo a mensagem do socket Cliente */ String inputLine = in.readLine(); System.out.println( "Porta do socket associado ao cliente :" + socket.getPort() ); System.out.println( "Mensagem do socket cliente : " + inputLine ); /* Enviando a mensagem para o socket cliente */ out.println( msg ); /* Fechando os Streams */ out.close(); in.close(); /* Fechando o socket cliente */ socket.close(); } catch (IOException e) { e.printStackTrace(); } } }

Java - 105

Programa(s) Demonstrao
package api.java.net.socket; import java.net.*; import java.io.*; import util.Keyboard;

api.java.net.socket.ServerSocketApplication

public class ServerSocketApplication { public static void main(String[] args) { /* Socket servidor */ ServerSocket serverSocket = null; /* Porta */ int port = 44444; System.out.println("Inicializando a aplicao servidor socket"); try { /* Inicializando o servidor socket */ serverSocket = new ServerSocket( port ); /* Mensagem a ser enviado ao cliente */ System.out.print( "Mensagem : " ); String msg = Keyboard.readString(); /* Lao para responder as conexes dos clientes socket */ for ( int i = 0; i <= 100; i++ ) { /* Criando uma thread para responder ao socket cliente */ new ServerSocketThread( serverSocket.accept(), msg ).start(); } /* fechando o socket servidor */ serverSocket.close(); } catch ( IOException e ) { System.err.println("Erro na incializao da Porta: " + port); System.exit(-1); } } }

Programa(s) Demonstrao

api.java.net.socket.

Java - 106

javax.swing
Java Foundation Classes (JFC) : Conjunto de ferramentas para desenvolvimento de interfaces grficas, com as seguintes caractersticas : 1. Componentes SWING 2. Look and Feel 3. API de acessibilidade 4. Java 2D API 5. Suporte para Drag and Drop Pacote : javax.swing Os nomes dos componentes SWINGs comeam com a letra "J", exemplo : JButton. Diferentemente dos componentes AWT, os componentes SWINGs so escritos completamente em Java sem possuir cdigo nativo. Componente Container Componentes CONTAINERES so componentes com a capacidade de armazenar e exibir outros componentes. Todo programa que possuir componentes SWINGs ir necessitar de um componente container toplevel (JFrame ou JDialog), o qual prover suporte para exibio e tratamento de eventos para os demais componentes. Sendo que, os componentes no sero inseridos diretamente no container top-level e sim em outro componente container, JPanel por exemplo, o qual ser inserido no container top-level.

Java - 107

Layout Managers So objetos que determinam como os componentes visuais de um container sero exibidos, com o objetivo de permitir o ajuste automtico da interface de acordo com a plataforma. Todo componente container possui um layout manager, o qual ir controlar como os seus componentes sero exibidos (tamanho e posio). A API padro Java possui seis layout managers, sendo eles: FlowLayout, GridLayout, BorderLayout, CardLayout, GridLayout e BoxLayout. BorderLayout Possui cinco reas para colocao de componetes (NORTH, SOUTH, WEST, EAST E CENTER). BoxLayout Armazena os componentes numa simples coluna, respeitando os seus tamanhos. CarLayout Permite definir reas para armazenar diferentes componentes em momentos diferentes. FlowLayout Armazena os componentes da esquerda para direita, passando para prxima linha quando necessrio. GridLayout Redimensiona os componentes para o mesmo tamanho e exibe-os numa tabela com nmero de linhas e colunas especificadas. GridBagLayout Alinha os componentes colocando-os numa tabela, permitindo que um componente ocupe mais de uma clula.

Java - 108

Criando uma aplicao Swing no JBuilder Para criar uma aplicao swing devemos criar uma classe que estenda a classe javax.swing.JFrame e em seguida utilizar a opo de design do JBuilder, lembrando que a primeira coisa a ser feita inserir um JPanel. O JBuilder ir a partir de agora manipular o cdigo fonte da classe para refletir as alteraes feitas no design. Para isso o JBuilder declara e instancia cada objeto visual utilizado como um atributo da classe e no mtodo jbInit() realiza as alteraes nas propriedades dos objetos. Para que o JFrame seja exibido necessrio adicionar o mtodo this.show() ao construtor. Tratamento de Eventos (java.awt.event e javax.swing.event) Para tratar eventos de componentes grficos so necessrios dois passos : Registrar um event listener e implementar um event handler. Um event listener para eventos GUI um objeto da classe que implementa uma ou mais interfaces event-listener do pacote java.awt.event ou do pacote javax.swing.event. Um event handler um mtodo chamado automaticamente em resposta a um evento. No caso do JBuilder o cdigo para o tratamento de eventos inserido automaticamente. Programa(s) Demonstrao
package swing; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SwingApp extends JFrame { JPanel jPanel1 = new JPanel(); JButton jButton1 = new JButton(); public static void main(String[] args) { SwingApp swingApp = new SwingApp(); } public SwingApp() { try { jbInit(); this.pack(); this.show(); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { jButton1.setText("jButton1"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jButton1_actionPerformed(e); } }); this.getContentPane().add(jPanel1, BorderLayout.CENTER); jPanel1.add(jButton1, null); } void jButton1_actionPerformed(ActionEvent e) { System.out.println( "Resposta ao evento" ); } }

swing.SwingApp.java

Java - 109

Caixa de Dilogo Uma forma simples de exibir dilogos atravs da classe javax.swing.JOptionPane, usando um dos mtodos showXxxxDialog. Programa(s) Demonstrao swing.Dialogos.java

/** * Title: <p> Dialogos * Description: <p> Aplicao demonstrando o uso de dilogos swing * @author Jos Maria Rodrigues Santos Junior / zemaria@infonet.com.br */ package swing; import javax.swing.JOptionPane; public class Dialogos { public static void main (String[] args) { String tituloDialogo = "Ttulo da caixa de Dilogo"; String msg = "Mensagem"; JOptionPane.showMessageDialog(null, msg); JOptionPane.showMessageDialog(null, msg, tituloDialogo, JOptionPane.PLAIN_MESSAGE); JOptionPane.showMessageDialog(null, msg, tituloDialogo, JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null, msg, tituloDialogo, JOptionPane.WARNING_MESSAGE); JOptionPane.showMessageDialog(null, msg, tituloDialogo, JOptionPane.ERROR_MESSAGE); msg = "Voc gosta de Java"; Object[] opcoes = {"Sim","No","Mais ou Menos"}; int resp = JOptionPane.showOptionDialog(null, msg, "Pergunta", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[2] ); System.out.println("Resposta : " + opcoes[resp].toString()); String nome = JOptionPane.showInputDialog("Digite o seu nome : "); System.out.println( "nome : " + nome ); System.exit( 0 ); } }

Java - 110

Agenda Eletrnica usando Swing Programa(s) Demonstrao swing.agenda.ItemAgenda

/** * Title: <p> ItemAgenda * Description: <p> Item a ser armazenado na Agenda * @author Jos Maria Rodrigues Santos Junior / zemaria@infonet.com.br */ package swing.agenda; import java.lang.Comparable; import java.io.Serializable; /** * Classe representando um item a ser armazenado na agenda */ public class ItemAgenda implements Comparable, Serializable { private String nome; private String telefone; private String email; /** * Construtor padro */ public ItemAgenda ( ) { } /** * Construtor inicializando todos os atributos * @param nome Nome * @param telefone Telefone * @param email Email */ public ItemAgenda ( String nome, String telefone, String email ) { setNome( nome ); setTelefone ( telefone ); setEmail ( email ); } /** * Atribui o nome * @param nome Nome */ public void setNome ( String nome ) { /* nome no pode ser nulo */ if ( ! nome.equals( "" ) ) { this.nome = nome; } } /** * Atribui o telefone * @param telefone Telefone */ public void setTelefone ( String telefone ) { this.telefone = telefone; } /** * Atribui o Email * @param email Email */ public void setEmail ( String email ) { this.email = email; }

Java - 111

/** * Retorna o nome * @result Nome */ public String getNome () { return nome; } /** * Retorna o Telefone * @result Telefone */ public String getTelefone () { return telefone; } /** * Retorna o email * @result Email */ public String getEmail () { return email; } /** * Retorna a representaao String do Objeto * @result representao String do Objeto */ public String toString () { return "[" + nome + ", " + telefone + ", " + email + "]"; } /** * Redefiniao do mtodo java.Object.equals() * @see java.lang.Object.equals() */ public boolean equals ( Object obj) { /* o nome determina a igualdade */ ItemAgenda itemAgenda = ( ItemAgenda ) obj; return getNome().endsWith( itemAgenda.getNome() ); } /** * Redefiniao do mtodo java.Comparable.compareTo() * @see java.lang.Comparable.compareTo(); */ public int compareTo ( Object obj ) { ItemAgenda itemAgenda = ( ItemAgenda ) obj; return getNome().compareTo( itemAgenda.getNome() ); } }

Java - 112

Programa(s) Demonstrao

swing.agenda.ItensAgenda

/** * Title: <p> ItensAgenda * Description: <p> Classe para armazenar os itens da Agenda * @author Jos Maria Rodrigues Santos Junior / zemaria@infonet.com.br */ package swing.agenda; import java.util.Vector; import java.util.Collections; import java.io.*; /** * Classe para armazenar uma coleao de items da Agenda */ public class ItensAgenda { /** Vector para armazenar os itens da Agenda */ private Vector itensAgenda; /** * Posiao do item corrente da Agenda */ private int posItemCorrente; /** Nome do arquivo para salvar/carregar o Vector dos itens da agenda */ private String arquivo; /** * Construtor * @param nome do arquivo para salvar/carregar a coleao de itens */ public ItensAgenda( String arquivo ) { this.posItemCorrente = -1; this.itensAgenda = new Vector(); this.setArquivo( arquivo ); } private void setArquivo ( String arquivo ) { this.arquivo = arquivo; } public String getArquivo () { return arquivo; } public void salvar () throws Exception { FileOutputStream fos; ObjectOutputStream oos; try { fos = new FileOutputStream( getArquivo() ); oos = new ObjectOutputStream( fos ); oos.writeObject( itensAgenda ); oos.flush(); oos.close(); fos.close(); } catch ( NotSerializableException e ) { String msg = "Objeto no serializvel : " + e.getMessage(); throw new NotSerializableException( msg ); } catch ( IOException e ) { String msg = "Erro de I/O : " + e.getMessage(); throw new IOException( msg ); } } public void abrir ( String arquivo ) this.setArquivo( arquivo ); FileInputStream fis; ObjectInputStream ois; throws Exception {

Java - 113

try { fis = new FileInputStream( arquivo ); ois = new ObjectInputStream( fis ); itensAgenda = ( Vector ) ois.readObject(); } catch ( FileNotFoundException e ) { String msg = "Arquivo no encontrado : " + e.getMessage(); throw new FileNotFoundException( msg ); } catch ( IOException e ) { String msg = "Erro de I/O : " + e.getMessage(); throw new IOException( msg ); } catch ( ClassNotFoundException e ) { String msg = "Classe no encontrada : " + e.getMessage(); throw new ClassNotFoundException( msg ); } posItemCorrente = 0; } public ItemAgenda getItemCorrente() { if ( itensAgenda.isEmpty() ) { return null; } else { return ( ItemAgenda ) itensAgenda.get( posItemCorrente ); } } public void primeiro () { posItemCorrente = 0; } public void proximo () { if ( posItemCorrente < itensAgenda.size() - 1 ) { posItemCorrente++; } } public void anterior () { if ( posItemCorrente > 0 ) { posItemCorrente--; } } public void ultimo () { posItemCorrente = itensAgenda.size() - 1; } public boolean existe ( ItemAgenda itemAgenda ) { int pos = itensAgenda.indexOf( itemAgenda ); if ( pos == -1 ) { return false; } else { return true; } } public void procuraAproximadaPorNome ( String nome ) { posItemCorrente = itensAgenda.size() - 1; System.out.println( "Nome : " + nome ); for ( int i = 0 ; i < itensAgenda.size() ; i++ ) { ItemAgenda itemAgenda = ( ItemAgenda ) itensAgenda.get( i ); String nomeAux = itemAgenda.getNome(); if ( nomeAux.toUpperCase().startsWith( nome.toUpperCase() ) ) { posItemCorrente = i; break; } } } public void insere ( ItemAgenda itemAgenda ) { if ( ! itemAgenda.getNome().equals( "" ) ) { int pos = itensAgenda.indexOf( itemAgenda );

Java - 114

if ( pos != -1 ) { itensAgenda.remove( pos ); } itensAgenda.addElement( itemAgenda ); Collections.sort( itensAgenda ); posItemCorrente = itensAgenda.indexOf( itemAgenda ); } } public void apaga ( ) { itensAgenda.remove( getItemCorrente() ); anterior(); } public int quantidade () { return itensAgenda.size(); } public String toString () { return itensAgenda.toString(); } }

Java - 115

Programa(s) Demonstrao

swing.agenda.AgendaFrame

/** * Title: <p> AgendaFrame * Description: <p> Aplicao swing de Agenda Eletrnica * @author Jos Maria Rodrigues Santos Junior / zemaria@infonet.com.br */ package swing.agenda; import import import import javax.swing.*; java.awt.*; java.awt.event.*; javax.swing.border.*;

public class AgendaFrame extends JFrame { /* * Varivel indicando se o item atual deve ser inserido ou atualizado. * Caso o botao Novo tenha sido pressionado o valor ser false * Quando o botao confirma for pressiona volta ao estado padrao : true */ private boolean atualizacao = true; /* Arquivo para salvar os itens da Agenda */ String nomeArquivo = "D:\\MeusDocumentos\\CursoDeJava\\Standard\\Fontes\\" + "src\\swing\\agenda\\Agenda.dat"; /* Itens da Agenda */ ItensAgenda itensAgenda = new ItensAgenda( nomeArquivo ); /* Componentes swing, criados automaticamente pelo JBuilder */ JPanel jPanel = new JPanel(); JMenuBar jMenuBar = new JMenuBar(); JMenu jMenuArquivo = new JMenu(); JMenuItem jMenuSair = new JMenuItem(); JMenu jMenuAjuda = new JMenu(); JMenuItem jMenuSobre = new JMenuItem(); TitledBorder titledBorder1; JLabel jLabelNome = new JLabel(); JTextField jTextFieldNome = new JTextField(); JLabel jLabelTelefone = new JLabel(); JTextField jTextFieldTelefone = new JTextField(); JLabel jLabelEmail = new JLabel(); JTextField jTextFieldEmail = new JTextField(); JPanel jPanelBotoes = new JPanel(); JButton jButtonNovo = new JButton(); JButton jButtonConfirmar = new JButton(); JButton jButtonUltimo = new JButton(); JButton jButtonProximo = new JButton(); JButton jButtonAnterior = new JButton(); JButton jButtonPrimeiro = new JButton(); JButton jButtonApagar = new JButton(); JButton jButtonProcurar = new JButton(); JMenu jMenu1 = new JMenu(); /* Agrupando os itens de rdio do menu para a escolha do LookAndFeel*/ ButtonGroup lookAndFeelButtonGroup; JRadioButtonMenuItem jRadioButtonMenuItemMetal = new JRadioButtonMenuItem(); JRadioButtonMenuItem jRadioButtonMenuItemMotif = new JRadioButtonMenuItem(); JRadioButtonMenuItem jRadioButtonMenuItemWindows = new JRadioButtonMenuItem(); public static void main(String[] args) { AgendaFrame agenda = new AgendaFrame(); agenda.setSize( 420,250 ); agenda.show(); } public AgendaFrame() { /* Inicializando os itens da agenda a partir do arquivo */ try {

Java - 116

itensAgenda.abrir( nomeArquivo ); ItemAgendaParaJTextFields( itensAgenda.getItemCorrente() ); } catch ( Exception e ) { JOptionPane.showMessageDialog(null, e.getMessage(), "Aviso", JOptionPane.WARNING_MESSAGE); } try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { titledBorder1 = new TitledBorder(""); jPanel.setLayout(null); this.setDefaultCloseOperation(3); this.setJMenuBar(jMenuBar); this.setResizable(false); this.setTitle("Agenda"); jMenuArquivo.setText("Arquivo"); jMenuSair.setText("Sair"); jMenuSair.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jMenuSair_actionPerformed(e); } }); jMenuAjuda.setText("Ajuda"); jMenuSobre.setText("Sobre"); jPanel.setBorder(BorderFactory.createEtchedBorder()); jLabelNome.setText("Nome"); jLabelNome.setBounds(new Rectangle(7, 16, 41, 17)); jTextFieldNome.setNextFocusableComponent(jTextFieldTelefone); jTextFieldNome.setToolTipText("Nome"); jTextFieldNome.setBounds(new Rectangle(67, 14, 332, 21)); jLabelTelefone.setText("Telefone"); jLabelTelefone.setBounds(new Rectangle(4, 45, 52, 17)); jTextFieldTelefone.setNextFocusableComponent(jLabelEmail); jTextFieldTelefone.setToolTipText("Telefone"); jTextFieldTelefone.setBounds(new Rectangle(67, 44, 332, 21)); jLabelEmail.setText("Email"); jLabelEmail.setBounds(new Rectangle(5, 75, 41, 17)); jTextFieldEmail.setNextFocusableComponent(jLabelNome); jTextFieldEmail.setToolTipText("Email"); jTextFieldEmail.setBounds(new Rectangle(67, 75, 332, 20)); jPanelBotoes.setBorder(BorderFactory.createEtchedBorder()); jPanelBotoes.setBounds(new Rectangle(5, 126, 395, 61)); jPanelBotoes.setLayout(null); jButtonNovo.setToolTipText("insere novo item"); jButtonNovo.setText("Novo"); jButtonNovo.setBounds(new Rectangle(3, 3, 99, 27)); jButtonNovo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jButtonNovo_actionPerformed(e); } }); jButtonConfirmar.setToolTipText("Confirma operao"); jButtonConfirmar.setText("Confirmar"); jButtonConfirmar.setBounds(new Rectangle(100, 3, 99, 27)); jButtonConfirmar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jButtonConfirmar_actionPerformed(e); } }); jButtonUltimo.setToolTipText("ltimo");

Java - 117

jButtonUltimo.setText("ltimo"); jButtonUltimo.setBounds(new Rectangle(294, 30, 99, 27)); jButtonUltimo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jButtonUltimo_actionPerformed(e); } }); jButtonProximo.setToolTipText("Prximo"); jButtonProximo.setText("Prximo"); jButtonProximo.setBounds(new Rectangle(197, 30, 99, 27)); jButtonProximo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jButtonProximo_actionPerformed(e); } }); jButtonAnterior.setToolTipText("Anterior"); jButtonAnterior.setText("Anterior"); jButtonAnterior.setBounds(new Rectangle(100, 30, 99, 27)); jButtonAnterior.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jButtonAnterior_actionPerformed(e); } }); jButtonPrimeiro.setToolTipText("Primeiro"); jButtonPrimeiro.setText("Primeiro"); jButtonPrimeiro.setBounds(new Rectangle(3, 30, 99, 27)); jButtonPrimeiro.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jButtonPrimeiro_actionPerformed(e); } }); jButtonApagar.setText("Apagar"); jButtonApagar.setBounds(new Rectangle(294, 3, 99, 27)); jButtonApagar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jButtonApagar_actionPerformed(e); } }); jMenu1.setText("Exibir"); jRadioButtonMenuItemMetal.setSelected(true); jRadioButtonMenuItemMetal.setText("Metal"); jRadioButtonMenuItemMetal.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jRadioButtonMenuItemMetal_actionPerformed(e); } }); jRadioButtonMenuItemMotif.setText("Motif"); jRadioButtonMenuItemMotif.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jRadioButtonMenuItemMotif_actionPerformed(e); } }); jRadioButtonMenuItemWindows.setText("Windows"); jRadioButtonMenuItemWindows.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jRadioButtonMenuItemWindows_actionPerformed(e); } }); /* Agrupando os rdio buttons do menu */ lookAndFeelButtonGroup = new ButtonGroup(); jButtonProcurar.setText("Procurar"); jButtonProcurar.setBounds(new Rectangle(197, 3, 99, 27));

Java - 118

jButtonProcurar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jButtonProcurar_actionPerformed(e); } }); lookAndFeelButtonGroup.add( jRadioButtonMenuItemMetal ); lookAndFeelButtonGroup.add( jRadioButtonMenuItemMotif ); lookAndFeelButtonGroup.add( jRadioButtonMenuItemWindows ); jMenuBar.add(jMenuArquivo); jMenuBar.add(jMenu1); jMenuBar.add(jMenuAjuda); jMenuArquivo.addSeparator(); jMenuArquivo.add(jMenuSair); jMenuAjuda.add(jMenuSobre); jMenu1.add(jRadioButtonMenuItemMetal); jMenu1.add(jRadioButtonMenuItemMotif); jMenu1.add(jRadioButtonMenuItemWindows); this.getContentPane().add(jPanel, BorderLayout.CENTER); jPanel.add(jTextFieldTelefone, null); jPanel.add(jTextFieldNome, null); jPanel.add(jLabelNome, null); jPanel.add(jLabelTelefone, null); jPanel.add(jLabelEmail, null); jPanel.add(jTextFieldEmail, null); jPanel.add(jPanelBotoes, null); jPanelBotoes.add(jButtonConfirmar, null); jPanelBotoes.add(jButtonApagar, null); jPanelBotoes.add(jButtonPrimeiro, null); jPanelBotoes.add(jButtonNovo, null); jPanelBotoes.add(jButtonAnterior, null); jPanelBotoes.add(jButtonProximo, null); jPanelBotoes.add(jButtonUltimo, null); jPanelBotoes.add(jButtonProcurar, null); } void jMenuSair_actionPerformed(ActionEvent e) { try { itensAgenda.salvar(); } catch ( Exception exc ) { JOptionPane.showMessageDialog(null, exc.getMessage(), "Aviso", JOptionPane.WARNING_MESSAGE); } System.exit( 0 ); } private void limparJTextFields() { jTextFieldNome.setText(""); jTextFieldEmail.setText(""); jTextFieldTelefone.setText(""); } private void jTextFieldsParaItemAgenda( ItemAgenda itemAgenda ) { if ( itemAgenda != null ) { if ( ! jTextFieldNome.getText().equals( "" )) { itemAgenda.setNome( jTextFieldNome.getText() ); } itemAgenda.setTelefone( jTextFieldTelefone.getText() ); itemAgenda.setEmail( jTextFieldEmail.getText() ); } } private void ItemAgendaParaJTextFields( ItemAgenda itemAgenda ) { if ( itemAgenda != null ) { jTextFieldNome.setText( itemAgenda.getNome() ); jTextFieldTelefone.setText( itemAgenda.getTelefone() ); jTextFieldEmail.setText( itemAgenda.getEmail() ); } }

Java - 119

void jButtonConfirmar_actionPerformed(ActionEvent e) { jButtonNovo.setEnabled( true ); botoesAcoes( true ); botoesNavegacao( true ); if ( atualizacao ) { jTextFieldsParaItemAgenda( itensAgenda.getItemCorrente() ); } else { ItemAgenda itemAgenda = new ItemAgenda(); jTextFieldsParaItemAgenda( itemAgenda ); if ( ! itensAgenda.existe( itemAgenda ) ) { itensAgenda.insere( itemAgenda ); } else { String msg = "Item j cadastrado."; String pergunta = "Deseja substiruir ?"; Object[] opcoes = {"Sim","No"}; int resp = JOptionPane.showOptionDialog(null, pergunta, msg, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[1] ); if ( resp == 0 ) { itensAgenda.insere( itemAgenda ); } } } atualizacao = true ; this.exibirItemCorrente(); System.out.println( "Agenda = " + itensAgenda); System.out.println( "Item Corrente = " + itensAgenda.getItemCorrente() ); } private void botoesAcoes ( boolean situacao ) { jButtonApagar.setEnabled( situacao ); jButtonProcurar.setEnabled( situacao ); } private void botoesNavegacao ( boolean situacao ) { jButtonPrimeiro.setEnabled( situacao ); jButtonAnterior.setEnabled( situacao ); jButtonProximo.setEnabled( situacao ); jButtonUltimo.setEnabled( situacao ); } private void exibirItemCorrente () { if ( itensAgenda.getItemCorrente() == null ) { this.limparJTextFields(); } ItemAgendaParaJTextFields( itensAgenda.getItemCorrente() ); } void jRadioButtonMenuItemMetal_actionPerformed(ActionEvent e) { lookAndFeel ( 0 ); } void jRadioButtonMenuItemMotif_actionPerformed(ActionEvent e) { lookAndFeel ( 1 ); } void jRadioButtonMenuItemWindows_actionPerformed(ActionEvent e) { lookAndFeel ( 2 ); } private void lookAndFeel ( int lf ) { UIManager.LookAndFeelInfo[] lookAndFeel; lookAndFeel = UIManager.getInstalledLookAndFeels();

Java - 120

try { UIManager.setLookAndFeel( lookAndFeel[lf].getClassName()); SwingUtilities.updateComponentTreeUI(this); } catch ( Exception e ) { System.out.println( "Problemas na alterao do LookAndFeel :" + e.hashCode() ); } } private void escreveAgenda () { System.out.println( "Agenda = " + itensAgenda); System.out.println( "Item Corrente = " + itensAgenda.getItemCorrente() ); } void jButtonNovo_actionPerformed(ActionEvent e) { atualizacao = false; limparJTextFields(); botoesAcoes( false ); botoesNavegacao( false ); jButtonNovo.setEnabled( false ); jTextFieldNome.requestFocus(); } void jButtonProcurar_actionPerformed(ActionEvent e) { String nome = JOptionPane.showInputDialog(null,"Nome : ", "Procura por nome", JOptionPane.PLAIN_MESSAGE); if ( nome != null ) { itensAgenda.procuraAproximadaPorNome( nome ); this.exibirItemCorrente(); } this.escreveAgenda(); } void jButtonApagar_actionPerformed(ActionEvent e) { itensAgenda.apaga( ); exibirItemCorrente(); this.escreveAgenda(); } void jButtonPrimeiro_actionPerformed(ActionEvent e) { this.itensAgenda.primeiro(); this.exibirItemCorrente(); this.escreveAgenda(); } void jButtonAnterior_actionPerformed(ActionEvent e) { this.itensAgenda.anterior(); this.exibirItemCorrente(); this.escreveAgenda(); } void jButtonProximo_actionPerformed(ActionEvent e) { this.itensAgenda.proximo(); this.exibirItemCorrente(); this.escreveAgenda(); } void jButtonUltimo_actionPerformed(ActionEvent e) { this.itensAgenda.ultimo(); this.exibirItemCorrente(); this.escreveAgenda(); } }

Java - 121

java.sql.jdbc
JDBC representa a definio de uma API para acesso, atravs da linguagem Java, a Sistemas Gerenciadores de Banco de Dados. Isto permite que atravs da API JDBC um programa Java acesse o banco de dados independente do SGBD, desde que exista a implementao do driver JDBC para o SGBD utilizado. Desta forma, a linguagem Java fornece independncia de plataforma e JDBC fornece independncia de SGBD. JDBC representa uma interface de baixo nvel fornecendo mecanismos para executar setenas sql em bancos de dados relacionais, servindo como base para o desenvolvimento de interfaces de nveis mais alto. SQL uma linguagem padro, mas nem tanto assim, pois h variaes considerveis entre SGBDs, a maioria delas, relacionadas aos tipos de dados, dessa forma JDBC defini um conjunto de tipos genricos na classe java.sql.Types. Em relao s divergncias dos comandos SQLs, JDBC permite que qualquer setena SQL seja enviada ao SGBD, sendo que caso o SGBD utilizado no suporte tal setena uma SQLException ser lanada. JDBC fornece tambm o recurso de obter metadados, atravs da classe DatabaseMetadata, sobre o banco de dados em uso, dessa forma possvel que a aplicao faa ajustes em relao a caractersticas do SGBD em uso. Para que um programa Java acesse um SGBD com JDBC o driver JBDC do SGBD (implementado pelo fabricante do SGBD) a ser utilizado deve est disponvel.

Java - 122

Programa(s) Demonstrao
package jdbc.listaDiscussao; import import import import import import import import

jdbc.listaDiscussao.ListaDiscussaoApp

java.sql.DriverManager; java.sql.Connection; java.sql.SQLException; java.sql.Statement; java.sql.ResultSet; java.sql.Date; java.text.SimpleDateFormat; java.util.Locale;

public class ListaDiscussaoApp implements DataBaseConstantes { public static void main(String[] args) { /* Carregando o driver JDBC para um determinado SGBD*/ try { /* Instanciando a classe do driver atravs do seu nome */ Class.forName( DRV ); System.out.println( "Driver JDBC carregado" ); } catch ( ClassNotFoundException cnfe ) { System.out.println( "Driver JDBC no encontrado : " + cnfe.getMessage() ); } /* Criando conexo com o banco de dados */ Connection con = null; try { /* Obtendo a conexo com o banco de dados */ con = DriverManager.getConnection( URL, USUARIO, SENHA ); System.out.println( "Conexo com o banco de dados estabelecida." ); } catch ( SQLException sqle ) { System.out.println( "Erro na conexo ao Bando de Dados : " + sqle.getMessage() ); } /* Obtendo objeto para executar comandos sql */ Statement stmt = null; try { stmt = con.createStatement(); System.out.println( "Preparao para execuo de comandos sql." ); } catch ( SQLException sqle ) { System.out.println( "Erro no acesso ao Bando de Dados : " + sqle.getMessage() ); } /* Executando comandos SQL */ /* criando tabelas */ try { criaTabelas( stmt ); } catch (Exception e) { System.out.println(e.getMessage()); } /* Inserindo dados nas tabelas */ try { } catch (Exception e) { System.out.println(e.getMessage()); } /* Consultando as tabelas */ consultaTabelas( stmt ); /* fechando a conexo com o SGBD */

Java - 123

try { con.close(); System.out.println( "Conexo com o banco de dados fechada" ); } catch ( SQLException sqle ) { System.out.println( "Erro no fechamento da conexo : " ); } } public static void criaTabelas ( Statement stmt ) throws SQLException { /* Comandos sql para criao das tabelas */ final String TB_MEM_MEMBRO = "CREATE TABLE TB_MEM_MEMBRO (" + "MEM_CD_MEMBRO VARCHAR(10) NOT NULL," + "MEM_NM_MEMBRO VARCHAR(50) NOT NULL, " + "MEM_EMAIL VARCHAR(50) NOT NULL UNIQUE," + "MEM_SENHA VARCHAR(10) NOT NULL," + "PRIMARY KEY (MEM_CD_Membro)" + ");"; final String TB_LST_LISTA = "CREATE TABLE TB_LST_LISTA (" + "LST_CD_LISTA VARCHAR(10) NOT NULL," + "LST_NN_LISTA VARCHAR(40) NOT NULL UNIQUE," + "LST_OBJETIVO VARCHAR(30) NOT NULL," + "LST_DT_CRIACAO DATETIME NOT NULL," + "PRIMARY KEY (LST_CD_LISTA)" + ");"; final String TB_ML_MEMBRO_LISTA = "CREATE TABLE TB_ML_MEMBRO_LISTA (" + "ML_CD_MEMBRO VARCHAR(10) NOT NULL," + "ML_CD_LISTA VARCHAR(10) NOT NULL," + "ML_DT_ENTRADA DATETIME NOT NULL," + "ML_DT_SAIDA DATETIME," + "PRIMARY KEY (ML_CD_MEMBRO, ML_CD_LISTA)," + "FOREIGN KEY (ML_CD_LISTA)" + "REFERENCES TB_LST_LISTA," + "FOREIGN KEY (ML_CD_MEMBRO)" + " REFERENCES TB_MEM_MEMBRO" + ");"; final String TB_MSG_MENSAGEM = "CREATE TABLE TB_MSG_MENSAGEM (" + "MSG_CD_MENSAGEM VARCHAR(10) NOT NULL," + "MSG_CD_LISTA VARCHAR(10) NOT NULL," + "MSG_TITULO VARCHAR(20) NOT NULL," + "MSG_DT_MENSAGEM CHAR(18) NOT NULL," + "MSG_MENSAGEM VARCHAR(400) NOT NULL," + "PRIMARY KEY (MSG_CD_MENSAGEM)," + "FOREIGN KEY (MSG_CD_LISTA) REFERENCES TB_LST_LISTA" + ");"; try { /* Executando comandos sql de atualizao */ stmt.executeUpdate( TB_MEM_MEMBRO ); System.out.println( TB_MEM_MEMBRO ); stmt.executeUpdate( TB_LST_LISTA ); System.out.println( TB_LST_LISTA ); stmt.executeUpdate( TB_MSG_MENSAGEM ); System.out.println( TB_MSG_MENSAGEM ); stmt.executeUpdate( TB_ML_MEMBRO_LISTA ); System.out.println( TB_ML_MEMBRO_LISTA ); System.out.println( "<<<<< TABELAS CRIADAS >>>>>" ); } catch ( SQLException sqle ) { throw new SQLException("Erro na criaao das tabelas : " + "getMessage() = " + sqle.getMessage() +

Java - 124

"\ngetErrorCode() = " + } }

sqle.getErrorCode() );

public static void insereDadosTabelas ( Statement stmt ) throws SQLException { try { String insert; /* Inserindo na tabela de membros */ insert = "INSERT INTO TB_MEM_MEMBRO VALUES " + "('1', 'Bill Gates', 'bill@micrososoft.com', 'windows')"; System.out.println( insert ); stmt.executeUpdate(insert); insert = "INSERT INTO TB_MEM_MEMBRO VALUES " + "('2', 'Pel', 'pele@futebol.com.br', 'gol')"; System.out.println( insert ); stmt.executeUpdate(insert); insert = "INSERT INTO TB_MEM_MEMBRO VALUES " + "('3', 'Senna', 'senna@f1.com.br', 'galisteu')"; System.out.println( insert ); stmt.executeUpdate(insert); System.out.println( "Registros de membros inseridos." ); /* Inserindo na tabela de lista */ /* Obtendo a hora corrente e formatando para o comando insert */ SimpleDateFormat formatter = new SimpleDateFormat ( "dd-MMM-yyyy", Locale.US ); Date currentTime = new Date( System.currentTimeMillis() ); String data = formatter.format( currentTime ); insert = "INSERT INTO TB_LST_LISTA VALUES " + "('1', 'Informtica', 'Java', '" + data.toUpperCase() + "')"; stmt.executeUpdate(insert); System.out.println( insert ); insert = "INSERT INTO TB_LST_LISTA VALUES " + "('2', 'Futebol', 'Futebol', '" + data.toUpperCase() + "');"; stmt.executeUpdate(insert); System.out.println( insert ); insert = "INSERT INTO TB_LST_LISTA VALUES " + "('3', 'Frmula 1', 'F1', '" + data.toUpperCase() + "')"; stmt.executeUpdate(insert); System.out.println( insert ); System.out.println( "Registros de lista inseridos." ); } catch ( SQLException sqle ) { throw new SQLException("Erro inserindo registros : \n" + "getMessage() = " + sqle.getMessage() + "\ngetErrorCode() = " + sqle.getErrorCode() ); } } public static void consultaTabelas( Statement stmt ) { try { /* Consultando a tabela de Membros */ String selectTbMembro = "SELECT * FROM TB_MEM_Membro"; System.out.println( selectTbMembro ); /* Executando e obtendo o resultado do comandos sql de consulta */ ResultSet rs = stmt.executeQuery( selectTbMembro ); /* Navegando pelo resultado */ while ( rs.next() ) { System.out.print( rs.getString( "MEM_NM_Membro" ) ); System.out.print( " - " ); System.out.println( rs.getString( "MEM_Email" ) ); } /* Consultando a tabela de Listas */ String selectTbLista = "select * from TB_LST_Lista"; System.out.println( selectTbLista ); /* Obtendo o resultado do comando SQL */

Java - 125

rs = stmt.executeQuery( selectTbLista ); /* Navegando pelo resultado */ while ( rs.next() ) { System.out.print( rs.getString( 2 ) ); System.out.print( " - " ); System.out.println( rs.getString( 3 ) ); } } catch ( SQLException sqle ) { System.out.println( "Erro executando consulta : " + sqle.getMessage() ); } } }

Java - 126

Comandos SQL Preparados Programa(s) Demonstrao


package jdbc.listaDiscussao; import import import import import java.sql.DriverManager; java.sql.SQLException; java.sql.Connection; java.sql.PreparedStatement; java.sql.ResultSet; jdbc.listaDiscussao.JavaSqlPreparedStatement

public class JavaSqlPreparedStatement implements DataBaseConstantes { public static void main( String[] args ) { Connection con = null; try { Class.forName( DRV ); System.out.println( "Driver JDBC carregado" ); con = DriverManager.getConnection( URL, USUARIO, SENHA ); System.out.println( "Conexo com o banco de dados estabelecida." ); } catch ( ClassNotFoundException cnfe ) { System.out.println( "Driver JDBC no encontrado : " + cnfe.getMessage() ); } catch ( SQLException sqle ) { System.out.println( "Erro na conexo ao Bando de Dados : " + sqle.getMessage() ); } /* Executando comandos sql atravs do objeto PreparedStatement */ try { /* Selecionando Lista por cdigo */ String selectLista = "SELECT * FROM TB_LST_LISTA" + " WHERE LST_CD_LISTA = ?"; /* Criando o comando sql preparado */ PreparedStatement ps = con.prepareStatement( selectLista ); for ( int i = 1; i <= 3 ; i ++ ) { /* Substituindo parmetros do comando sql preparado */ ps.setString( 1, Integer.toString( i ) ); /* Executando o comandos sql preparado */ ResultSet rs = ps.executeQuery(); /* Exibindo os resultados */ if ( rs.next() ) { System.out.println( i + " - " + rs.getString( 2 ) ); } } } catch ( SQLException sqle ) { System.out.println( "Erro efetuando consulta : " + sqle.getMessage() ); } try { con.close(); System.out.println( "Conexo com o banco de dados fechada" ); } catch ( SQLException sqle ) { System.out.println( "Erro no fechamento da conexo : " + sqle.getMessage() ); } } }

Java - 127

Procedimentos Armazenados Stored Procedures Programa(s) Demonstrao


package jdbc.listaDiscussao; import import import import import import import java.sql.DriverManager; java.sql.SQLException; java.sql.Connection; java.sql.Statement; java.sql.CallableStatement; java.sql.ResultSet; java.sql.Types; jdbc.listaDiscussao.JavaSqlStoredProcedure

public class JavaSqlStoredProcedure implements DataBaseConstantes { public static void main ( String[] args ) { Statement stmt = null; Connection con = null; try { stmt = DataBaseConnection.getStatement( DRV, URL, USUARIO, SENHA ); con = DataBaseConnection.getConnection( DRV, URL, USUARIO, SENHA ); System.out.println("Conexo com o Banco de dados estabelecida"); } catch ( ClassNotFoundException cnfe ) { System.out.println( cnfe.getMessage() ); } catch ( SQLException sqle ) { System.out.println( sqle.getMessage() ); } /* Criando as Stored Procedures */ try { System.out.println("Criando Stored Procedured 1"); criaStoredProcedure1(stmt); } catch (Exception e) { System.out.println(e.getMessage()); } try { System.out.println("Criando Stored Procedured 2"); criaStoredProcedure2(stmt); } catch (Exception e) { System.out.println(e.getMessage()); } /* Executando as Stored Procedures */ try { System.out.println("Executando Stored Procedured 1"); executaStoredProcedure1(con, stmt); } catch (Exception e) { System.out.println(e.getMessage()); } try { System.out.println("Executando Stored Procedured 2"); executaStoredProcedure2(con, stmt); } catch (Exception e) { System.out.println(e.getMessage()); } /* Fechando a conexo */ try { con.close(); System.out.println( "Conexo com o banco de dados fechada" ); } catch ( SQLException sqle ) { System.out.println( "Erro no fechamento da conexo : " + sqle.getMessage() ); } }

Java - 128

private static void criaStoredProcedure1 (Statement stmt) { /* Comando sql para criao da strored procedure */ String storedProcedure = "CREATE PROCEDURE INSERE_MEMBRO" + "(@codigo VARCHAR(10), @nome VARCHAR(50), @email VARCHAR(50), @senha VARCHAR(10))" + "AS " + " INSERT INTO TB_MEM_MEMBRO (MEM_CD_MEMBRO, MEM_NM_MEMBRO, MEM_EMAIL , MEM_SENHA)" + " VALUES (@codigo, @nome, @email, @senha)"; try { /* Executando o comando sql de criao da stored procedure */ stmt.executeUpdate( storedProcedure ); System.out.println( "Stored Procedure criada" ); } catch ( SQLException sqle ) { System.out.println( "Erro criando a Stored Procedure :" + sqle.getMessage() ); } } private static void criaStoredProcedure2 (Statement stmt) { /* Exemplo de Stored Procedure que retorna valores */ String storedProcedure = "CREATE PROCEDURE MEMBRO_LOGIN" + "(@codigo VARCHAR(10))" + "AS" + " SELECT MEM_EMAIL, MEM_SENHA" + " FROM TB_MEM_MEMBRO " + " WHERE MEM_CD_MEMBRO = @codigo"; try { stmt.executeUpdate( storedProcedure ); System.out.println( "Stored Procedure criada" ); } catch ( SQLException sqle ) { System.out.println("Erro criando a Stored Procedure :" + sqle.getMessage() + "ErrorCode: " + sqle.getErrorCode()); } } private static void executaStoredProcedure1 (Connection con, Statement stmt) { /* Excetudando a Stored Procedure */ try { /* String com a chamada a stored procedure */ String storedProcedureCall = "{call INSERE_MEMBRO(?,?,?,?)}"; /* Preparando chamada estored procedure */ CallableStatement cstmt = con.prepareCall( storedProcedureCall ); /* Setando os parmetros da stored procedure */ String codigo = "90"; String nome = "Zagallo"; String email = "zagallo@flamengo.com.br"; String senha = "4x0"; cstmt.setString(1, codigo); cstmt.setString(2, nome); cstmt.setString(3, email); cstmt.setString(4, senha); /* Executando a stotred procedure */ cstmt.executeUpdate(); System.out.println("Stored Procedure Executada."); } catch ( SQLException sqle ) { System.out.println("Erro executando a Stored Procedure: " + sqle.getMessage() + "ErrorCode: " + sqle.getErrorCode()); } } private static void executaStoredProcedure2 (Connection con, Statement stmt) { /* Preparando, excetudando e retornando valores da Stored Procedure */ try { String storedProcedureCall = "{call MEMBRO_LOGIN(?)}";

Java - 129

//

CallableStatement cstmt = con.prepareCall( storedProcedureCall ); String codigo = "90"; cstmt.setString(1, codigo); cstmt.execute(); /* Executando a stored procedure e obtendo o seu retorno */ ResultSet rs = cstmt.executeQuery(); if ( rs.next() ) { String email = rs.getString(1); String senha = rs.getString(2); System.out.println("Email : " + email); System.out.println("Senha : " + senha); } System.out.println( "Stored Procedure Executada." ); } catch ( SQLException sqle ) { System.out.println( "Erro executando a Stored Procedure : " + sqle.getMessage() + "ErrorCode: " + sqle.getErrorCode()); } }

Java - 130

Controle de Transaes Programa(s) Demonstrao


package jdbc.listaDiscussao; import import import import java.sql.DriverManager; java.sql.SQLException; java.sql.Connection; java.sql.Statement; jdbc.listaDiscussao.JavaSqlTransacao

public class JavaSqlTransacao implements DataBaseConstantes { public static void main(String[] args) { Connection con = null; Statement stmt = null; try { Class.forName( DRV ); System.out.println( "Driver JDBC carregado" ); con = DriverManager.getConnection( URL, USUARIO, SENHA ); System.out.println( "Conexo com o banco de dados estabelecida." ); stmt = con.createStatement(); } catch ( ClassNotFoundException cnfe ) { System.out.println( "Driver JDBC no encontrado : " + cnfe.getMessage() ); } catch ( SQLException sqle ) { System.out.println( "Erro na conexo ao Bando de Dados : " + sqle.getMessage() ); } /* Comandos sql da transao */ String comando1 = "INSERT INTO TB_MEM_MEMBRO VALUES " + "('99', 'Luis Amstrong', 'la@musica.com', 'music')"; String comando2 = "INSERT INTO TB_LST_LISTA VALUES " + "('99', 'Msica', 'Msica', '15-JAN-2000')"; /* Criando a transaao */ try { /* Desligando o Commit automtico */ con.setAutoCommit( false ); /* Executando o primeiro comando da transao */ stmt.executeUpdate( comando1 ); /* Simulando o acontecimento de uma exceo */ if ( true ) { throw new SQLException("Erro provocado"); } /* Executando o segundo comando da transao */ stmt.executeUpdate( comando2 ); /* Efetuando o Commit */ con.commit(); System.out.println( "Transao realizada" ); } catch ( SQLException sqle ) { /* Desfazendo os comandos */ try { con.rollback(); System.out.println( "Transao no realizada" ); } catch ( SQLException sqlerb ) { System.out.println( "Erro na recuperao das transaes : " + sqlerb.getMessage() ); } } finally { /* Ligando o Commit automtico */ try { con.setAutoCommit( true ); } catch ( SQLException e ) { System.out.println( "Erro ligando o AutoCommmit" + e.getMessage() ); } } }

Java - 131

Java - 132

Metadados de comandos SQL Programa(s) Demonstrao


package jdbc.listaDiscussao; import import import import import java.sql.SQLException; java.sql.Connection; java.sql.Statement; java.sql.ResultSet; java.sql.ResultSetMetaData; jdbc.listaDiscussao.JavaSqlResultSetMetaData

public class JavaSqlResultSetMetaData implements DataBaseConstantes { public static void main(String[] args) { Statement stmt = null; try { stmt = DataBaseConnection.getStatement(DRV,URL , USUARIO, SENHA ); } catch ( ClassNotFoundException cnfe ) { System.out.println( cnfe.getMessage() ); } catch ( SQLException sqle ) { System.out.println( sqle.getMessage() ); } try { /* Comando sql a ser executado */ String query = "SELECT * FROM TB_LST_LISTA"; /* Executando o comando sql */ ResultSet rs = stmt.executeQuery( query ); /* Obtendo objeto com metadados do resultado da execuo */ ResultSetMetaData rsmd = rs.getMetaData(); System.out.println( "[ ColumnLabel , ColumnName, " + "ColumnType , ColumnTypeName ]" ); /* Obtendo metados */ for ( int i = 1 ; i <= rsmd.getColumnCount() ; i++ ) { System.out.print( rsmd.getColumnLabel( i ) + " , " ); System.out.print( rsmd.getColumnName( i ) + " , " ); System.out.print( rsmd.getColumnType( i ) + " , " ); System.out.println( rsmd.getColumnTypeName( i ) ); } } catch ( SQLException sqle ) { System.out.println( "Erro obtendo metadadata :" + sqle.getMessage() ); } } }

Java - 133

Metadados do Banco de Dados Programa(s) Demonstrao


package jdbc.listaDiscussao; import import import import import java.sql.SQLException; java.sql.Connection; java.sql.DatabaseMetaData; java.sql.ResultSet; java.sql.ResultSetMetaData; jdbc.listaDiscussao.JavaSqlDatabaseMetaData

public class JavaSqlDatabaseMetaData implements DataBaseConstantes { public static void main(String[] args) { Connection con = null; try { con = DataBaseConnection.getConnection( DRV, URL, USUARIO, SENHA ); } catch ( ClassNotFoundException cnfe ) { System.out.println( cnfe.getMessage() ); } catch ( SQLException sqle ) { System.out.println( sqle.getMessage() ); } try { /* Obtendo objeto com metadados do banco de dados */ DatabaseMetaData dbmd = con.getMetaData(); ResultSet rs = null; /* Obtendo metadados do banco de dados */ System.out.println( "DriverName = " + dbmd.getDriverName() ); System.out.println( "DriverVersion = " + dbmd.getDriverVersion() ); /* tipos de tabelas a serem obtidas */ String[] tableTypes = {"TABLE", "VIEW"}; /* Obtendo todas as tabelas dos tipos especificados */ rs = dbmd.getTables(null, null, "%", tableTypes ); System.out.println( "Tabelas do banco : " ); imprimeResultSet( rs ); /* Obtendo as chaves primrias de uma tabela */ rs = dbmd.getPrimaryKeys(null, null, "TB_MEM_MEMBRO"); System.out.println( "Chave primria" ); imprimeResultSet( rs ); /* Obtendo os campos nicos de uma tabela */ rs = dbmd.getIndexInfo(null, null, "TB_MEM_MEMBRO", true, false); System.out.println("Campos nicos da tabela TB_MEM_MEMBRO"); imprimeResultSet(rs); } catch ( SQLException sqle ) { System.out.println( "Erro obtendo metadata." ); } } public static void imprimeResultSet ( ResultSet rs ){ try { ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); while ( rs.next() ) { for ( int i = 1 ; i <= columnCount ; i++ ) { System.out.print( rs.getString( i ) + " "); } System.out.println( ); } } catch ( Exception e ) { } } }

Java - 134

Interface com as contantes para as operaes no banco de dados Programa(s) Demonstrao


package jdbc.listaDiscussao; public interface DataBaseConstantes { /* Nomes dos drives JDBC do Interbase, SqlServer e Oracle*/ // public final static String DRV = "interbase.interclient.Driver"; // public final static String DRV = "oracle.jdbc.driver.OracleDriver"; public final static String DRV = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; // // /* URLs para public final public final public final o Interbase, SqlServer e Oracle*/ static String URL = "jdbc:interbase://localhost/D:/temp/BD.GDB"; static String URL = "jdbc:oracle:thin:@localhost:1521:ORCL"; static String URL = "jdbc:microsoft:sqlserver://localhost:1433"; jdbc.listaDiscussao.DataBaseConstantes

/* Usurio e senha para conexo */ public final static String USUARIO = "ListaDiscussao"; public final static String SENHA = "ListaDiscussao"; }

Java - 135

Classe utilitria facilitando o acesso e execuo de comandos sql


jdbc.listaDiscussao.DataBaseConnection /** * Classe com mtodos esttico permitindo a conexo com o banco de dados e * a obteno do objeto statement para exexuo de comandos sql */ package jdbc.listaDiscussao;

Programa(s) Demonstrao

import import import import

java.sql.DriverManager; java.sql.SQLException; java.sql.Connection; java.sql.Statement;

public class DataBaseConnection { public static Connection getConnection (String driver, String url, String usuario, String senha ) throws ClassNotFoundException, SQLException { Connection con = null; try { Class.forName( driver ); System.out.println( "Driver JDBC carregado" ); con = DriverManager.getConnection( url, usuario, senha ); System.out.println( "Conexo com o banco de dados estabelecida." ); } catch ( ClassNotFoundException cnfe ) { String msg = "Driver JDBC no encontrado : " + cnfe.getMessage(); throw new ClassNotFoundException( msg ); } catch ( SQLException sqle ) { String msg = "Erro na conexo ao Bando de Dados : " + sqle.getMessage(); throw new SQLException( msg ); } return con; } public static Statement getStatement (String driver, String urlBD, String usuario, String senha) throws ClassNotFoundException, SQLException { Connection con = null; try { con = DataBaseConnection.getConnection( driver, urlBD , usuario, senha ); } catch ( ClassNotFoundException cnfe ) { throw new ClassNotFoundException( cnfe.getMessage() ); } catch ( SQLException sqle ) { throw new SQLException( sqle.getMessage() ); } return con.createStatement(); } }

Java - 136

Aplicao grfica para execuo de comandos SQL Programa(s) Demonstrao


package jdbc; import import import import import import import import import import import import javax.swing.*; javax.swing.border.*; java.awt.*; java.awt.event.*; java.util.Vector; java.sql.SQLException; java.sql.Connection; java.sql.DriverManager; java.sql.Statement; java.sql.ResultSet; java.sql.ResultSetMetaData; java.sql.Types; jdbc.ISQL

public class ISQL extends JFrame { public final static String INTERBASE_DRV = "interbase.interclient.Driver"; public final static String SQLSERVER_DRV = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; public final static String ORACLE_DRV = "oracle.jdbc.driver.OracleDriver"; /* URLs para o Interbase, SqlServer e Oracle*/ public final static String INTERBASE_URL = "jdbc:interbase://localhost/D:/temp/BD.GDB"; public final static String SQLSERVER_URL = "jdbc:microsoft:sqlserver://localhost:1433"; public final static String ORACLE_URL = "jdbc:oracle:thin:@localhost:1521:ORCL"; /* Usurio e senha para conexo */ public final static String USUARIO = "ListaDiscussao"; public final static String SENHA = "ListaDiscussao"; JPanel jPanelApp = new JPanel(); JPanel jPanelConfig = new JPanel(); JPanel jPanelQuery = new JPanel(); JScrollPane jScrollPaneQuery = new JScrollPane(); JTable jTableQuery = new JTable(); JLabel jLabel1 = new JLabel(); String[] drivers = {ORACLE_DRV, INTERBASE_DRV, SQLSERVER_DRV}; JComboBox jComboBoxDriver = new JComboBox(drivers); JLabel jLabel2 = new JLabel(); JTextField jTextFieldURL = new JTextField(); JLabel jLabel3 = new JLabel(); JLabel jLabel4 = new JLabel(); JTextField jTextFieldUsuario = new JTextField(); JTextField jTextFieldSenha = new JTextField(); JTextArea jTextAreaQuery = new JTextArea(); JButton jButtonExecutar = new JButton(); JButton jButtonLimpar = new JButton(); JButton jButtonSair = new JButton(); JRadioButton jRadioButtonQuery = new JRadioButton(); JRadioButton jRadioButtonUpdate = new JRadioButton(); ButtonGroup buttonGroup1 = new ButtonGroup(); JTable jTableResultado = new JTable(); BorderLayout borderLayout1 = new BorderLayout(); public ISQL() { try { jbInit(); }

Java - 137

catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { ISQL isql = new ISQL(); isql.setSize(530,450); isql.show(); } private void jbInit() throws Exception { jPanelApp.setLayout(null); jPanelConfig.setBorder(BorderFactory.createEtchedBorder()); jPanelConfig.setBounds(new Rectangle(5, 5, 518, 145)); jPanelConfig.setLayout(null); jPanelApp.setBorder(BorderFactory.createLineBorder(Color.black)); jPanelQuery.setBorder(BorderFactory.createEtchedBorder()); jPanelQuery.setBounds(new Rectangle(7, 154, 515, 264)); jPanelQuery.setLayout(borderLayout1); jScrollPaneQuery.setAutoscrolls(true); jLabel1.setText("Driver"); jLabel1.setBounds(new Rectangle(4, 5, 41, 17)); jComboBoxDriver.setBounds(new Rectangle(60, 5, 448, 20)); jComboBoxDriver.setSelectedIndex(1); jComboBoxDriver.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(ItemEvent e) { jComboBoxDriver_itemStateChanged(e); } }); String bd = ""; jTextFieldURL.setText(bd); jLabel2.setText("URL"); jLabel2.setBounds(new Rectangle(6, 34, 30, 17)); jTextFieldURL.setBounds(new Rectangle(60, 36, 451, 19)); jLabel3.setText("Usurio"); jLabel3.setBounds(new Rectangle(8, 60, 55, 17)); jLabel4.setText("Senha"); jLabel4.setBounds(new Rectangle(8, 86, 41, 17)); jTextFieldUsuario.setBounds(new Rectangle(60, 59, 84, 21)); jTextFieldUsuario.setText("ListaDiscussao"); jTextFieldSenha.setBounds(new Rectangle(60, 83, 84, 21)); jTextFieldSenha.setText("ListaDiscussao"); jTextAreaQuery.setBorder(BorderFactory.createLineBorder(Color.black)); String qry = "SELECT * FROM TB_MEM_MEMBRO ORDER BY MEM_NM_MEMBRO"; jTextAreaQuery.setText( qry ); jTextAreaQuery.setBounds(new Rectangle(150, 56, 360, 54)); jButtonExecutar.setText("Executar"); jButtonExecutar.setBounds(new Rectangle(10, 111, 91, 27)); jButtonExecutar.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { jButtonExecutar_mouseClicked(e); } }); jButtonLimpar.setText("Limpar"); jButtonLimpar.setBounds(new Rectangle(108, 112, 94, 26)); jButtonLimpar.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { jButtonLimpar_mouseClicked(e); } }); jButtonSair.setText("Sair"); jButtonSair.setBounds(new Rectangle(210, 113, 74, 25)); jButtonSair.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jButtonSair_actionPerformed(e); } }); jRadioButtonQuery.setText("Query"); jRadioButtonQuery.setSelected(true);

Java - 138

jRadioButtonQuery.setBounds(new Rectangle(290, 112, 59, 25)); jRadioButtonUpdate.setText("Update"); jRadioButtonUpdate.setBounds(new Rectangle(355, 113, 66, 25)); this.setDefaultCloseOperation(3); this.setResizable(false); this.setTitle("SQL"); buttonGroup1.add(jRadioButtonQuery); buttonGroup1.add(jRadioButtonUpdate); this.getContentPane().add(jPanelApp, BorderLayout.CENTER); jPanelApp.add(jPanelConfig, null); jPanelConfig.add(jLabel1, null); jPanelConfig.add(jLabel2, null); jPanelConfig.add(jLabel3, null); jPanelConfig.add(jLabel4, null); jPanelConfig.add(jComboBoxDriver, null); jPanelConfig.add(jTextFieldURL, null); jPanelConfig.add(jTextFieldUsuario, null); jPanelConfig.add(jTextFieldSenha, null); jPanelConfig.add(jTextAreaQuery, null); jPanelConfig.add(jButtonExecutar, null); jPanelConfig.add(jButtonLimpar, null); jPanelConfig.add(jButtonSair, null); jPanelConfig.add(jRadioButtonQuery, null); jPanelConfig.add(jRadioButtonUpdate, null); jPanelApp.add(jPanelQuery, null); jPanelQuery.add(jScrollPaneQuery, BorderLayout.CENTER); } void jButtonSair_actionPerformed(ActionEvent e) { System.exit( 0 ); } void jComboBoxDriver_itemStateChanged(ItemEvent e) { if ( jComboBoxDriver.getSelectedIndex() == 0 ) { jTextFieldURL.setText(ORACLE_URL); } else if (jComboBoxDriver.getSelectedIndex() == 1 ) { jTextFieldURL.setText(INTERBASE_URL); } else { jTextFieldURL.setText(SQLSERVER_URL); } } void jButtonExecutar_mouseClicked(MouseEvent e) { executarConsulta(); } private void executarConsulta () { try { /* Carregando o driver de banco de dados */ Class.forName(jComboBoxDriver.getSelectedItem().toString()); /* Conectando ao banco de dados */ Connection connection = DriverManager.getConnection(jTextFieldURL.getText(), jTextFieldUsuario.getText(), jTextFieldSenha.getText()); /* Obtendo objeto para execuo de comandos sql */ Statement stmt = connection.createStatement(); if (jRadioButtonQuery.isSelected()) { /* Executando comando sql */ ResultSet rs = stmt.executeQuery(jTextAreaQuery.getText()); /* Obtendo metadada do ResultSet : Colunas */ ResultSetMetaData rsmd = rs.getMetaData(); Vector colunas = colunas (rsmd); /* Obtendo dados do ResultSet */ Vector linhas = new Vector(); while (rs.next()) { linhas.addElement(linha(rs,rsmd)); } /* Inserindo os dados no Objeto jTable */ jTableResultado = new JTable(linhas, colunas); jScrollPaneQuery.getViewport().add(jTableResultado, null);

Java - 139

} else { stmt.executeUpdate(jTextAreaQuery.getText()); } connection.close(); } catch (ClassNotFoundException classEx) { String msg = "Erro ao carregar o driver"; JOptionPane.showMessageDialog(null, msg + "\n" + classEx.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE); } catch (SQLException sqlEx) { String msg = "Erro na conexo ao banco de dados"; JOptionPane.showMessageDialog(null, msg + "\n" + sqlEx.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE); } catch (Exception ex) { String msg = "Erro Geral" + ex.getMessage(); JOptionPane.showMessageDialog(null, msg + "\n" + ex.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE); } } private Vector colunas (ResultSetMetaData rsmd) { Vector colunas = new Vector(); try { for (int i = 1 ; i <= rsmd.getColumnCount(); i++ ) { colunas.addElement(rsmd.getColumnName(i)); } } catch (SQLException e) {} return colunas; } private Vector linha (ResultSet rs, ResultSetMetaData rsmd) throws SQLException { Vector linha = new Vector(); /* Obtendo os valores dos campos e inserindo-os no Vector*/ for ( int i = 1 ; i <= rsmd.getColumnCount(); i++ ) { /* Verificando no ResultSetMetaData o tipo do campo, * para utilizar o mtodo ResultSet.getXXXX(int) adequado */ switch ( rsmd.getColumnType(i) ) { case Types.CHAR: case Types.VARCHAR: case Types.LONGVARCHAR: linha.addElement( rs.getString(i) ); break; case Types.DECIMAL: case Types.NUMERIC: linha.addElement( new Float( rs.getFloat(i) ) ); break; case Types.BIT: linha.addElement( new Boolean ( rs.getBoolean(i) ) ); break; case Types.TINYINT: case Types.SMALLINT: case Types.INTEGER: linha.addElement( new Long( rs.getLong(i) ) ); break; case Types.FLOAT: case Types.DOUBLE: linha.addElement( new Double ( rs.getDouble(i) ) ); break; case Types.DATE: linha.addElement( rs.getDate(i) ); break; case Types.TIME: linha.addElement( rs.getTime(i) ); break; default :

Java - 140

linha.addElement( " Tipo no Tratado" ); } } return linha; } void jButtonLimpar_mouseClicked(MouseEvent e) { jTextAreaQuery.setText(""); } }

Java - 141

Bibliografia/ 1. DEITEL. "Java - How To Program, Third Edition". Prentice Hall, 1999 2. MUGHAL. Khalid. "A Programmers Guide to JAVA Cetification." Addison-Wesley, 1999 3. CAPIONE, Mary. "The Java Tutorial Second Edition. Object-Oriented Programming for the Internet". Sun Microsystem, 1998. 4. MUGHAL. Khalid. "A Programmers Guide to JAVA Cetification." Addison-Wesley, 1999 5. HAMILTON. Graham. "JDBC Database Access with Java". Sun Microsystem, 1997. 6. LEMAY, Laura. "Aprenda Java em 21 dias". Campus, 1999 7. HAEFEL. Richard Monson. "Enterprise JavaBeans". OReilly, 2000 8. "Professional Java Server Programming". WROX Press, 1999 9. LEA, Doug. "Concurrent Programming in Java. Design Principles and Patterns". Sun Microsystem, 1998.

Fontes de Pesquisa
Links
http://www.javasoft.com/j2se/1.3/download-windows.html http://www.borland.com/jbuilder/foundation/download/windows.html http://web2.java.sun.com/docs/books/tutorial/ http://www.dcc.ufrj.br/~schneide/MSI2_962/grupo4/g41.htm http://java.sun.com/products/jdk/javadoc/index.html#javadoc1.3documents http://java.sun.com/docs/codeconv/index.html http://www.unit.br/zemaria/MaterialDidatico.htm http://www.unit.br/zemaria/MaterialDidatico.htm

Descrio
Download jdk1.3 Download JBuilder 3.5 Foundation Tutorial java Glossrio de orientao a objetos Tags JavaDoc Code Conventions Programando com Qualidade, contendo Code Conventions em portugus. Threads em Java

Java - 142

Exerccios
Exerccio 1: Digitar, compilar e executar no JBuilder o application abaixo. /** * Demonstrao de um Application Java */ /* Definio do pacote */ package introducao; /* Importando a classe String */ import java.lang.String; /* Definio da classe */ public class Aplicacao { /* Mtodo main */ public static void main(String[] args) { /* Declarando e instanciando um objeto String */ String mensagem = "Application Java"; /* Escrevendo o objeto String na sada padro */ System.out.print(mensagem); } }

Java - 143

Exerccio 2: Resolva os problemas abaixo com applications Java Problema 1: "Leia um valor inteiro representando o valor solicitado para saque num caixa eletrnico, em seguida, sabendo que o caixa est alimentado com notas de 1, 5, 10, 50 e 100 reais, calcule e escreva quantas notas de cada valor sero necessrias para atender a solicitao de saque" Problema 2: "Leia um salrio, atualize e escreva-o de acordo com a tabela abaixo" Faixa salarial at 1.000,00 acima de 1.000,00 e at 2.000,00 acima de 2.000,00 Percentual de aumento 30% 20% 10%

Problema 3: "Ler trs valores float e imprimir se estes podem ou no formar os lados de um tringulo e qual triangulo seria. Observao: Para formar os lados de um tringulo cada um dos valores deve ser menor que a soma dos outros dois. Um triangulo pode ser : eqiltero (3 lados iguais), issceles (apenas 2 lados iguais) e escaleno (3 lados diferentes)" Problema 4: "Leia o nome, as trs notas e o nmero de faltas de um aluno e calcule e imprima sua situao ("Aprovado", "Reprovado por Falta" ou "Reprovado por mdia"). Observao: A mdia para aprovao 5,0 (cinco) e o limite de faltas 18." Problema 5: "Leia um conjunto de nmeros inteiros, onde o flag ser o valor 0 (zero) e em seguida escreva a mdia dos nmeros lidos e o maior valor lido" Problema 6: "Leia (ou inicialize) um vetor com 10 elementos de nmeros inteiros e em seguida leia um conjunto de nmeros inteiros e para cada nmero lido informe se o mesmo est ou no presente no vetor. Problema 7: "Leia (ou inicialize) uma matriz 5x5 de nmeros inteiros e em seguida escreva cada valor presente na matriz e quantas vezes o mesmo aparece na matriz"

Java - 144

Exerccio 3: Relacione classes, atributos e mtodos para os seguintes contextos : Contexto 1: Carro Contexto 2: Aqurio Contexto 3: Jogo de futebol Contexto 4: Banco Contexto 5: Farmcia Contexto 6: Supermercado Contexto 7: Hospital Contexto 8: "Uma pequena loja deseja manter informaes sobre clientes, produtos e pedidos de produtos feitos pelos clientes, as informaes necessrias para atender um pedido so : nome e endereo do cliente que fez o pedido, relao das descries e preos dos produtos solicitados e data e endereo de entrega dos produtos." Exerccio 4: Implemente uma classe em Java que fornea as seguintes funcionalidades : 1. Armazenar um conjunto de nmeros inteiros (int) 2. Inicializar com um array de nmeros inteiros 3. Instanciar definindo a quantidade mxima de nmeros a serem armazenados 4. inserir um valor 5. Obter a quantidade de valores armazenados 6. Preencher todo o conjunto com um determinado valor a ser fornecido 7. Preencher todo o conjunto com nmeros aleatrios, fornecendo o valor mximo para o nmero aleatrio 8. Obter o maior valor armazenado 9. Obter o menor valor armazenado 10. Obter a mdia dos valores armazenados 11. Inverter as posies dos nmeros 12. Obter o nmero de uma determinada posio a ser fornecida 13. Imprimir todos os valores armazenados Implemente tambm um application que demonstre o uso de todos os mtodos da classe.

Java - 145

Exerccio 5: Implemente uma hierarquia de classes e uma aplicao, que demonstre o seu uso, para atender as requisies abaixo. 1. Armazenar informaes sobre veculos: chassi, placa, marca, modelo, revendedor, endereo do revendedor e telefone do revendedor. Caso seja um veculo de passeio: a velocidade mxima e quantidade de passageiros. Caso seja um veculo de carga: a carga mxima. Observao : O cadastro ser de no mximo 10 veculos. 2. Armazenar informaes sobre motoristas: Matrcula, nome, correo visual, validade da habilitao e tipo (A, B ou C). Observao : o cadastro ser de no mximo 10 motoristas 3. Registrar movimentaes para os veculos, onde em cada movimentao ser necessrio registrar: o motorista, a kilometragem inicial e final e a data. Observao : apenas as 5 ltimas movimentaes devem ser armazenadas. 4. Registrar manutenes realizadas nos veculos, onde para manuteno dever ser registrado: uma descrio da manuteno e a data. Observao : apenas as 5 ltimas manutenes devem ser armazenadas. 5. Listar para todos os veculos as ltimas movimentaes 6. Listar para todos os veculos as ltimas manutenes

Java - 146

Exerccio 6: Faa uma aplicao Java utilizando componentes Swing para modelar um aluno com as seguintes informaes : matricula, nome, endereco e telefones. Sendo que, a aplicao dever permitir o cadastro e consulta de alunos na tabela "Alunos" do banco de dados "jdbc:interbase://140.100.0.20/c:/InfoNet//HouseTech.gdb", utilizando o driver "interbase.interclient.Driver" e usurio "SYSDBA" e senha "masterkey". Observaes: A classe Aluno dever possuir os seguintes mtodos para operaes de banco de dados :
public void insertInto (String driver, String url, String usuario, String senha) public void updateFrom (String driver, String url, String usuario, String senha) public static Aluno selectFrom (String matricula, String driver, String url, String usuario, String senha) public static void deleteFrom (String matricula, String driver, String url, String usuario, String senha)

O comando sql para inserir numa tabela "insert into Alunos values ('00000','Jos Maria R S Junior', 'Av. Adlia Franco, 2850. Bloco I, apt. 101', '217-7883/9133-8410')" O comando sql para consultar numa tabela "select * from Alunos where matricula = '00001'" O comando sql para apagar um registro : "delete from Alunos where matricula = '00000'" O comando sql para alterar um registro : "update Alunos set nome = 'Novo Nome', endereco = 'Novo Endereco', telefones = 'Novo telefone' where matricula = '00000' O Comando de criao da tabela foi o seguinte: matricula char(05) not null primary key, nome char(50) not null, endereco char(60), telefones char(30)

create table Alunos (

Exerccio n:

Java - 147

Vous aimerez peut-être aussi