Download Java - I520

Document related concepts
no text concepts found
Transcript
Java
Índice
•
•
•
•
•
•
•
•
•
•
•
Referências
UA 1 - Introdução a Java
UA 2 - Tipos de dados, operadores e comandos de fluxo
UA 3 - Uso classes e objetos: String, arrays, Math, outras
UA 4 - Criação de métodos, classes e objetos
UA 5 - Herança e polimorfismo
UA 6 - Classes abstratas e interfaces
UA 7 - Tratamento de exceções
UA 8 - Componentes gráficos em Java (AWT e Swing)
UA 9 - Multithreading
UA 10 - Acesso a banco de dados via JDBC
Objetivos
• Posicionar a linguagem Java no contexto do
desenvolvimento de sistemas;
• Conceituar os vários termos usados em Java
como Swing, Applets, Servlets, JSP, EJB,
etc.;
• Desenvolvimento de sistemas cliente
servidor com acesso a banco de dados
usando JDBC.
Pré-requisitos
• Noções de Programação
• Noções de Orientação a Objetos
• Noções de SQL
Livros
•
•
•
•
•
Java Como Programar
Beginning Java 1.3
The Java 2 Complete Certification Study Guide
Core Java 2: Guia Autorizado
The Java Class Libraries, Second Edition,
Volumes I e II
Internet
•
•
•
•
•
•
•
http://java.sun.com/
http://www.javaboutique.com/
http://www.javaworld.com
http://www.componentsource.com/java
http://www.jguru.com/portal
http://www.theserverside.com/
http://www.javareport.com/
Referências
Introdução a Java
O que é a linguagem Java?
O que é a linguagem Java?
•
•
•
•
Você aprenderá:
Histórico da linguagem.
Características mais importantes.
Versões existentes.
Uma aplicação inicial.
Histórico da Linguagem
• Projeto Oak
• 1990
• Integração de aparelhos
• Advento da internet
• 1994 lançamento oficial
• animações, applets e conexão com servidores
• JVM embutida nos browsers
• Panorama Atual
• Grande utilização nos servidores web
• Suportada pela grande maioria dos servidores de aplicação
• SGBD com JVM
Características importantes
• Orientada a objeto
– “Modificar é a regra e não a exceção”
• Interpretada e independente de plataforma
– JVM com JIT - Just in Time Compilers
• Multithreaded
– Executa, por natureza, vários trechos de código ao mesmo tempo
• Robusta e segura
– Fortemente tipada, sem acesso direto a endereços de memória evitando
erros de acesso e perda de ponteiros, applets sem acesso a disco, etc..
• Dinâmica e distribuída
– Alterações feitas apenas nas classes pertinentes sem a necessidade de
recompilação de todo o sistema. Possibilidade de “entrega” de
componentes pela rede de forma transparente para o usuário
Versões existentes
•
•
•
•
•
•
Versão 1.0
Versão 1.1 - Ainda muito usado
Versão 1.2 (Java 2) - Grandes mudanças
Versão 1.3
Versão 1.4
De uma versão para outra um método, atributos ou
mesmo uma classe inteira pode ficar “deprecated”
ou depreciada, obsoleta. Tenha sempre em mãos a
documentação apropriada.
Especializações do JDK
• JRE - Java Runtime Edition
– É o próprio interpretador Java, o mínimo necessário para executar
programas em Java. Browsers instalam apenas o JRE (5Mb aprox.).
• J2SE - Java 2 Standard Edition
– Também conhecido como JDK - Java Development Kit. É composto do
JRE, ferramentas de desenvolvimento e compilador (45Mb aprox).
• J2EE - Java 2 Enterprise Edition
– Complemento ao JDK que instala um conjunto de bibliotecas necessárias
para suportar Servlets, JSP, JDBC e outras (aprox. 17Mb).
• J2ME - Java 2 Micro Edition
– Simplificação da linguagem usada para desenvolvimento de aplicações
para palmtops e dispositivos hand-held
• Documentação
– Fornecido separadamente. Existem versões próprias para cada
especialização do JDK (aprox. 20Mb).
Alguns Ambientes de
Desenvolvimento
• Ferramentas de linha de comando
– Notepad :)
– TextPad
– UltraEdit
• Ferramentas visuais
–
–
–
–
–
Borland JBuilder
IBM Visual Age for Java
Visual Café
Oracle JDeveloper (facilidades para o DB)
MS Visual J++ (Evitem – problemas de
compatibilidade)
– iPlanet Fortè
Uma aplicação inicial
Comentários:
// - uma única linha.
/* ...*/ - várias linhas
/** .... */ javadoc
1
2
3
4
5
6
Nome da classe, também
define o nome do
arquivo.java
Método main( ).
Ponto de entrada
no sistema
// Isso é um programa exemplo
public class HelloWorld {
public static void main (String args[]) {
System.out.println(“Oi mundo!”);
}
}
{ } - chaves delimitam
um bloco de comando.
Case sensitive, sensível
à maiúsculas e
minúsculas
Obs.: Todo código Java tem que estar dentro de uma classe (class).
Classes serão usadas para criação de objetos, mas aqui, foi
colocada apenas por compatibilidade.
; - ponto-e-vírgula
é obrigatório ao final
de cada instrução.
Lab 01-B
caixa de mensagem
Objetivo:
– Aprofundar conceitos
Tarefas:
– Altere seu programa conforme o código abaixo:
1
2
3
4
5
6
7
8
9
// Programa exemplo
public class HelloWorld2 {
public static void main (String args[]) {
System.out.println("Antes da mensagem");
javax.swing.JOptionPane.showMessageDialog(null,
"Oi mundo!", "exercício Java",1);
System.out.println("Depois da mensagem");
}
}
Observe que as linhas 5 e 6 representam uma mesma
instrução.
Máquina Virtual Java (JVM)
Máquina Virtual Java (JVM)
Você aprenderá:
• O que é a máquina virtual Java.
• Por “dentro” da JVM
–
–
–
–
Class Loader.
Bytecode Verifier.
Interpretador
Garbage Collector.
O que é a máquina virtual
Java (JVM)
• É o ambiente onde os programas
desenvolvidos na linguagem Java são
executados.
• Responsável pela importante característica
de portabilidade de Java.
• Vem junto com o JDK e em alguns
browsers (Microsoft Internet Explorer e
Netscape Navigator) para execução de
applets.
Por “dentro” da JVM
Class Loader e Bytecode Verifier
• Class Loader - Carregador de classe
– Faz a carga de todas as classes necessárias para a
execução do programa feito em Java.
– Faz parte do esquema de segurança da linguagem.
• Bytecode Verifier - Verificador de Bytecode
– Testa o código contido no arquivo com extensão class
antes de executá-lo.
– Verifica se há código ilegal.
– Também faz parte do esquema de segurança da
linguagem.
Por “dentro” da JVM
Interpretador
• Lê os bytecodes e os traduz para uma
linguagem que o computador pode
entender.
• Armazena valores dos dados enquanto
executa o programa.
Por “dentro” da JVM
Garbage Collector
• O GC ou “coletor de lixo” é responsável
pelo gerenciamento da memória usada pelo
programa.
• Evita que acessos a posições inválidas de
memória sejam feitas pelos programadores.
• A implementação varia de acordo com a
plataforma considerada.
Lab 1.D
observação de erros comuns
Objetivo:
– Praticar o processo de edição-compilaçãoexecução de código Java
Tarefas:
– Resolvendo pequenos problemas (bugs)
ocorridos em tempo de compilação e execução.
Arquiteturas de
Desenvolvimento
O desenvolvimento de
sistemas
• As arquiteturas para desenvolvimento de
sistemas podem ser dividas em 3 grupos:
– 1-tier (1 camada)
– 2-tier (2 camadas)
– 3-tier (3 camadas)
Arquitetura 1-tier
• Arquitetura antiga onde as aplicações e os
dados residem em um único ambiente,
geralmente um computador central como os
mainframes. Os clientes são terminais
sem poder de processamento.
Arquitetura 2-tier
• Arquitetura recente e muito utilizada. Mais
conhecida como arquitetura cliente/servidor
(nome muito comum);
• Os componentes são geralmente o cliente,
residente em estações de trabalho, e o
servidor, residente em máquinas centrais, de
maior capacidade;
• O componente cliente faz solicitações que
são atendidas pelo componente servidor,
criando um interação contínua.
Arquitetura 2-tier
• Na arquitetura cliente/servidor, os dados
ficam armazenados em bancos de dados e é
necessário instalar o software nos clientes.
Clientes
(Front-End)
servidor
(banco de dados)
Oracle
Informix
Sybase
SQL Server
...
Arquitetura 3-tier
• Arquitetura diretamente derivada da
cliente/servidor, o modelo 3-tier foi uma
divisão lógica feita em relação ao modelo
precursor e que pode ser considerada o
padrão para o desenvolvimento de
aplicações baseadas na Web (Web-based
applications).
• Isola o cliente da base de dados.
Características
1a. Camada
Serviço de
Apresentação
cliente
(browser)
2a. Camada
Serviço de
Negócios
servidor
(servidor Web)
aplicação dinâmica
3a. Camada
Serviço de
Dados
servidor
(banco de dados)
Oracle
Informix
Sybase
SQL Server
...
Conceitos de Java no
Desenvolvimento de Sistemas
Programação Java
Conceitos Fundamentais
• Regras da linguagem - sintaxe;
• Estruturas de controle de fluxo;
• Métodos e classes - Programação
Baseada em Objetos;
• O estudo destes tópicos será foco deste
curso.
Programação Java
Conceitos Avançados
• Herança, polimorfismo, interfaces programação Orientada a Objetos;
• Tratamento de exceções
• Capacidade multithreding
AWT e Swing
• Classes Java usadas para criação de
interfaces gráficas para sistemas
cliente/servidor (2 camadas)
Applet
• Classe Java usada na arquitetura Web (3
camadas), mais especificamente na primeira
camada, encapsulado ao Browser.
Conectividade de banco de
dados Java - JDBC
• Tecnologia que permite acessar banco de
dados.
• Possui várias características importantes:
–
–
–
–
Modelo próprio de Serviços de Negócios
Reduz o risco do negócio
Permite a portabilidade entre plataformas
Especificado por Comitê
• O estudo de JDBC será foco deste curso.
Servlets
• Classes Java que executam dentro do servidor
Web (2ª camada);
• Possui várias características importantes:
– É executada dentro de processos especiais
– Pode ser chamado por múltiplos clientes, sejam eles feitos
em Java ou não.
– Processamento de pedidos concorrentes.
– Os métodos de um servlet são executados em threads.
– As instâncias de um servlet são reutilizadas quando
necessárias.
Java Server Pages - JSP
• Páginas HTML geradas dinamicamente no
Servidor Web (2ª camada);
• Possui várias características importantes:
– São independentes de plataforma, eficientes e
seguros.
– Separa a interface do usuário do conteúdo
dinâmico.
– Podem conectar-se a um JavaBean .
• O estudo de servles é foco do curso “Java II
- Servlets e JSP” do Instituto Infnet.
Enterprise JavaBeans - EJB
• Empacotamento de classes definidas como
componentes de software reutilizáveis.
• Possui várias características importantes:
–
–
–
–
Modelo próprio de Serviços de Negócios
Reduz o risco do negócio
Permite a portabilidade entre plataformas
Especificado por Comitê
UA “Introdução a Java” - BCA “Arquiteturas de Desenvolvimento e o Java ”
Tipos de Dados, Operadores
e Comandos de Fluxo
Tipos de Dados Primitivos
Identificadores
• Usados para identificar variáveis,
constantes, classes, instâncias de classe
(objetos), métodos, etc..
• Regras de formação de identificadores
• Algumas convenções estabelecidas
Identificadores
Principais regras
• Começa com letras ou _(sublinhado). $ é
válido mas deve ser evitado;
• Pode conter dígitos no meio ou no final;
• Há distinção entre maiúsculas e minúsculas;
• Não podemos usar caracteres acentuados de
qualquer tipo;
• Não podemos usar palavras reservadas.
Identificadores
Principais convenções
• Métodos e variáveis:
– Palavras simples - tudo em minúsculo
– Palavras compostas - Começa com minúscula
e a inicial das outras palavras em maiúscula.
• Constantes:
– Tudo em maiúsculo. Palavras compostas separadas com _
(sublinhado).
• Classes:
– Palavras simples - Começa com maiúscula
– Palavras compostas Começa com maiúscula
e a inicial das outras palavras em maiúscula.
• Arquivos:
– Mesmas convenções das classes.
Identificadores
Exemplos de identificadores válidos:
Botafogo
_teste20
$dinheiro
futebolProfissionalBrasileiro
nome_jogador
thisOne
TAXA_SERVICO
Os 8 Tipos Primitivos
•
•
•
•
•
•
•
•
byte
short
int
long
float
double
char
boolean
(8 bits)
(16 bits)
(32 bits)
(64 bits)
(32 bits)
(64 bits)
(16 bits)
(1 bit)
Numéricos sem
casa decimal
Numéricos com
casa decimal
Caracter da tabela unicode
true/false (não pode ser
numérico)
Os 8 Tipos Primitivos
Lógico – boolean
boolean status = true;
// os literais sempre em letra minúscula
Os 8 Tipos Primitivos
Textual – char - 16 bits - 2 bytes
char meuCaracter = ‘L’;
char meuCharUnicode = ‘\u0058’;
A contrabarra indica uma seqüência de
escape.
Os 8 Tipos Primitivos
‘\b’ - backspace
‘\t’ - tab
‘\f’ - form feed
‘\n’ - line feed
‘\r’ - carriage return
‘\’’ - aspas simples
‘\”’ - aspas duplas
‘\\’ - contrabarra
Os 8 Tipos Primitivos
Inteiros – byte, short, int e long
A diferença entre eles está no intervalo de
valores que cada um pode suportar
byte menor = 10; // 1 byte -128 a 127
short pequeno = 456;// 2 bytes
int normal = 10252; // 4 bytes
long muitoGrande = 6263732239; // 8 bytes
Os 8 Tipos Primitivos
Ponto flutuante – float e double
• float - precisão simples que utiliza 32 bits de
armazenamento. Tornam-se imprecisas para valores muito
grandes ou muito pequenos. Úteis quando precisamos de
um valor fracional sem grande necessidade de precisão.
Exemplo reais e centavos.
• Double - precisão dupla que utiliza 64 bits de
armazenamento.
float numeroReal = 10.9f;// 4 bytes
double numero = 6745.9E13;// 8 bytes
Variáveis
• Java é uma linguagem “fortemente tipada”
• Cada variável pode armazenar um único
tipo de dado.
• Cada variável possui:
–
–
–
–
Um identificador
Um tipo de dado
Um valor (pode ser null)
Um tamanho (definido pelo tipo)
Declaração de variáveis
 Toda variável deve ser declarada explicitamente
<tipo primitivo>< identificador > [ ,
< identificador2, ... > ][ = valor inicial ] ;
• Exemplos:
int numeroDias;
char opcao;
float cotacaoDolar;
boolean status;
double qtd1, preco1;
Inicialização de variáveis
• Variáveis possuem um escopo que determina em
que locais do código-fonte elas podem ser
visualizadas.
• Dependendo do local onde a variável for declarada
esta receberá um valor padrão (default).
• Exemplo:
int numeroDias;
numeroDias = 15;
ou
int numeroDias = 15, cont, f = 5;
Conversões e casting
• Não existe downcasting
• A conversão deve ser explícita
public class TiposPrimitivos{
public static void main(String args[])
{
int a = 4, b = 5;
int c;
c = a / b;
System.out.println("c = " + c);
double d;
d = a / b;
System.out.println("d = " + d);
c=0
d = 0.0
e = 0.8
Press any key...
double e;
e = (double) a / b; //Conversão deve ser explícita
System.out.println("e = " + e);
}
}
Conversões e casting
long grande = 890L;// inicialmente com 64 bits
int pequeno = (int) (grande); //coerção explícita
char letra = (char) 87 // Letra ‘W’
Lembre-se que fazer a coerção explícita,
podem surgir resultados imprevisíveis.
Operadores
Operador de atribuição
• Atribuição simples ( = )
• A expressão da direita é atribuída à variável
que está à esquerda.
x = 110;
Y = x + 12;
• Pode ser utilizado de forma encadeada
x = y = z = 55;
Operadores aritméticos
operadores binários
• Requerem dois operandos
• Operações aritméticas básicas
• Funciona com variáveis numéricas e literais
int
x =
y =
z =
x =
y =
x, y, z;
229 + 23;
73 – 9;
72 * 6;
y / z;
x % z;
//
//
//
//
//
adição
subtração
multiplicação
divisão
resto da divisão
Operadores aritméticos
operadores unários
• O operador ++ incrementa de 1
• O operador -- decrementa de 1
• Duas formas de utilização: pré-fixada e pósfixada.
int x, y;
x = 2;
y = x++; // pós-fixado => x = 3 e y = 2
x = 2;
y = ++x; // pré-fixado => x = 3 e y = 3
Operadores relacionais
>
>=
<
<=
==
!=
Maior que
Maior ou igual a
Menor que
Menor ou igual a
Igual a
Diferente de
Operadores lógicos
&
&&
|
||
^
!
E (longo)
E (curto)
Ou (longo)
Ou (curto)
Ou exclusivo
Não
longo - significa que todas as condições são avaliadas
curto - a avaliação da condição da esquerda já define o
resultado
exclusivo - se uma e apenas uma condição for true. Se
duas forem true resulta em false.
Operadores compostos
• O operador de atribuição pode ser
combinado com qualquer operador binário.
x = 110;
x += 12; // mesmo que x = x + 12
x /= 4; // mesmo que x = x / 4
Precedência
Ordem
1
2
3
4
5
6
7
8
9
10
11
Operador
++ -- + - ~ !(tipo)
* / %
+ < > <= >= instanceof
== !=
^
|
&&
||
?:
= += -= *= /=
Associatividade
D para E
E para D
E para D
E para D
E para D
E para D
E para D
E para D
E para D
D para E
D para E
Parênteses podem ser usados para alterar a precedência.
Comandos de Fluxo
Comandos de Decisão
if...else
• Executa, condicionalmente, um grupo de
comandos, dependendo do valor de uma
expressão. Caso só haja uma instrução no
bloco, as chaves poderão ser omitidas.
• Sintaxe:
if (condição) comandos [else comandos]
if (condição)
instrução ou bloco de instruções cercados por chaves
[else if (condição-n)
instrução ou bloco de instruções cercados por chaves]
[else
instrução ou bloco de instruções cercados por chaves]
if…else – exemplos
int x = 7;
if (x > abc)
// abc é uma variável definida
//em outra parte do programa
System.out.println(“x é maior que abc”);
else{
x += abc;
abc++;
}
if ( k < 20 ) j = 5 ; //é válido
if…else – exemplos
if aninhado
if ((salario >= 1000) && (salario < 2500))
IR = salario * 0.1;
else
if (salario < 5000)
IR = salario * 0.2;
else
IR = salario * 0.25;
Operador Condicional ?:
• Alternativa para o comando if... else.
• Sintaxe:
(expressão lógica) ? expressão 1 : expressão 2
int total = (salario < 1000) ? salario : salario – IR;
switch
• Executa um de vários grupos de comandos,
dependendo do valor de uma expressão.
• Sintaxe:
switch (expressão_teste) {
[case expressão constante 1:
comandos]
[default expressão constante n:
comandos]
}
• expressão_teste só pode ser do tipo byte,
short, int ou char
switch – exemplos
switch (diaSemana) {
case 1:
System.out.println(“Hoje é segunda-feira”);
break;
case 2:
System.out.println(“Hoje é terça-feira”);
break;
...
case 6:
System.out.println(“Hoje é sábado”);
break;
case 7:
System.out.println(“Hoje é domingo”);
break;
default:
System.out.println(“Opção inválida!!!”);
break;
}
switch – exemplos
switch (diaSemana) {
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println(“Hoje é dia de trabalho!!”);
break;
case 6:
case 7:
System.out.println(“Hoje é fim de semana!!!”);
break;
default:
System.out.println(“Opção inválida!!!”);
break;
}
Comandos de Repetição
• while.
• do...while.
• for
while
• Executa uma série de comandos enquanto
uma condição for verdadeira.
• Sintaxe:
while (condição) {
comandos
}
while - exemplo
int i = 0;
while (i < 10) {
a += 45;
i++;
}
do...while
• Repete um bloco de comandos enquanto uma
condição for verdadeira ou até que uma condição
seja verdadeira.
• Sintaxe:
do{
instrução ou bloco de instruções;
}while (condição);
• Pode-se omitir as chaves se o bloco tiver apenas
uma linha ou uma instrução.
for
•Repete um grupo de comandos em um número
específico de vezes.
•Sintaxe:
for (inicialização; terminação; incremento){
instrução ou bloco de instruções
}
inicialização - pode ser uma ou mais separadas por
vírgula
terminação - uma expressão lógica
incremento - pode ser um ou mais separados por vírgula
for
public class TestaFor{
public static void main(String args[])
{
for (int i = 0; i <=10 ; i++){
System.out.println("i = " + i);
for (int j = 1; j <= 20; j++){
System.out.println("\tj = " + j);
if (j == 5) break;
}
}
}
}
Comandos de Desvio
• break.
• continue.
• break e continue rotulados
break
• Sai incondicionalmente para primeira
instrução após um laço ou de uma instrução
switch.
1
2
3
4
5
6
7
8
9
10
for (int i = 1; i <= limite; i++) {
fatorial = 1;
for (int j = 2; j <= i; j++) {
fatorial *= j;
if (fatorial == 120)
break;// vai para linha 8
}
System.out.println(i + "! é " + fatorial);
}
System.out.println(“O valor do fatorial é “ + fatorial);
continue
• Abandona a iteração em que o laço se
encontra e vai incondiconalmente para a
próxima.
1
2
3
4
5
6
7
8
9
10
for (int i = 1; i <= limite; i++) {
fatorial = 1;
for (int j = 2; j <= i; j++) {
if (fatorial == 120)
continue;//vai para linha 3
fatorial *= j;
}
System.out.println(i + "! é " + fatorial);
}
System.out.println(“O valor do fatorial é “ + fatorial);
break e continue rotulados
• É utilizado para sair ou ir para a próxima
iteração dentro de laços aninhados.
1 loop_fora:
2
for (int i = 1; i <= limite; i++) {
3
fatorial = 1;
4
for (int j = 2; j <= i; j++) {
5
if (fatorial == 120)
6
break loop_fora;// vai para linha 11
7
fatorial *= j;
8
}
9
System.out.println(i + "! é " + fatorial);
10
}
11
System.out.println(“O valor do fatorial é “ + fatorial);
Lab 02.A
gráfico de barras horizontais
Objetivo:
– Exercitar o uso de tipos de dados primitivos,
declaração de variáveis e controles de fluxo de
programa.
Tarefas da etapa A:
– Usando a estrutura for faça um código que
desenhe na tela do sistema n pontinhos
horizontais.
Lab 02.C
gráfico de barras horizontais
Objetivo:
– Exercitar o uso de tipos de dados primitivos,
declaração de variáveis e controles de fluxo de
programa.
Tarefas da etapa C:
– Dado um programa que calcula a soma de dois
números entrados pelo usuário, faça um outro que
calcule a média dos números.